S协议数据字段包含查询名、查询类型、类、生存时间等,用于域名解析相关
报文首部(Header)字段
字段名称 | 位数 | 含义 |
---|---|---|
ID | 16位 | 由客户端程序生成的唯一标识符,用于区分不同的DNS请求和响应报文,服务器在响应时会原样返回该ID,以便客户端识别对应的响应。 |
QR | 1位 | 指示该消息是请求还是响应,0表示请求;1表示响应。 |
OPCODE | 4位 | 指示请求的类型,由请求发起者设定,响应消息中复用该值,0表示标准查询;1表示反转查询;2表示服务器状态查询,3 15目前保留,以备将来使用。 |
AA(Authoritative Answer) | 1位 | 表示响应的服务器是否是权威DNS服务器,只在响应消息中有效,1表示是权威服务器,0表示不是。 |
TC(TrunCation) | 1位 | 指示消息是否因为传输大小限制而被截断,若为1,表示响应已超过规定长度(如UDP的512字节限制)并被截断,只返回前部分字节。 |
RD(Recursion Desired) | 1位 | 该值在请求消息中被设置,响应消息复用该值,如果被设置为1,表示客户端希望服务器递归查询,但服务器不一定支持递归查询。 |
RA(Recursion Available) | 1位 | 该值仅在响应消息中出现,当值为1时,表示服务器支持递归查询。 |
Z | 3位 | 保留备用,在所有请求和应答报文中,其值必须为0。 |
RCODE(Response code) | 4位 | 在响应消息中被设置,表示响应的差错状态,取值及含义如下: 0:No error condition,没有错误条件; 1:Format error,请求格式有误,服务器无法解析请求; 2:Server failure,服务器出错; 3:Name Error,只在权威DNS服务器的响应中有意义,表示请求中的域名不存在; 4:Not Implemented,服务器不支持该请求类型; 5:Refused,服务器拒绝执行请求操作; 6 15:保留备用。 |
QDCOUNT | 16位(无符号) | 指明Question部分包含的实体数量。 |
ANCOUNT | 16位(无符号) | 指明Answer部分包含的资源记录(Resource Record,RR)数量。 |
NSCOUNT | 16位(无符号) | 指明Authority部分包含的资源记录数量。 |
ARCOUNT | 16位(无符号) | 指明Additional部分包含的资源记录数量。 |
问题(Question)部分字段
字段名称 | 含义 |
---|---|
QNAME | 查询的域名,以字符形式表示,长度不定,以0x00结尾,查询www.example.com时,该字段即为www.example.com。 |
QTYPE | 查询类型,常见的取值及含义如下: A(1):期望获得查询域名的IPv4地址; NS(2):查询一个域的权威域名服务器; CNAME(5):查询别名为指定域名的规范主机名; MX(15):查询邮件交换记录,即接收邮件的邮件服务器信息等。 |
QCLASS | 查询类,常见的取值为IN(Internet),表示互联网类别。 |
资源记录(Resource Record)部分字段(包括Answer、Authority、Additional部分)
字段名称 | 含义 |
---|---|
NAME | 名字,根据TYPE的不同有不同的含义,若TYPE = A,则NAME是主机名;若TYPE = NS,则NAME是一个域。 |
TYPE | 类型,决定了与域名关联的信息种类,常见类型及含义见上述QTYPE部分。 |
CLASS | 类,常见的为IN(Internet),表示互联网类别。 |
TTL | 生存时间,以秒为单位,表示客户端可以缓存该资源记录的时间,在这段时间内,客户端可以直接使用缓存的结果,无需再次向服务器查询。 |
RDLENGTH | 资源数据(RDATA)所占的字节数。 |
RDATA | 资源数据,根据TYPE的不同存储不同的信息,若TYPE = A,则RDATA是主机名对应的IPv4地址;若TYPE = MX,则RDATA包含邮件服务器的优先级和域名等信息。 |
相关问题与解答
问题1:DNS查询中,如果设置了RD(Recursion Desired)位为1,但服务器不支持递归查询会怎样? 解答:如果客户端在DNS查询中设置了RD位为1,表示希望服务器进行递归查询,但服务器不支持递归查询时,服务器不会按照客户端的期望进行递归查询,服务器会根据自身的设置和能力,采取以下两种可能的处理方式之一:一是返回一个非权威的应答,可能是从缓存中获取的结果或者通过迭代查询得到的近似结果;二是返回一个错误响应,通常RCODE会设置为“Not Implemented”(代码4),表示服务器不支持该请求类型(即递归查询)。
问题2:为什么DNS响应报文中的AA(Authoritative Answer)位很重要? 解答:AA位在DNS响应报文中非常重要,因为它用于指示响应的服务器是否是权威DNS服务器,当AA位为1时,表示响应是由权威DNS服务器提供的,这意味着所返回的DNS记录是最准确、最可靠的,是对该域名具有管理权限的服务器所提供的原始数据,而当AA位为0时,表示响应不是来自权威服务器,可能是来自缓存或其他非权威来源,对于客户端来说,知道响应是否来自权威服务器可以帮助判断所获取的DNS信息的准确性和可信度,