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 地址。具体过程如下:
- 用户主机上运行着 DNS 的应用客户端,就是我们的PC机或者手机客户端运行着 DNS 客户端;
- 浏览器将接收到的 URL 中抽取出域名字段,就是访问的主机名,比如
http://www.baidu.com/
, 并将这个主机名传送给 DNS 应用的客户端; - DNS 客户机端向 DNS 服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式 DNS 集群的工作)
- 该 DNS 客户机最终会收到一份回答报文,其中包含有该主机名对应的 IP 地址;
- 一旦该浏览器收到来自 DNS 的 IP 地址,就可以向该 IP 地址定位的 Web 服务器发起 TCP 连接。
在第三步的过程中,具体又可以分为以下过程。
- 在浏览器拿到输入的 URL 后,先检查浏览器自身缓存中有没有被解析过的这个域名对应的 IP 地址,如果有就到此结束了。
- 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的 DNS 缓存,如果有就到此结束了。
- 如果还没有找到,就会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 IP 地址。
- 如果在本地的 hosts 文件没有能够找到对应的 IP 地址,浏览器会发出一个 DNS 请求到本地 DNS (域名分布系统)服务器 。
- 本地 DNS 服务器接收到请求后会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回域名解析结果,一般 80% 的域名解析在此之前(包含这一步)都能完成。如果缓存记录中没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。
- 根 DNS 服务器没有记录具体的域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
- 本地 DNS 服务器继续向域服务器发出请求,域服务器收到请求之后,也不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,你所查找的域名的解析服务器的地址。
- 本地 DNS 服务器向域名的解析服务器发出请求,这时就能收到一个域名和 IP 地址对应关系,本地 DNS 服务器不仅要把 IP 地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。