应用层协议DNS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用层协议DNS相关的知识,希望对你有一定的参考价值。

1.DNS是怎么工作的

  首先我们可以很简单的理解DNS协议,它就是一个将域名与ip地址进行双向转换的协议,而消息类型只有查询和回应2种类型。那客户端查询域名,是要请求谁呢?答案是域名服务器,现在域名服务器分为以下4类,按照层次从上往下:

根域名服务器:最高层次最重要的域名服务器,它知道所有的顶级域名服务器的域名和ip地址,一般请求根域名服务器返回的是要请求的顶级域名服务器的ip地址。我们常常听说的13个域名服务器指的就是它,但根域名服务器绝不是由仅仅的13台服务器组成,而是一个域名服务器由多个主机组成,它们有相同的ip。现在基本上普通域名服务器都能就近找到一台根域名服务器,当本地域名服务器请求根域名服务器时,路由器就能找到离这个本地域名服务器最近的一个根域名服务器。

顶级域名服务器:它负责该顶级域名中所有注册的二级域名。比如.com顶级域名服务器里就存放了所有xxx.com域名和ip地址映射表。

权限域名服务器:这类服务器负责某一特定域名的域名解析,很多公司都有权限域名服务。比如腾讯有它的权限域名服务器,里面存储了腾讯域名和ip地址的映射关系。同时权限域名服务器也充当了本地域名服务器的角色,你可以将你的域名注册到腾讯的域名服务器中。

本地域名服务器:这台服务器的ip地址就是我们电脑里配置的dns,本地域名服务器一般离用户是比较近的,当本地主机无法解析域名就会给本地域名服务器发送请求。

现在知道请求的是域名服务器了,也知道了一共有哪几类域名服务器,接下来我画了张图来描述整个dns请求的流程,整个过程采用迭代查询。注意权限域名服务器一般是不会采用递归查询的,它会直接返回ip地址让请求着再去访问这个ip。

技术分享

 2.DNS数据格式

  dns固定首部为12字节,如下图所示。当请求本地域名服务器如果它已经缓存了这个域名所对应的ip地址,那么这个答案将会被标记为非权威的,只有权限域名服务器返回的数据包才会将这个包标记为权威的,这对应着固定首部中的权威答案数据。后2张表格是dns首部中的标志位数据和rCode的数据。随着dns的发展标志中的16位功能已经有点不够用了,因此现在有很多dns服务器运行EDNS(扩展DNS),原来回应数据如果超过512字节将会被丢弃进而可以转为tcp连接,EDNS则可以支持超过512字节的大数据包回应。

技术分享

 

QR 1位 查询时这位为0,回应则为1
Opcode 4位 定义查询或回应的类型,值为0表示是一个标准的查询/回应
AA 1位 在回应数据包中使用,值为1表示回应是一个权威回应。
TC 1位 当回应大于512字节时此标志位置1,最终数据长度会被删减为512字节,此时客户端可采用tcp来询问
RD 1位 客户端使用递归时此位会置1
RA 1位 只在回应数据包中设置,当为1时表示可采用递归回应
保留位 3位 全都设置为0
rCode 4位 仅在回应消息中有用,表示返回类型
rCode 错误类型
0 没有错误
1 格式错误
2 名称服务器错误
3 域参照错误
4 不支持的查询类型
5 不允许的动作

以上是关于应用层协议DNS的主要内容,如果未能解决你的问题,请参考以下文章

TCP-IP之应用层协议

Linux 网络基础--网络层+数据链路层

DNS

互联网协议群(TCP/IP):多路复用是怎么回事?

计算机网络——数据中心(上)

DNS服务器