DNS 请求报文详解

DNS

DNS【域名系统:(英文:Domain Name System,缩写:DNS)】是互联网的一项服务。 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS使用TCP和UDP端口53。

白话版

就是客户端(例如:浏览器)传入的网站域名,到DNS列表中找到对应的ip返回给客户端,然后客户端根据ip就可以找到对应的服务器,就可以向服务器发送请求了。

说的在直接点:DNS目的就是把对应服务器IP给客户端。最后客户端与服务器通信就没DNS什么事了。

DNS 报文格式

DNS报文格式,不论是请求报文,还是DNS服务器返回的应答报文,都使用统一的格式。

  • Header 报文头
  • Question 查询的问题
  • Answer 应答
  • Authority 授权应答
  • Additional 附加信息
  DNS format

  +--+--+--+--+--+--+--+
  |        Header      |
  +--+--+--+--+--+--+--+
  |      Question      |
  +--+--+--+--+--+--+--+
  |      Answer        |
  +--+--+--+--+--+--+--+
  |      Authority     |
  +--+--+--+--+--+--+--+
  |      Additional    |
  +--+--+--+--+--+--+--+
复制代码

Header 报文头

  • ID: 2个字节(16bit),标识字段,客户端会解析服务器返回的DNS应答报文,获取ID值与请求报文设置的ID值做比较,如果相同,则认为是同一个DNS会话。
  • FLAGS: 2个字节(16bit)的标志字段。包含以下属性:
    • QR: 0表示查询报文,1表示响应报文;
    • opcode: 通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求),[3,15]保留值;
    • AA: 表示授权回答(authoritative answer)-- 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器;
    • TC: 表示可截断的(truncated)--用来指出报文比允许的长度还要长,导致被截断;
    • RD: 表示期望递归(Recursion Desired) -- 这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的;
    • RA: 表示支持递归(Recursion Available) -- 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询;
    • Z : 保留值,暂未使用;
    • RCODE: 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下:
      • 0 : 没有错误。
      • 1 : 报文格式错误(Format error) - 服务器不能理解请求的报文;
      • 2 : 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求;
      • 3 : 名字错误(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在;
      • 4 : 没有实现(Not Implemented) - 域名服务器不支持查询类型;
      • 5 : 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答.比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer);
      • [6,15] : 保留值,暂未使用。
  • QDCOUNT: 无符号16bit整数表示报文请求段中的问题记录数。
  • ANCOUNT: 无符号16bit整数表示报文回答段中的回答记录数。
  • NSCOUNT: 无符号16bit整数表示报文授权段中的授权记录数。
  • ARCOUNT: 无符号16bit整数表示报文附加段中的附加记录数。
  Header format

    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                      ID                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |QR|  opcode   |AA|TC|RD|RA|   Z    |   RCODE   |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QDCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    ANCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    NSCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    ARCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
复制代码

Question 查询字段

  • QNAME 无符号8bit为单位长度不限表示查询名(广泛的说就是:域名).
  • QTYPE 无符号16bit整数表示查询的协议类型.
  • QCLASS 无符号16bit整数表示查询的类,比如,IN代表Internet.
  Question format

    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                     ...                       |
  |                    QNAME                      |
  |                     ...                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QTYPE                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QCLASS                     |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
复制代码
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值