众所周知,互联网中的地址其实是IP地址,有IPV4和IPV6两种类型,但是难以记忆,因此发明了有特殊含义的域名来让用户使用。用户输入的是域名,但是网络通信使用的却是IP地址,将域名解析为IP地址就是通过DNS解析实现的。
基础知识
域名的构成
下图为域名的结构。其实每个域名都是有根域的,如www.volcengine.com其实应该是www.volcengine.com.,域名末尾的点就是根域名,很多情况下根域名是可以省略掉的。在上述例子中,com为顶级域名,volcengine.com是二级域名或主域名,www.volcengine.com是子域名或分域名。值得注意的是,顶级域名不一定只由一个域名构成,也可以由两个域名构成。虽然.com、.cn都是顶级域名,但是.com.cn也是顶级域名。

DNS解析是将域名解析为IP地址的过程,那域名和IP地址的映射关系存在哪里呢?答案是DNS权威服务器。用户通过在DNS管理平台添加域名的解析记录,管理平台将该记录同步到权威DNS服务器,实现域名与最终IP地址的绑定。
值得注意的是,用户为域名添加的解析记录值除了IP地址外还可以是其他类型。DNS记录有很多种,下图是TrafficRoute云解析DNS支持的部分记录类型,了解更多记录类型可以参看 https://www.volcengine.com/docs/6758/145121

DNS解析的过程
这是一个很经典的DNS解析流程图。

DNS解析流程
DNS解析的过程可以分为本地查询(1、2)与线上查询(3-11)。
本地查询
本地查询可以分为host文件查询与本地缓存查询。当用户在浏览器中访问域名时,会先进行本地查询,若本地查询命中,则直接返回;未命中,则需要访问线上的DNS服务器进行解析。
线上查询
线上 DNS 解析主要包含:Local DNS服务器、根域DNS服务器、顶级域DNS服务器、权威域DNS服务器。Local DNS服务器不在客户端本地,一般为运营商提供的线上DNS服务器;权威DNS是特定域名记录在域名注册商处所设置的DNS服务器,用于特定域名本身的管理。
线上查询主要分为递归查询和迭代查询:递归查询是浏览器把任务交给Local DNS ,然后等待Local DNS返回结果;迭代查询是Local DNS分别向各级DNS服务器发送查询请求,直到获取DNS解析结果为止。
总的来说,客户端向Local DNS服务器进行查询,如果命中Local DNS服务器的缓存,直接返回IP;没有命中,Local DNS服务器会向各级域名服务器进行查询,直到最终解析出IP为止。