总结很多人认为 DNS 使用了 UDP 协议来获取域名对应的 IP 地址,这个观点虽然没错,但是还是有一些片面,更加准确的说法其实是 DNS 查询在刚设计时主要使用 UDP 协议进行通信,而 TCP 协议也是在 DNS 的演进和发展中被加入到规范的:
- DNS 在设计之初就在区域传输中引入了 TCP 协议,在查询中使用 UDP 协议;
- 当 DNS 超过了 512 字节的限制,我们第一次在 DNS 协议中明确了『当 DNS 查询被截断时,应该使用 TCP 协议进行重试』这一规范;
- 随后引入的 EDNS 机制允许我们使用 UDP 最多传输 4096 字节的数据,但是由于 MTU 的限制导致的数据分片以及丢失,使得这一特性不够可靠;
- 在最近的几年,我们重新规定了 DNS 应该同时支持 UDP 和 TCP 协议,TCP 协议也不再只是重试时的选择;
- UDP 协议
- DNS 查询的数据包较小、机制简单;
- UDP 协议的额外开销小、有着更好的性能表现;
- TCP 协议
- DNS 查询由于 DNSSEC 和 IPv6 的引入迅速膨胀,导致 DNS 响应经常超过 MTU 造成数据的分片和丢失,我们需要依靠更加可靠的 TCP 协议完成数据的传输;
- 随着 DNS 查询中包含的数据不断增加,TCP 协议头以及三次握手带来的额外开销比例逐渐降低,不再是占据总传输数据大小的主要部分;
- 如何对使用 TCP 协议的 DNS 进行一些优化,减少一些额外开销?
- 我们现在已经可以使用 UDP/TCP/TLS/HTTPS 四种方式传输 DNS 数据,这些方式有什么异同?是否还可以通过其他的协议实现 DNS 查询?
如果对文章中的内容有疑问或者想要了解更多软件工程上一些设计决策背后的原因,可以在博客下面留言,作者会及时回复本文相关的疑问并选择其中合适的主题作为后续的内容 。如果对本文 为什么 DNS 使用 UDP 协议 · Why's THE Design? 的内容有疑问,请在下面的评论系统中留言,谢谢 。
原文链接:为什么 DNS 使用 UDP 协议 · Why's THE Design? · 面向信仰编程
Follow: Draveness · GitHub
【为什么 DNS 使用 UDP 协议?】
推荐阅读
- 迷迭香缩阴的使用方法,迷迭香纯露的使用方法
- Mysql建立、删除索引及使用
- 使用Openssl制作自签证书,并应用于自己MQTT服务器通讯
- 为什么大多数IP地址通常以192.168开头?
- 退役军人优待证有什么作用?
- 《寄生虫》结局 寄生虫大结局
- 喜茶为什么那么火,喜茶为什么这么火的原因
- 屋后为什么不能种花,都匀毛尖为什么这么贵
- 竹节虫是昆虫吗,为什么 最大的竹节虫有多长
- 全自动洗碗机的使用方法