Skip to main content

DNS 及其工作原理

OSI 七层模型TCP/IP 五层模型TCP/IP 四层模型对应 UDP对应 TCP/IP 协议族的协议
应用层应用层应用层数据HTTP、TFTP、FTP、NFS、WAIS、SMTP
表示层Telnet、Rlogin、SNMP、Gopher
会话层SMTP、DNS
传输层传输层传输层TCP、UDP
网络层网络层网络层IP、ICMP、IGMP
数据链路层数据链路层网络接口层ARP、RARP、Ethernet、PPP
物理层物理层数据比特流IEEE 802.1A、IEEE 802.2 ~ IEEE 802.11

从前面网络的模型中可以看到位于会话层的 DNS 协议。

一、DNS 的定义

1、什么是 DNS

DNS(Domain Name System)即域名系统,用来将主机名和域名转为 IP 地址。

2、DNS 的性质

  • 从协议的层面看,它是一种应用层协议;

  • 从实体的层面看,它是一个由分层的 DNS 服务器实现的分布式数据库。

3、域名结构

命名方法:层次树状结构

域名由标号序列组成,而各标号之间用点隔开:

  • 标号都由英文字母和数字组成;
  • 中文域名是有的:中央编办.政务;
  • 每一个标号不超过 63 个字符;
  • 不区分大小写字母;
  • 除连字符(-)外不能使用其他的标点符号;
  • 级别最低的标号(域名)写在最左边、最高最右;
  • 由多个标号组成的完整域名总共不超过 255 个。

二、DNS 的工作原理

DNS 是应用层协议,事实上他是为其他应用层协议工作的,包括不限于 HTTP、SMTP 以及 FTP,用于将用户提供的主机名解析为 IP 地址。具体过程如下:

  1. 用户主机上运行着 DNS 的应用客户端,就是我们的PC机或者手机客户端运行着 DNS 客户端;
  2. 浏览器将接收到的 URL 中抽取出域名字段,就是访问的主机名,比如 http://www.baidu.com/, 并将这个主机名传送给 DNS 应用的客户端;
  3. DNS 客户机端向 DNS 服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式 DNS 集群的工作)
  4. DNS 客户机最终会收到一份回答报文,其中包含有该主机名对应的 IP 地址;
  5. 一旦该浏览器收到来自 DNS 的 IP 地址,就可以向该 IP 地址定位的 Web 服务器发起 TCP 连接。

在第三步的过程中,具体又可以分为以下过程。

  1. 在浏览器拿到输入的 URL 后,先检查浏览器自身缓存中有没有被解析过的这个域名对应的 IP 地址,如果有就到此结束了。
  2. 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的 DNS 缓存,如果有就到此结束了。
  3. 如果还没有找到,就会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 IP 地址。
  4. 如果在本地的 hosts 文件没有能够找到对应的 IP 地址,浏览器会发出一个 DNS 请求到本地 DNS (域名分布系统)服务器 。
  5. 本地 DNS 服务器接收到请求后会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回域名解析结果,一般 80% 的域名解析在此之前(包含这一步)都能完成。如果缓存记录中没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。
  6. DNS 服务器没有记录具体的域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
  7. 本地 DNS 服务器继续向域服务器发出请求,域服务器收到请求之后,也不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,你所查找的域名的解析服务器的地址。
  8. 本地 DNS 服务器向域名的解析服务器发出请求,这时就能收到一个域名和 IP 地址对应关系,本地 DNS 服务器不仅要把 IP 地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。