DNS的UDP请求,如果回复的数据长度超过512字节,服务端与客户端会有怎样的处理?通过搭建服务器进行测试。
512字节是哪部分
先确定下512字节指的是哪部分,阅读RFC1035,有这段描述
Messages carried by UDP are restricted to 512 bytes (not counting the IP or UDP headers). Longer messages are truncated and the TC bit is set in the header.
具体指UDP数据部分,没有UDP头部。需要注意UDP协议中的Length字段长度是包括UDP头部的。所以在后续看到的数据包分析中的长度包含UDP头部。
TCP协议重试方式
nslookup - 127.0.0.1
> set type=AAAA
> www.test.com
;; Truncated, retrying in TCP mode.
Server: 127.0.0.1
Address: 127.0.0.1#53
输出完整的数据
通过抓包分析,首先进行UDP DNS数据包的查询,返回小于512字节数据,并设置TC标志,表示截断,然后客户端又通过TCP连接重新查询,返回了全部数据。
UDP的查询返回了17个Answer RRs,TCP的查询返回了27个Answer RRs。
DNS UDP 扩展模式
利用dig发送
dig @127.0.0.1 www.test.com +bufsize=4096 AAAA
观察数据包,只有一次UDP协议的交互,其长度已经大于了512字节。与之前的区别在DNS 请求阶段携带了EDNS0的扩展协议,其中标示了UDP payload size可达到4096的长度。
数据包上传到网盘,通过链接可以下载。
https://pan.baidu.com/s/1PZCLh6rJkdX-FhIOG_bLTg