工作每天都在用的 DNS 协议,你真的了解么?

我们经常访问一些网址的时候,浏览器里输入类似于 www.baidu.com 这样的地址,那么在浏览器里输入这个地址---> 百度服务器给我们返回这个百度的页面,中间的过程是什么样的呢?

带着这个问题,我们一起来解析一下其中的过程。

1、域名和 IP 的关系

首先,类似于‘www.baidu.com’和‘www.sina.com.cn’这样的地址我们统一叫做域名。那么,使用域名访问后,这个请求直接就能到达对应的服务器么?

不是的!

在这个过程中是需要把这个域名转换为 IP 地址的,只有通过 IP 地址去寻找才可以找到这个服务器的位置,服务器才能收到请求。

为什么要在域名和 IP 之间进行这个转化操作呢?我们来回答两个问题:

  1. 那么我们为什么不直接用 IP 地址通信?

    因为 IP 地址对于用户来说不方便记忆,域名更加方便于用户记忆和使用,例如 www.baidu.com 这是百度的域名;www.sina.com.cn 就是新浪的域名,非常好理解和记忆;

  2. 那为什么不干脆直接用域名来找服务器?

这是因为域名的长度是不固定的,不便于计算机进行处理;而 IP 地址是固定长度的,如果是 IPv4 地址就是 32 位的,IPv6 的地址就是 128 位的,长度固定计算机更方便处理。

所以,总结一点就是 IP 地址是面向主机的,而域名则是面向用户的。所以我们需要将域名和 IP 地址进行相互转化。

2、域名转化为 IP 地址

hosts 文件

在最开始的时候,人们都用电脑的 hosts 文件进行域名和 IP 的转化。

在我们电脑 C:\Windows\System32\drivers\etc 路径下面有一个 host 文件,可以保存域名和 IP 的对应关系,如下图所示:

图片

图中框起来的这行,就是把 120.24.89.47 这个 IP 地址映射为 www.tricy1.com 这个域名。当配置完成之后,就算 www.tricy1.com 这个域名不是一个真实注册的域名,在本台电脑里依然可以访问 www.tricy1.com 这域名就可以访问到这个 IP 地址对应的网站(柠檬班的测试派论坛)。

最初,通过互联网信息中心来管理这个 hosts 文件,如果有一个新的计算机想接入网络,或者某个计算 IP 变更都需要到信息中心申请变更 hosts 文件。其他计算机也需要定期更新,才能上网。但是这样太麻烦了。为了更加简便的操作,就出现了 DNS 协议。

DNS 协议

DNS 协议,全称 Domain Name System,它是一个应用层协议,它建立在 UDP 或 TCP 协议之上,默认使用 53 号端口。

客户端默认通过 UDP 协议进行通讯,但是由于广域网中不适合传输过大的 UDP 数据包,因此规定当报文长度超过了 512 字节时,应转换为使用 TCP 协议进行数据传输。所以,DNS 协议是少有的既可以用 UDP 协议,又可以用 TCP 协议作为底层协议的应用层协议。

该协议的功能就是将人类可读的域名 (如,www.qq.com) 转换为机器可读的 IP 地址 (如,119.147.15.13)。

图片

域名的层级结构:

如上图可见的域名中间是用点分割开的。这个每个点隔开的代表什么呢?

我们就需要了解一下域名是分层结构,域名服务器也是对应的层级结构,分别为根域名,顶级域名系统,二级域名系统,三级域名系统等如下图所示:

图片

全球共有 13 台根服务器,这 13 台根域名服务器中文名字分别为“A”至“M”,其中 10 台设置在美国,另外三台分别设置在英国、瑞典、日本。1 个主根服务器放置在美国,其余 12 个均为辅根服务器。

比如www.baidu.com这个域名的层级结构就如下:

com: 顶级域名。表示这是一个企业域名。

baidu: 二级域名,指公司名。

www: 网络协议(World Wide Web)

域名一般不能超过 5 级,从左到右域的级别变高,高的级域包含低的级域。域名在整个 Internet 中是唯一的,当高级子域名相同时,低级子域名不允许重复。

有了域名结构,还需要有一个东西去解析域名,那就是域名服务器。

域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。

DNS 解析过程

图片

如上如所示,我们来解析一下 DNS 解析的过程:

用户希望通过客户端浏览器访问百度服务器-域名为 www.baidu.com:

  1. 用户在浏览器里输入 www.baidu.com 域名,默认优先查找浏览器缓存,看缓存中是否含有域名对应的 IP 地址

  2. 当浏览器中找不到时,会检测系统中的 Hosts 文件中是否有对应的 IP 地址

  3. 如果 hosts 里没有这个域名的映射,则查找本地 DNS 服务器;

  4. 若没有,通过 DNS 服务器就向根域名服务器中进行查找;根域名服务返回可供查询的顶级域名服务器 IP 地址;

  5. 顶级域名服务器返回 DNS 响应消息;

  6. 主机收到响应消息后,可以正常访问该服务器了;并将结果保存,以备下一次使用


