首页/网络/抓包与流量分析速查/附加记录与胶水判读
应用层报文判读71 条

附加记录与胶水判读

响应携带附加上段(additional)用于减少后续查询:NS 与对应地址、SRV 目标地址常以胶水形式同来,缺失时会引发额外往返。

附加段与胶水记录

DNS 响应的附加段(Additional Section)用来携带与本次查询相关、但不在直接答案里的记录,最常见的用途是「胶水」:返回 NS 记录时把名字服务器的地址一起带上,返回 SRV 记录时把目标主机的地址一起带上。有了它,客户端不必再发一轮查询,解析总耗时会少一个往返。附加段缺失或未被使用,就会在抓包里看到额外的查询。

基本信息

抓包字段dns.count.additional 为附加段记录数,dns.additional 为具体记录
问题段字段dns.qry.name 为被查询的名字,dns.qry.type 为查询类型
常见携带场景NS 查询附带地址、SRV 查询附带目标地址、MX 查询附带邮件服务器地址
判读方向先看响应带了几条附加记录,再看后续是否存在多余查询
不保证使用附加段内容是提示性质,客户端可以忽略并自行再查
体积风险附加记录多会推高响应体积,接近上限时有被截断的可能

典型使用场景

  • 解析耗时分析:判断一次解析为什么产生两轮查询,是否因缺少胶水记录
  • 服务发现排查:SRV 解析后客户端还要再查一次地址,影响服务启动速度
  • DNS 服务器比对:不同递归服务器返回的附加段策略不同,影响客户端耗时
  • 容量评估:附加记录多导致响应变大,评估 UDP 截断与切换 TCP 的概率
  • 迁移验证:域名服务器变更后确认胶水记录仍然正确指向新地址

查看与统计

查看与统计
# 找出附加段非空的响应, 看被查询的名字与记录数
tshark -r a.pcap -Y 'dns.count.additional > 0' -T fields -e frame.number -e dns.qry.name -e dns.count.answers -e dns.count.additional | head -20
# 观察同一名字是否出现两轮查询(第一轮缺胶水的典型表现)
tshark -r a.pcap -Y 'dns.flags.response == 0' -T fields -e frame.number -e dns.qry.name -e dns.qry.type | head -30
tshark -r a.pcap -Y 'dns.qry.type == 33' -T fields -e frame.number -e dns.qry.name -e dns.count.additional   # SRV 类查询

记录类型与胶水作用

查询类型典型附加记录缺失后的表现
NS名字服务器的地址记录客户端或递归服务器需再查一次地址
SRV目标主机地址服务发现多一个往返, 启动变慢
MX邮件服务器地址投递路径解析多一轮查询
CNAME 链链上中间名字的记录部分客户端需要逐级再查
普通 A/AAAA通常没有附加记录属正常, 不必视为缺失
附加段里的内容不保证被客户端采用:不同解析库、不同操作系统的处理策略差别很大,判断「有没有起到减少往返的作用」要看后续是否真的又发了查询。
统计解析行为时如果只看问题段的记录数,会低估实际传输的记录量;涉及体积与截断风险的评估要连附加段一起算。

易错点

  • 把附加段里的地址当成权威答案:附加记录只是提示,客户端可能忽略并重新查询,据它判定解析结果会出错
  • 附加记录多导致响应体积接近上限,UDP 截断后切换到 TCP,偶发解析变慢却难复现,需要关注截断标志
  • 只统计问题段与答案段的记录数,忽略附加段,容量与截断评估偏小
  • 看到同一名字出现两轮查询就断定服务器异常,实际是客户端自行再查地址,属正常行为

数据来源与参考

  • RFC 1034(附加段)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