为什么 DNS 使用 UDP 协议?

DNS通常使用UDP协议传输数据,但并非仅限于此。DNS设计之初推荐使用UDP,主要因为其轻量级、低开销。然而,当查询响应超过512字节时,TCP用于防止数据截断和确保可靠性。TCP在区域传输、大型DNS记录和安全性增强时更为适用。随着DNS记录的增加,TCP成为UDP的补充,用于处理大容量数据和确保传输完整性。近年来,DNS协议也引入了TLS和HTTPS以增强安全性,但这些增加了额外的性能开销。设计选择取决于数据包大小,小数据包使用UDP,大数据包则依赖TCP。
摘要由CSDN通过智能技术生成

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。

今天要分析的具体问题是『为什么 DNS 使用 UDP 协议』,DNS 作为整个互联网的电话簿,它能够将可以被人理解的域名翻译成可以被机器理解的 IP 地址,使得互联网的使用者不再需要直接接触很难阅读和理解的 IP 地址。作者曾经在 详解 DNS 与 CoreDNS 的实现原理 一文中介绍过 DNS 的实现原理,这篇文章中就不会介绍 DNS 的实现原理了,感兴趣的读者可以看一下。

相信 DNS 使用 UDP 协议已经成为了软件工程师的常识,对计算机网络稍有了解的人都知道 DNS 会使用 UDP 协议传输数据,但是这一观点其实不是完全正确的,我们在这里就会详细分析『为什么 DNS 会使用 UDP 传输数据』以及『为什么 DNS 不止会使用 UDP 传输数据』两个问题,希望能够帮助各位读者理解 DNS 协议的全貌。

概述

我们将要讨论的两个问题其实并不冲突,在绝大多数情况下,DNS 都是使用 UDP 协议进行通信的,DNS 协议在设计之初也推荐我们在进行域名解析时首先使用 UDP,这确实能解决很多需求,但是不能解决全部的问题。

实际上,DNS 不仅使用了 UDP 协议,也使用了 TCP 协议,不过在具体介绍今天的问题之前,我们还是要对 DNS 协议进行简单的介绍:DNS 查询的类型不止包含 A 记录、CNAME 记录等常见查询,还包含 AXFR 类型的特殊查询,这种特殊查询主要用于 DNS 区域传输,它的作用就是在多个命名服务器之间快速迁移记录,由于查询返回的响应比较大,所以会使用 TCP 协议来传输数据包。

作为被广泛使用的协议,我们能够找到非常多 DNS 相关的 RFC 文档,DNS Camel Viewer 中列出了将近 300 个与 DNS 协议相关的 RFC 文档,其中有 6 个是目前的互联网标准,有 102 个是 DNS 相关的提案,这些文档共同构成了我们目前对于 DNS 协议的设计理解,作者也没有办法去一一阅读其中的内容,只选择了其中一些重要的文档帮我们理解 DNS 的发展史以及它与 UDP/TCP 协议的关系,这里只会摘抄文档中与 UDP/TCP 协议相关的内容:

  1. RFC1034 · Domain Names - Concepts and Facilities Internet Standard, 1987-11
  • DNS 查询可以通过 UDP 数据包或者 TCP 连接进行传输;
  • 由于 DNS 区域传输的功能对于数据的准确有着较强的需求,所以我们必须使用 TCP 或者其他的可靠协议来处理 AXFR 类型的请求;

2.RFC1035 · Domain Names - Implementation and Specification互联网支持命名服务器通过 TCP 或者 UDP 协议进行访问;

  • UDP 协议携带的消息不应该超过 512 字节,超过的消息会被截断并设置 DNS 协议的 TC 位,UDP 协议对于区域传输功能是不可接受的,不过是互联网上标准查询的推荐协议。通过 UDP 协议发送的查询可能会丢失,所以需要重传策略解决这个问题;

3.RFC1123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值