mDNS / DNS Flags 字段结构

182 阅读1分钟

📘 mDNS / DNS Flags 字段结构(16 bits)

diff
复制编辑
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA| Z|AD|CD|   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

解释每一部分:

Bit名称含义
0QR查询/响应标志,0=Query,1=Response
1-4Opcode查询类型(通常是 0,表示标准查询)
5AA授权回答(Authoritative Answer)
6TC被截断(Truncated)
7RD期望递归(Recursion Desired)
8RA服务器支持递归(Recursion Available)
9-11Z保留
12AD验证数据(Authenticated Data)
13CD禁用验证(Checking Disabled)
14-15RCODE响应码,0表示无错误

常见的 Flags 示例

✅ 查询报文(Query)

makefile
复制编辑
Flags: 0x0000
QR=0(Query), Opcode=0, AA=0, TC=0, RD=0, RA=0, Z=0, RCODE=0

✅ 应答报文(Response)

makefile
复制编辑
Flags: 0x8400
QR=1(Response), AA=1(授权回答)

⚠️ 示例:响应被截断

makefile
复制编辑
Flags: 0x8200
QR=1, AA=0, TC=1(被截断)

❌ 错误响应

makefile
复制编辑
Flags: 0x8183
QR=1, AA=1, RCODE=3(Name Error,域名不存在)

mDNS 特别注意事项:

  • QR 是最关键的:

    • 0 = Query
    • 1 = Response
  • mDNS 中通常不开启递归(RD) ,所以一般 RD=0,RA=0。

  • Flags: 0x8400 是最常见的响应头部,表示「这是一个响应(QR=1),而且是 authoritative answer(AA=1)」


总结表

Flags 值含义
0x0000标准查询
0x8400标准应答(mDNS 常见)
0x8000应答但非授权(AA=0)
0x8183应答,域名错误(RCODE=3)
0x8200应答,报文被截断
0x0100标准查询 + 请求递归(一般非 mDNS)