dns解析过程及原理

一、DNS的特点

DNS服务有分布式、层次化的结构特点。面对全球众多的计算机,为了有效管理庞大的域名和IP地址对应关系数据库,这些数据库被分布存储在不同的计算机中,共同提供域名和IP的查询功能。目前全球共有13台根服务器,其中1台为主根服务器,其余12台为辅根服务器。

1.1 域名格式

. ——root

TLD——顶级域名(top-level domain),如com、org、edu等。

SLD——次级域名(second-level domain),用户可以注册,例如“3onedata”。

host——主机名(三级域名),用户可以任意分配,例如“www”。

1.2 域名授权

DNS的一个重要特点是域名授权。在整个DNS系统中,网络信息中心NIC有权负责顶级域名的分配和指定次级域名的授权机构。一个独立管理的DNS子树就是一个区域(zone),一个区域可以再划分更小的区域。例如,“com.”是一个区域,其下可以再划分“.”子区域。当一个区域被委派了授权机构后,该机构需要搭建DNS服务器,记录该区域下的子域名和IP的对应关系,并可再委派子区域的DNS系统。这样,根服务器记录顶级域名的域名和IP的对应关系数据库,顶级域名服务器记录次级域名的域名和IP的对应关系数据库,形成了阶梯式的管理结构,减轻了每个授权DNS服务器的负载。

1.3 DNS缓存

DNS的另一个特点是建立缓存。当一个DNS服务器查询到域名和IP的映射关系后,会将该映射数据写入自己的缓存中。如果其他主机再来询问相同的映射关系时,直接读取自己的缓存,而不需要再去询问其他服务器。

1.4 DNS的TCP和UDP

DNS同时TCP和UDP的53号端口。在大多数情况下,DNS使用UDP进行通信,但UDP能够传输的DNS报文最大为512字节。如果客户端在得到响应报文后得知该响应报文大于512字节,或者主从DNS服务器在进行数据库同步时,那么它们会使用TCP进行通信,将大于512字节的报文进行分段传输。

二、DNS的工作原理

DNS解析过程中最重要的两个概念是递归查询和迭代查询。当你在浏览器输入一个网址时,查询过程会依次在浏览器缓存、本地hosts文件、客户端DNS缓存、本地DNS服务器、ISP的缓存和根服务器等进行查询。如果ISP向根服务器发起询问请求,根服务器会返回顶级域名的IP地址,ISP再向顶级域名服务器发起询问请求,依次迭代查询直到获得完整的域名和IP的映射关系。递归查询是查询者变化,迭代查询是查询者不变。

三、反向解析

DNS除了由域名获得IP的正向解析外,还提供了由IP获得域名的反向解析。在DNS域名树中,有一个特殊的域名arpa,它的子域in-addr就是为反向解析准备的。当一个DNS系统获得域名授权后,同时也会获得in-addr.arpa的授权。例如,某域名的IP地址为192.168.138.1,在DNS域名树中会有相应的反向解析记录。客户端通过反向解析该IP地址,实际上是正向解析一个以in-addr.arpa为后缀的域名,最后访问到标识为该IP的DNS服务器获取域名和IP的映射关系。反向解析的本质还是正向解析。

四、DNS报文格式

DNS报文格式包括包头部分和可变字段部分。包头部分包括标识、标志、问题数、资源记录数、授权资源记录数、额外资源记录数等字段。可变字段部分包括查询名、查询类型、查询类、生存时间、资源数据长度、资源数据等字段。在实际使用中,需要根据这些字段的格式和要求进行报文的组装和解析。