DNS 响应报文详解

本文详细介绍了DNS响应报文的格式,包括Header、Question、Answer、Authority/Additional数据段,并探讨了如何在Node.js中使用Buffer创建响应报文。内容涵盖了Buffer长度确定、参数转换,以及不同数据类别的处理方法,如普通字节、按位拼接和无符号整数。通过理解这些概念,读者可以进一步构建DNS代理服务器。
摘要由CSDN通过智能技术生成

上一篇我已经解释了DNS请求报文怎么解析,不会的自己坐飞机(飞机入口)。这一篇主要从DNS服务器的角度来解释,如何自己创建响应报文返回给客户端。

就这个命题,可以罗列出DNS服务器在创建response响应报文时需要解决的问题。

  • dns数据报类型Buffer?
  • Node.js中Buffer如何创建?
  • 正常情况我们操作的字符串和数字等是否可以转换为Buffer?
  • Buffer是否可以创建response响应报文指定类型的参数值?
  • response响应报文与request请求报文的异同?

说到这,你是不是已经察觉到。既然dns请求和dns响应都做了,那是不是自己动手写一个dns代理服务器也可以信手拈来呢。

答案是: Yes

那然我们继续完成这最后一步,response响应报文的创建。

DNS响应报文格式

response响应报文和request请求报文格式相同。不同的地方是参数的值不同。

response参数详解

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

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

Header报文头

属性说明:

  • 客户端请求ID是为了保证收到DNS服务器返回报文时能正确知道是哪一个请求的响应报文。所以一个完整的DNS请求和响应,里面requestresponseID 必须保持一致。
  • header.qr = 1,表示响应报文
  • header.ancount,这个牵涉到应答记录条目,所以要根据应答字段Answer计算。
  var response = {};
  var header = response.header = {};

  header.id = request.header.id;//id相同,视为一个dns请求
  
  header.qr = 1;    //响应报文
  header.opcode = 0;//标准查询
  header.rd = 1;
  header.ra = 0;
  
  header.z = 0;
  header.rcode = 0;//没有错误

  header.qdcount = 1;
  header.nscount = 0;
  header.arcount = 0;
  header.ancount = 1;//这里answer为一个,所以设置为1.如果有多个answer那么就要考虑多个answer
复制代码

Question 请求数据

将请求数据原样返回。

  var question
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值