5.5.2 DNS
概念
域名系统DNS(Domain Name System)是一种能够完成从名称到地址或从地址到名称的映射系统。在使用DNS的情况下,计算机用户可以间接地通过域名来完成通信。Internet中的DNS被设计成为一个联机分布式数据库系统,采用客户/服务器方式工作。分布式的机构使DNS具有很强的容错性。
域名空间
域名空间是一种具有层次结构的命名空间。其设计方式为所有的名称由倒置的树结构定义,根节点位于顶部。树的级别有0级(根节点)到127级,一共128级。整棵树汇聚到根节点,树的每一层定义了一个层次级别。域名空间如图5-34所示。
树中的每一个节点有一个标号(label)。标号是一个最多包含63个字符的字符串。根节点的标号是空字符串(空串)。DNS要求每一个节点的子节点(同一节点的分枝节点)有不同的标号,以确保域名的唯一性。
树中的每一个节点构成一个域名。一个完整的域名是用符号“.”分隔的标号序列。域名总是从节点向上读取到根节点。 最后一个标号是根节点的标号(为空)。
DNS是一种可以用于不同平台的协议。在Internet中,域名空间(树)分为三个不同部分:
l 国家域
第一级采用两字符的国家英文名缩写(例如cn代表中国)。第二级标号可以是组织
机构,或者由自己国家自行指定。
l 通用域
最初的7个三字符域标号和新增的7个域标号,如表5-15所示。
l 反向域
用于将地址映射为名称。反向域的第一、二级节点为单节点,分别称为arpa和inaddr。域的其他部分用于定义IP地址。
处理反向域的服务器也是层次结构的。地址的网络号部分所处的层次高于主机号部分所处的层次。为整个网站服务的服务器所处的层次高于为子网服务的服务器。这种配置方法使得反向域与通用域或者国家域相比,看起来是倒置的。按照由下向上读取标号的约定,一个IP地址如140.252.13.33(一个B类地址,网络号是140.252)会被读取为33.13.252.140.in-addr.arpa.。
名称地址解析
在解析时需要使用DNS客户端的解析器。名称地址解析包括将名称映射为地址和将地址映射为名称。
解析过程如下:
1. 主机进程调用解析器。
2. 解析器向最近的DNS服务器发送映射请求:
l 将名称映射为地址:解析器向服务器提交域名。
l 将地址映射为名称:解析器向服务器提交经过处理的地址(例如33.13.252.140.inaddr.arpa.)。
3. 服务器判断是否含有解析器需要的信息:
l 是,向解析器发送映射响应。
l 否,将解析器指向其他服务器,或者请求其他服务器提供映射信息。解析器或其他服务器进行类似处理,直至服务器向解析器发送映射响应。
4. 解析器收到并解析该映射响应,以确定该响应是一个真正的解析还是一个错误。
5. 解析器将结果传递给发出解析请求的主机进程。
解析方式分为如下两种:
l 递归解析
客户端(解析器)期望服务器提供最终答案。如果服务器是被查询域名的授权者,服务器会检查其数据库并做出响应。如果服务器不是授权者,服务器会把请求发送给其他服务器(通常是父服务器),并等待响应。如果父服务器是授权者,父服务器就做出响应。否则父服务器仍把查询发送给其他服务器。当查询最终得到解析后,响应就回溯,直到最终到达发出请求的客户端。
递归解析的流程示意图如图5-35所示。
流程说明如下:
1. 客户机向.edu域名服务器发送查询请求,希望获知域名test.china.huawei.com对应的IP地址。
2. .edu域名服务器发现自己不是该域名的授权者,将该请求发送给根域名服务器。
3. 根域名服务器发现自己也不是该域名的授权者,将该请求发送给.com域名服务器。
4. .com域名服务器发现自己也不是该域名的授权者,将该请求发送给.huawei.com域名服务器。
5. .huawei.com域名服务器发现自己也不是该域名的授权者,将该请求发送给.china.huawei.com域名服务器。
6. .china.huawei.com域名服务器发现自己是该域名的授权者,查询得到该域名对应的IP地址,并将其发送给.huawei.com域名服务器。
7. .huawei.com域名服务器将其发送给.com域名服务器。
8. .com域名服务器将其发送给根域名服务器。
9. 根域名服务器将其发送给.edu域名服务器。
10. .edu域名服务器将其发送给客户机。
l 迭代解析
如果客户端没有请求递归查询,则映射以迭代的形式完成。如果服务器是名称的授权者,服务器发送应答;反之,服务器会返回一个它认为能够解析该查询的服务器的IP地址给客户端,由客户端负责向第二台服务器重复发送请求。如果新的地址解析服务器能够解析该问题,就用IP地址响应该请求。否则,第二台服务器再向客户端返回新的地址解析服务器的IP地址。客户端则向第三台服务器重复发送请求。重复类似过程,直至客户端查询到最终结果。
迭代解析的流程示意图如图5-36所示。
流程说明如下:
1. 客户机向.edu域名服务器发送查询请求,希望获知域名test.china.huawei.com对应的IP地址。
2. .edu域名服务器发现自己不是该域名的授权者,向客户机返回根域名服务器的IP地址。
3. 客户机向根域名服务器发送查询请求。
4. 根域名服务器发现自己也不是该域名的授权者,向客户机返回.com域名服务器的IP地址。
5. 客户机向.com域名服务器发送查询请求。
6. .com域名服务器发现自己也不是该域名的授权者,向客户机返回.huawei.com域名服务器的IP地址。
7. 客户机向.huawei.com域名服务器发送查询请求。
8. .huawei.com域名服务器发现自己也不是该域名的授权者,向客户机返回.china.huawei.com域名服务器的IP地址。
9. 客户机向.china.huawei.com域名服务器发送查询请求。
10. .china.huawei.com域名服务器发现自己是该域名的授权者,查询得到该域名对应的IP地址,并将其发送给客户机。
高速缓存
服务器每次接收到不属于自己域的名称请求时,它需要搜索自己的数据库以查找一台服务器的IP地址。缩短查询时间能提高效率。DNS使用高速缓存机制处理该问题。当服务器向其他服务器请求映射并得到回应时,它首先将该信息存储在高速缓存中,然后再发送给客户端。如果同一客户端或者其他客户请求同一映射,它会检查地高速缓存解析该请求。且需要通知客户该响应来自于高速缓存而不是来源于授权服务器,服务器会将该响应标志为“非授权性的”。
高速缓存能够提高解析速度,但也存在问题。如果一台服务器长时间缓存一种映射,可
能会发送给客户端一个过期的映射。通常有如下两种技术可以防止发生这种情况:
l 授权服务器始终给映射增加称为TTL(Time to Live)的信息。TTL以秒为单位,定义接收服务器可以缓存该信息的持续时间。超过该时间,映射变为无效,任何请求必须再次发送到授权服务器。
l DNS需要每一台服务器为它缓存的每一个映射保存一个TTL计数器。高速缓存会定期检查,清除TTL已经过期的映射。
报文格式
DNS报文由12字节长的首部和4个长度可变的字段组成,其报文格式如图5-37所示。
报文中各字段的含义如表5-16所示。
------------------------------------------------------------
概念
域名系统DNS(Domain Name System)是一种能够完成从名称到地址或从地址到名称的映射系统。在使用DNS的情况下,计算机用户可以间接地通过域名来完成通信。Internet中的DNS被设计成为一个联机分布式数据库系统,采用客户/服务器方式工作。分布式的机构使DNS具有很强的容错性。
域名空间
域名空间是一种具有层次结构的命名空间。其设计方式为所有的名称由倒置的树结构定义,根节点位于顶部。树的级别有0级(根节点)到127级,一共128级。整棵树汇聚到根节点,树的每一层定义了一个层次级别。域名空间如图5-34所示。
![](http://img.bbs.csdn.net/upload/201608/20/1471661177_770445.jpg)
树中的每一个节点有一个标号(label)。标号是一个最多包含63个字符的字符串。根节点的标号是空字符串(空串)。DNS要求每一个节点的子节点(同一节点的分枝节点)有不同的标号,以确保域名的唯一性。
树中的每一个节点构成一个域名。一个完整的域名是用符号“.”分隔的标号序列。域名总是从节点向上读取到根节点。 最后一个标号是根节点的标号(为空)。
DNS是一种可以用于不同平台的协议。在Internet中,域名空间(树)分为三个不同部分:
l 国家域
第一级采用两字符的国家英文名缩写(例如cn代表中国)。第二级标号可以是组织
机构,或者由自己国家自行指定。
l 通用域
最初的7个三字符域标号和新增的7个域标号,如表5-15所示。
![](http://img.bbs.csdn.net/upload/201608/20/1471661202_19710.jpg)
![](http://img.bbs.csdn.net/upload/201608/20/1471661240_760089.jpg)
l 反向域
用于将地址映射为名称。反向域的第一、二级节点为单节点,分别称为arpa和inaddr。域的其他部分用于定义IP地址。
处理反向域的服务器也是层次结构的。地址的网络号部分所处的层次高于主机号部分所处的层次。为整个网站服务的服务器所处的层次高于为子网服务的服务器。这种配置方法使得反向域与通用域或者国家域相比,看起来是倒置的。按照由下向上读取标号的约定,一个IP地址如140.252.13.33(一个B类地址,网络号是140.252)会被读取为33.13.252.140.in-addr.arpa.。
名称地址解析
在解析时需要使用DNS客户端的解析器。名称地址解析包括将名称映射为地址和将地址映射为名称。
解析过程如下:
1. 主机进程调用解析器。
2. 解析器向最近的DNS服务器发送映射请求:
l 将名称映射为地址:解析器向服务器提交域名。
l 将地址映射为名称:解析器向服务器提交经过处理的地址(例如33.13.252.140.inaddr.arpa.)。
3. 服务器判断是否含有解析器需要的信息:
l 是,向解析器发送映射响应。
l 否,将解析器指向其他服务器,或者请求其他服务器提供映射信息。解析器或其他服务器进行类似处理,直至服务器向解析器发送映射响应。
4. 解析器收到并解析该映射响应,以确定该响应是一个真正的解析还是一个错误。
5. 解析器将结果传递给发出解析请求的主机进程。
解析方式分为如下两种:
l 递归解析
客户端(解析器)期望服务器提供最终答案。如果服务器是被查询域名的授权者,服务器会检查其数据库并做出响应。如果服务器不是授权者,服务器会把请求发送给其他服务器(通常是父服务器),并等待响应。如果父服务器是授权者,父服务器就做出响应。否则父服务器仍把查询发送给其他服务器。当查询最终得到解析后,响应就回溯,直到最终到达发出请求的客户端。
递归解析的流程示意图如图5-35所示。
![](http://img.bbs.csdn.net/upload/201608/20/1471661224_383418.jpg)
流程说明如下:
1. 客户机向.edu域名服务器发送查询请求,希望获知域名test.china.huawei.com对应的IP地址。
2. .edu域名服务器发现自己不是该域名的授权者,将该请求发送给根域名服务器。
3. 根域名服务器发现自己也不是该域名的授权者,将该请求发送给.com域名服务器。
4. .com域名服务器发现自己也不是该域名的授权者,将该请求发送给.huawei.com域名服务器。
5. .huawei.com域名服务器发现自己也不是该域名的授权者,将该请求发送给.china.huawei.com域名服务器。
6. .china.huawei.com域名服务器发现自己是该域名的授权者,查询得到该域名对应的IP地址,并将其发送给.huawei.com域名服务器。
7. .huawei.com域名服务器将其发送给.com域名服务器。
8. .com域名服务器将其发送给根域名服务器。
9. 根域名服务器将其发送给.edu域名服务器。
10. .edu域名服务器将其发送给客户机。
l 迭代解析
如果客户端没有请求递归查询,则映射以迭代的形式完成。如果服务器是名称的授权者,服务器发送应答;反之,服务器会返回一个它认为能够解析该查询的服务器的IP地址给客户端,由客户端负责向第二台服务器重复发送请求。如果新的地址解析服务器能够解析该问题,就用IP地址响应该请求。否则,第二台服务器再向客户端返回新的地址解析服务器的IP地址。客户端则向第三台服务器重复发送请求。重复类似过程,直至客户端查询到最终结果。
迭代解析的流程示意图如图5-36所示。
![](http://img.bbs.csdn.net/upload/201608/20/1471661265_270983.jpg)
流程说明如下:
1. 客户机向.edu域名服务器发送查询请求,希望获知域名test.china.huawei.com对应的IP地址。
2. .edu域名服务器发现自己不是该域名的授权者,向客户机返回根域名服务器的IP地址。
3. 客户机向根域名服务器发送查询请求。
4. 根域名服务器发现自己也不是该域名的授权者,向客户机返回.com域名服务器的IP地址。
5. 客户机向.com域名服务器发送查询请求。
6. .com域名服务器发现自己也不是该域名的授权者,向客户机返回.huawei.com域名服务器的IP地址。
7. 客户机向.huawei.com域名服务器发送查询请求。
8. .huawei.com域名服务器发现自己也不是该域名的授权者,向客户机返回.china.huawei.com域名服务器的IP地址。
9. 客户机向.china.huawei.com域名服务器发送查询请求。
10. .china.huawei.com域名服务器发现自己是该域名的授权者,查询得到该域名对应的IP地址,并将其发送给客户机。
高速缓存
服务器每次接收到不属于自己域的名称请求时,它需要搜索自己的数据库以查找一台服务器的IP地址。缩短查询时间能提高效率。DNS使用高速缓存机制处理该问题。当服务器向其他服务器请求映射并得到回应时,它首先将该信息存储在高速缓存中,然后再发送给客户端。如果同一客户端或者其他客户请求同一映射,它会检查地高速缓存解析该请求。且需要通知客户该响应来自于高速缓存而不是来源于授权服务器,服务器会将该响应标志为“非授权性的”。
高速缓存能够提高解析速度,但也存在问题。如果一台服务器长时间缓存一种映射,可
能会发送给客户端一个过期的映射。通常有如下两种技术可以防止发生这种情况:
l 授权服务器始终给映射增加称为TTL(Time to Live)的信息。TTL以秒为单位,定义接收服务器可以缓存该信息的持续时间。超过该时间,映射变为无效,任何请求必须再次发送到授权服务器。
l DNS需要每一台服务器为它缓存的每一个映射保存一个TTL计数器。高速缓存会定期检查,清除TTL已经过期的映射。
报文格式
DNS报文由12字节长的首部和4个长度可变的字段组成,其报文格式如图5-37所示。
![](http://img.bbs.csdn.net/upload/201608/20/1471661286_71573.jpg)
报文中各字段的含义如表5-16所示。
![](http://img.bbs.csdn.net/upload/201608/20/1471661306_430703.jpg)
![点击查看原始大小图片](http://img.bbs.csdn.net/upload/201608/20/1471661316_90340.jpg)
![](http://img.bbs.csdn.net/upload/201608/20/1471661790_151590.jpg)
------------------------------------------------------------