参考:《网络是怎样连接的》——户根勤_Evan 以下为个人笔记 [上一篇博客](http://erica.kkwen.cn/admin/write-post.php?cid=110 "上一篇博客")中说到解析器与DNS服务器之间的交互过程,这篇博客主要说一下DNS服务器的工作。 ####1. DNS服务器的基本工作 DNS服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应 **客户端查询消息的组成**: - **域名** - **Class** 在最早设计DNS 方案时,DNS在互联网以外的其他网络中的应用也被考虑到了,而Class就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此Class 的值永远是代表互联网的IN - **记录类型** 表示域名对应何种类型的记录。 A:表示域名对应的是IP 地址 (A 是 Address 的缩写); MX:表示域名对应的是邮件服务器 (MX:Mail eXchange,邮件交换); PTR:根据IP地址反查询域名; CNAME:查询域名相关别名; NS:查询DNS服务器IP地址; SOA:查询域名属性信息; 对于不同的记录类型,服务器向客户端返回的信息也会不同。 下图为此书中提到的DNS服务器的基本工作。  **DNS服务器会从域名与IP地址的对照表中查找相应的记录,并返回IP地址。** 当客户端要查询域名www.lab.glasscom.com 的IP地址时,首先要向DNS服务器发送包含域名、Class、记录类型的查询消息,DNS服务器根据已有记录查找三者均匹配的记录并返回。 如果是查询邮件地址tone@glasscom.com 的IP地址,过程和上述一致,注意域名是@后面的部分,上图中浏览器返回10 、mail.glasscom.com 以及IP地址 这三条信息。分别表示优先级、邮件服务器的域名 和 邮件服务器的IP地址,优先级数字的数值越小,则表示优先级越高。 ####2. 域名层次结构 DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。 DNS中的域名都是用句点来分隔的,比如www.lab.glasscom.com 这里的句点代表了不同层次之间的界限。在域名中,越靠右的位置表示其层级越高。相当于一个层级的部分称为域。因此,com域的下一层是glasscom 域,再下一层是lab域,再下面才是www 这个名字。 这种具有层次结构的域名信息会注册到DNS 服务器中,而每个域都是作为一个整体来处理的。换句话说就是,一个域的信息是作为一个整体存放在DNS 服务器中的,不能将一个域拆开来存放在多台DNS 服务器中。不过,DNS 服务器和域之间的关系也并不总是一对一的,一台DNS 服务器中也可以存放多个域的信息。比如网络运营商的DNS 服务器中就存放了很多个域的信息。 ####3. 寻找DNS服务器和IP地址 DNS通过上服务器查询出下级DNS服务器的IP地址,也就可以向下级DNS服务器发送查询请求。将负责管理下级域的DNS 服务器的IP 地址注册到它们的上级DNS 服务器中,然后上级DNS 服务器的IP 地址再注册到更上一级的DNS 服务器中,以此类推。 例如:lab.glasscom.com, 负责管理lab.glasscom.com 这个域的DNS服务器的IP地址需要注册到 glasscom.com 域的DNS服务器上,管理glasscom.com 这个域的DNS服务器的IP地址需要注册到com 域的DNS服务器上。 实际上 com,jp(顶级域)不是最顶层,在上面还有一层根域,一般书写时被忽略,但根域是真实存在的。如果要明确表示根域,则在域名之后在一个句点,如 `www.glasscom.com.` 根域的DNS 服务器信息会被保存在互联网中所有的DNS 服务器中,分配给根域DNS 服务器的IP 地址在全世界仅有13 个,而且这些地址几乎不发生变化。 **查找目标DNS服务器 和 缓存**  假如我们要查询 www.lab.glasscom.com 这台服务器的信心,客户端首先会访问最近的一台DNS 服务器(也就是客户端的TCP/IP 设置中填写的DNS 服务器地址),如果最近的DNS服务器没有存放域名信息,就会从最顶层开始找。最近的DNS 服务器中保存了根域DNS 服务器的信息,因此它会将来自客户端的查询消息转发给根域DNS 服务器。 有时候不需要从根域开始查找,因为DNS 服务器有一个缓存功能,可以记住之前查询过的域名。首先查看要查询的信息是否在缓存中,如果在则直接返回响应,不在,则继续向下进行,减少了查询所需的时间。此处的缓存是有时效性的,需要进行新鲜度查询。  最后修改:2019 年 01 月 17 日 09 : 25 AM © 著作权归作者所有