DNS的512字节限制

根据协议标准,DNS协议同时占用UDP和TCP的53端口,这是为什么呢?

翻阅DNS资料,可以发现,DNS协议默认按UDP传输,为优化传输性能,DNS协议有一个512字节的限制,当数据长度超过了512字节时,DNS协议会改用TCP进行传输。

DNS协议从UDP切换到TCP的过程如下:

1、客户端向服务器发起UDP DNS请求;

2、如果服务器发现DNS响应数据超过512字节,则返回UDP DNS响应中

EDNS0

EDNS0:即Extension Mechanisms for DNS (EDNS(0)),详细情况可参考RFC 6891这份文档。

EDNS0是随着网络的发展,在DNS消息格式和它支持的消息内容已不足以满足一些DNS服务器的需求的情况下被提出的,它用于传递包大小,扩展了DNS协议。

EDNS0是在遵循已有的DNS消息格式的基础上增加一些字段,来支持更多的DNS请求业务。当然,具备

DNS超过512字节时常规交互

在进行示例之前,我们首先要找到能够产生超过512字节DNS报文的域名及DNS服务器。这是由于大部分的DNS响应都不会很长,而同时,不同的DNS服务器缓存的DNS数据是有差异的。

经过搜集,我们选取了微软的DNS服务器之一:208.84.2.53,同时,选取了进行示例的域名:outlook.com。

常规的DNS请求,不会设置OPT RR的CLASS值,因此会默认在DNS报文大于512字节时,换用TCP传输。

常规DNS交互的实力,选择使用windows自带的nslookup服务进行,命令如下:

nslookup -qt=ANY outlook.com 208.84.2.53

使用Wireshark抓包可看到报文如下:

可以看到,DNS在UDP传输之后自动进行了TCP DNS请求,响应体长度达到1010字节。

自动进行的关键是UDP的DNS响应报文里给truncated进行了置位:

因此,我们只需要找到

DNS突破UDP 512字节限制

对于超过512字节的DNS UDP报文,就不是那么容易获得的。一个简单的办法是,到骨干网络上去抓包,抓取DNS服务器之间的DNS同步报文。当然,对很多分析DNS协议的朋友,这不现实。

这里,将介绍一种在PC上产生超过512字节的UDP DNS报文的办法。

使用的仍然是前一节的DNS域名和服务器。

这里,需要找到

总结

只要找到合适的方法,就能很方便地突破DNS协议的UDP 512字节限制。如果有什么疑问,可以随时联系我。

长按进行关注。

最新文章

  1. Linux下python升级至2.7
  2. hbase读写流程
  3. [MODX] 3. Placeholder +
  4. Android从入门到精通pdf+书源代码
  5. google API的.NET库
  6. Sereja ans Anagrams
  7. Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理
  8. XML编程与应用-读取XML
  9. extjs最普通的grid
  10. 【NO.6】HTTP请求-配置-POST请求-GET请求
  11. Go 语言结构体
  12. Windows 7无声音的解决方案
  13. Django Cache缓存系统学习--数据库缓存
  14. Mac下安装最新版本的Graphviz
  15. uvm_pre_do
  16. JavaScript与正则表达式
  17. Android 友盟SDK 终极解决报错:SocialSDK_QQZone_2.jar contains native libraries that
  18. Java8使用@sun.misc.Contended避免伪共享(False Sharing)
  19. MySQL主从介绍 准备工作 配置主 配置从 测试主从同步
  20. NOI2002银河英雄传说——带权并查集

热门文章

  1. Hive安装、配置和使用
  2. Xcode报错:could not attach to pid:"1764"
  3. iOS----------iPhone导出手机所有短信
  4. php number_format金钱 价格 格式处理 由分单位转换成元(保留2为小数)
  5. Fiddler 过滤图片
  6. java直接存取MS Access的mdb数据库文件
  7. SSL握手中win xp和SNI的那点事
  8. idea安装以及使用
  9. 匿名内部类和局部内部类只能访问final变量的原因
  10. WPF 精修篇 DataGrid 筛选