而 DNS 协议的查询方法又分为以下两种:


递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以 DNS 客户机的身份向其它域名服务器查询,直到得到最终的 IP 地址告诉本机

图片

迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。

图片

通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/346005.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用numpy处理图片——基础操作

大纲 准备工作图片像素大小修改透明度 numpy是一款非常优秀的处理多维数组的Python基础包。在现实中,我们最经常接触的多维数组相关的场景就是图像处理。本系列将通过若干篇对图像处理相关的探讨,来介绍numpy的使用方法,以获得直观的体验。 本…

怎么理解接口幂等,项目中如何保证的接口幂等

都 2024 年了,竟然还有人不知道接口幂等是什么东西。 hi,大家好,我是 浮生 今天正好有空,给大家分享一下 幂等的实现。 什么是幂等? 一、问题解析 简单来说,就是一个接口,使用相同的参数重复执…

vivado ip manager cache

https://china.xilinx.com/video/hardware/configuring-managing-reusable-ip-vivado.html “Core Containers”(核容器):勾选Use Core Containers for IP(为 IP 使用核容器)即可使用核容器功能,该功能支持…

Nginx配置动静分离实例(Nginx处理静态资源)

Nginx动静分离概述 Nginx 动静分离是指动态请求跟静态请求分开,可以理解为使用Nginx处理静态页面(包含静态资源文件),Tomcat处理动态页面; 提醒一下:下面实例讲解是在Mac系统演示的; 两个方式…

MySQL 从零开始:03 基本入门语句

文章目录 1、连接数据库1.1 命令提示符登陆1.2 MySQL 8.0 Command Line Client 登陆1.3 MySQL Workbench 登陆 2、基本语句2.1 查看所有库2.2 创建库2.3 删除库2.4 选择数据库2.5 查看表2.6 创建表2.7 删除表2.8 改表名2.9 清空表 在上一小节中介绍了 MySQL 数据库的安装&#…

github新建仓库提交代码(本地命令行)

网页在home页面新建一个仓库之后&#xff0c;复制该仓库的URL&#xff0c;待会要用到在本地打开gitbash 进行初始化并将仓库克隆到本地git init git clone <刚刚复制的仓库URL>进入文件夹&#xff0c;创建文件&#xff0c;可以将要提交的内容写入文档cd <克隆下来的文…

抽象类与接口

什么是抽象类&#xff1f; public abstract class A{} //用abstract修饰的类就是抽象类 抽象类里面有什么&#xff1f; 抽象方法 普通方法 public abstract void speak();//用abstract修饰的方法叫做抽象方法 抽象类怎么使用&#xff1f; 我们通过另一个类继承抽象类&…

css选择器在python中如何使用

css选择器整理&#xff1a;https://blog.csdn.net/qq_40910788/article/details/84842951 目标&#xff1a;爬取某文章网站列表&#xff1a; 基础代码如下&#xff1a; import random import time import urllib.request import redef reptileTest(url):try:my_headers [&q…

【保姆级教程】【YOLOv8替换主干网络】【1】使用efficientViT替换YOLOV8主干网络结构

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Ftrans飞驰云联荣获“CSA 2023安全创新奖”

2023年12月21日&#xff0c;第七届云安全联盟大中华区大会在深圳成功举办。会上&#xff0c;CSA大中华区发布了多个研究成果并进行 CSA 2023年度颁奖仪式&#xff0c;Ftrans飞驰云联以其突出的技术创新能力和广泛的市场应用前景&#xff0c;荣获备受瞩目的“CSA 2023安全创新奖…

对回调函数的各种讲解说明

有没有跟我师弟一样的童靴~&#xff0c;学习和使用ROS节点时&#xff0c;对其中的callback函数一直摸不着头脑的&#xff0c;以下这么多回调函数的讲解&#xff0c;挨个看&#xff0c;你总会懂的O.o 回调函数怎么调用,如何定义回调函数&#xff1a; 回调函数怎么调用,如何定义…

activiti流程图+动态表单

使用技术 jeecg-bootactivitivue3form-create 简单效果展示 流程图绘制 审批人配置 动态表单配置 流程审批 流程审批记录 填写表单信息 源码地址 后台&#xff1a;https://gitee.com/houshixin/jmg-boot前端&#xff1a;https://gitee.com/houshixin/jmg-ui