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

本贴最后更新于 1028 天前,其中的信息可能已经渤澥桑田

前言

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

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

域名和IP的关系

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

不是的!

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

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

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

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

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

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

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

域名转化为IP地址

hosts文件

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

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

图片.png

图中框起来的这行,就是把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)。

图片.png

域名的层级结构:

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

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

图片.png

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

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

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

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

www: 网络协议(World Wide Web)

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

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

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

DNS解析过程

图片.png

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

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

  1. 用户在浏览器里输入www.baidu.com域名,默认优先查找浏览器缓存,看缓存中是否含有域名对应的IP地址
  2. 当浏览器中找不到时,会检测系统中的Hosts文件中是否有对应的IP地址
  3. 如果hosts里没有这个域名的映射,则查找本地DNS服务器;
  4. 若没有,通过DNS服务器就向根域名服务器中进行查找;根域名服务返回可供查询的顶级域名服务器IP地址;
  5. 顶级域名服务器返回DNS响应消息;
  6. 主机收到响应消息后,可以正常访问该服务器了;并将结果保存,已备下一次使用

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


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

图片.png

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

图片.png

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

迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。


回帖
请输入回帖内容 ...