应用层协议 --- DNS协议

DNS(Domain Name Service 域名服务)

       DNS协议基于UDP,使用端口号53。由数字组成的 IP 地址很难记忆,所以我们上网使用网站 IP 地址的别名——域名。实际使用中,域名与 IP 地址是对应的,这种对应关系保存在DNS 服务器之中。

       在浏览器中输入一个域名后,会有 DNS 服务器将域名解析为对应的 IP 地址。注意这和网络层的 ARP 协议的不同之处:DNS 提供的是域名与 IP 地址的对应关系,而 ARP 提供的是 IP 地址和 MAC 地址的对应关系。

DNS 服务器

DNS 服务器是个分层次的系统:

  • 根 DNS 服务器 :全世界共有 13 台根域名服务器,编号 A 到 M,其中大部分位于美国。

  • 顶级(TLD)DNS 服务器 :负责如 com 、org 、edu 等顶级域名和所有国家的顶级域名(如 cn 、uk 、jp )。

  • 权威 DNS 服务器 :大型组织、大学、企业的域名解析服务。

  • 本地 DNS 服务器 :通常与我们主机最近的 DNS 服务器。

域名解析过程:

首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:

(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;

(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;

(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级域查找二级域,二级域查找三级,

         直至找到解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后出现缓存中存储,

         然后,将解析结果发给客户机。

(4)若没有找到,则返回错误信息。

而域名解析的过程,有迭代查询和递归查询两种方式:

图片来源:实验楼网站

host 命令:

        在 linux 系统中,可以用 host 命令 进行 DNS 查询,查看一个指定域名的 IP,比如要查询 mirrors.aliyuncs.com 的 IP 地址:

DNS 报文:

       主机向 DNS 服务器发出的查询叫做DNS 报文,大致结构:

图片来源:实验楼网站

      DNS 问答报文的内容,都是 IP 和域名的对应信息,关于 DNS 首部和内容 各字段这里不做详细介绍。深入了解,可以先 host 一个域名,再使用 tcpdump 抓取报文并解读。

DNS 缓存和 hosts 文件:

       DNS 解析查询过程的图中,共发出了 8 份 DNS 报文,这是非常消耗时间的,所以实际应用上使用 DNS 缓存 :当一个 DNS 服务器接收到一个 DNS 回答后,会将其信息缓存一段时间,当再有一个对相同域名的查询时,便可直接回复。通过 DNS 缓存,其实很多查询都只需要本地 DNS 服务器便可完成。

使用命令打开 hosts 文件:

sudo gedit /etc/hosts

查看文件内容,可以发现里面全是类似下图中的 IP 和域名对应记录:

图片来源:实验楼网站

       在实际上网过程中,域名解析的的优先顺序是:先在 DNS 缓存查询,若没有找到记录,再查询 hosts 文件,若还是没找到记录,再向 DNS 服务器发出 DNS 查询报文。

猜你喜欢

转载自blog.csdn.net/qq_30123335/article/details/83383182