TCP/IP 协议——十一章:名称解析和域名系统
名称解析和与域名系统
互联网支持使用主机名称来识别包括客户机和服务器在内的主机。主机名称通过名称解析的过程转换成IP地址
DNS是一个分布式的客户机/服务器网络数据库,TCP/IP应用程序使用它来完成主机名称和IP地址之间的映射。从应用程序的角度看,访问DNS是通过一个称为地址解析器的应用程序库来完成的。通常,在请求TCP打开一个连接或使用UDP发送一个单播数据报之前,应用程序必须将主机名称转换位IPv4与/或IPv6地址。
DNS缓存
名称服务其包含如名称到IP地址映射的信息,这些信息可以从三个途径获得:
- 直接来自区域数据库
- 区域传输的结果(来自一个从属服务器)
- 来自于在处理解析过程中的另一台服务器
第一种情况中,服务器应该包含该区域的授权信息(authoritative information),也可以称为该区域的授权服务器(authoritative server)。
值得一提的是,缓存同时适用于成功的解析和不成功的解析(称为否定缓存(negative caching))。如果一个特定域名的请求无法返回一个记录,该事实也会被缓存。当出错的应用程序一再请求不存在的域名时,这样做就可以帮助降低互联网流量。
DNS协议
DNS协议由两部分组成:
- 用于执行对DNS特定名称查询的查询/响应协议
- 名称服务器用于交换数据库记录的协议(区域传输)
一个完整的解析过程发生在几个实体之间,过程如图所示:
- A.HOEM 上的解析软件首先向本地名称服务器 GW.HOME 发送请求,请求将某域名如 EXAMPLE.COM 转化成一个IP地址;
- 很遗憾 GW.HOME 不知道这个IP地址,也不知道 EXAMPLE.COM 或是 COM TLD 的名称服务器,于是它转发到另一个DNS服务器,例如ISP提供的服务器地址;
(
这个过程称为解析) - ISP提供的服务器也不清楚,所以它联系根服务器 ; (根服务器不是递归的)
- 因为根服务器不是递归的,所以其返回需要联系的 COM TLD 的名称服务器的信息;
- 根据根服务器提供的信息,ISP服务器就找到了 gTLD 服务器;
- gTLD服务器给出了域名 EXAMPLE.COM 的名称服务器和服务器的IP地址,例如
A.IANA-SERVERS.NET;
- 基于6返回的信息,ISP联系适当的服务器;
- 该服务器返回请求的地址;
- ISP服务器把地址返回给 GW.HOME;
- GW.HOME 再返回查询请求。
DNS消息格式
基本的DNS消息格式用于所有的DNS操作(查询,响应,区域传输,通知和动态更新)
如图所示:
名称 | 解释 |
---|---|
事务ID | 客户端设置,服务器返回,在客户端用于匹配响应和查询 |
QR | 查询(0),响应(1) |
OpCode | 操作吗,0表示查询,4表示通知,5表示更新,其他值无效 |
AA | 表示授权回答 |
TC | 表示截断回答,使用UDP时,当应答的长度超过512字节时,只返回前512个字节 |
RD | 期望递归,设置表示支持递归查询,但是对不支持递归的服务器没有效果,例如根服务器 |
Z | 置0,为将来保留 |
AD | 设置为真表示信息是已授权的 |
CD | 设置为真表示禁用安全检查 |
RECODE |
响应码,具体见P370,常见有以下两种: 0 NoError 没有错误 3 NXDomain 不存在域名;引用了未知域名 |
随后的四个字段表示组成DNS消息的问题、回答、授权和额外信息区段中的条目的数目
标签
数据标签以一字节的计数开始,该计数指定其后的字节数目。 名称以值为0结束。如图所示:
注意,每个标签的长度必须在0和63之间
压缩标签,如图所示:
首字节偏移量为0,如果出现了重复的标签既可以压缩。在重复出现的某个位置的字节两个高位置1,然后其后的14个字节组成一个偏移量。例如图中重复出现的edu,偏移量为4,两个高位置1后,其余为0则为192+后面置为4
原文地址: