赞
踩
DNS协议运行在UDP协议之上,使用端口53。
DNS请求报文的结构是
0
标识ID | 标志 |
问题数 | 资源记录数 |
授权资源记录数 | 额外资源记录数 |
查询问题 | |
回答 | |
授权信息 | |
额外信息 |
其中,后面四个字段的长度可变,它们各自的字节数也不一定是4的倍数。
标识ID:有发出DNS请求的客户端生成,对应的DNS响应报文中也要置同样的ID。
标志字段如下:
QR:0表示查询报文,1表示响应报文
Opcode:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
AA:表示授权回答(authoritative answer).
TC:表示可截断的(truncated)
RD:表示期望递归
RA:表示可用递归
随后3bit必须为0
Rcode:返回码,通常为0(没有差错)和3(名字差错
问题数字段是指这个DNS请求中待解析的域名数目,一般是1,也即0x0001。对应的DNS响应报文的问题数字段也置同样的值
资源记录数、授权资源记录数、额外资源记录数在DNS请求报文中都为0,在响应报文中视情况而定。
查询问题字段的格式为
0
| |
查询类型 | 查询类 |
查询名为要查找的名字,它由一个或者多个标示符序列组成。每个标示符已首字节数的计数值来说明该标示符长度,每个名字以0结束,计数字节数必须是0~63之间。该字段无需填充字节。如www.baidu.com在DNS报文中就是
03 | 77 | 77 | 77 | 05 | 62 | 61 | 69 | 64 | 75 | 03 | 63 | 6f | 6d | 00 |
| w | w | w | | b | a | i | d | u | | c | o | m | |
查询类型一般为0x0001,表示是从host address解析IP
查询类一般为0x0001,表示class IN
DNS请求报文和对应的响应报文中的查询问题字段是完全一样的
回答字段的格式如下
0
| |
响应类型 | 响应类 |
| |
数据长度 | 数据(长度不定,字节数不一定是4的倍数) |
NAME是该响应报文对应的DNS请求报文要解析的域名,可能是和查询问题字段中的查询名完全一样,但更多的情况下:考虑到响应报文中的查询问题字段和请求报文完全一样,也就包含了查询名,那么也可采用压缩的方式来存放,即用一个16bit的指针来指示NAME的偏移量。比如0xC00C,二进制就是1100 0000 0000 1100,头两位为11表示这是一个双字节的指针,而不是一个计数字节(上面提到了,查询名里的计数字节为0~63,因此头两位不可能为11),后面的14位则表示这个压缩指针所指的数据离DNS报文(也就是UDP数据报的数据部分,不是指包含DNS报文的UDP数据报的报头)头部的偏移量是12。
生存时间以s为单位
数据长度是数据的字节数
响应类和请求报文的查询问题字段中的查询类对应
响应类型我目前见到了两种,一种是0x0001,这种情况下后面的数据是NAME对应的IP,占4字节;一种是0x0005,这种情况下后面的数据是NAME重定向到的域名(比如www.xiaonei.com重定向到www.renren.com),这里数据也用查询名中的方式来存放重定向到的域名。
相应报文:
fc79 | 8180 | 0001 | 0003 | 0000 | 0000 | |
标识ID | 标志字段 | 问题数 | 资源记录数 | 授权资源记录数 | 额外资源记录数 | |
03 77 77 77 05 62 61 69 64 75 03 63 6f 6d 00 | 0001 | 0001 | ||||
查询名(www.baidu.com) | 查询类型 | 查询类 | ||||
c00c | 0005 | 0001 | ||||
指针,指向DNS头部开始偏移12位,即查询名开始位置 | 第一个资源记录的响应类型 | 第一个资源记录的响应类 | ||||
0000 0213 | 000f | |||||
第一个资源记录的生存时间 | 第一个资源记录的数据长度 | |||||
03 77 77 77 01 61 06 73 68 69 66 65 6e c0 16 | ||||||
第一个资源记录的数据,c016之前对应www.a.shifen,c016又是指针,指向DNS头部开始偏移22位,即查询名中的03 63 6f 6d 00,也就是.com | ||||||
c02b | 0001 | 0001 | ||||
第二个资源记录的NAME,指针,指向DNS头部开始偏移43位,即第一个资源记录中的数据 | 第二个资源记录的响应类型 | 第二个资源记录的响应类 | ||||
0000 0179 | 0004 | |||||
第二个资源记录的生存时间 | 第二个资源记录的数据长度 | |||||
77 4b d5 33 | c02b | |||||
第二个资源记录的数据,即IP:119.75.213.51 | 第三个资源记录的NAME,指针,指向DNS头部开始偏移43位,即第一个资源记录中的数据 | |||||
0001 | 0001 | 0000 0179 | ||||
第三个资源记录的响应类型 | 第三个资源记录的响应类型 | 第三个资源记录的生存时间 | ||||
0004 | 77 4b d5 32 | |||||
第三个资源记录的数据长度 | 第二个资源记录的数据,即IP:119.75.213.50 | |||||
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。