DNS协议详解

DNS协议

DNS解析流程

过程详解:https://cloud.tencent.com/developer/news/324975

image-20210328170125444

第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址

第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP

第三步:向本地域名解析服务系统发起域名解析的请求

第四步:向根域名解析服务器发起域名解析请求

第五步:根域名服务器返回gTLD域名解析服务器地址

第六步:向gTLD服务器发起解析请求

第七步:gTLD服务器接收请求并返回Name Server服务器

第八步:Name Server服务器返回IP地址给本地服务器

第九步:本地域名服务器缓存解析结果

第十步:返回解析结果给用户

DNS区域传输

使用tcp协议来传输数据包

它的作用就是在多个命名服务器之间快速迁移记录,由于查询返回的响应比较大,所以会使用 TCP 协议来传输数据包。

DNS使用UDP还是TCP?

https://draveness.me/whys-the-design-dns-udp-tcp/

我们可以简单总结一下 DNS 的发展史,1987 年的 RFC1034RFC1035 定义了最初版本的 DNS 协议,刚被设计出来的 DNS 就会同时使用 UDP 和 TCP 协议,对于绝大多数的 DNS 查询来说都会使用 UDP 数据报进行传输,TCP 协议只会在区域传输的场景中使用,其中 UDP 数据包只会传输最大 512 字节的数据,多余的会被截断;两年后发布的 RFC1123 预测了 DNS 记录中存储的数据会越来越多,同时也第一次显式的指出了发现 UDP 包被截断时应该通过 TCP 协议重试。

很多人认为 DNS 使用了 UDP 协议来获取域名对应的 IP 地址,这个观点虽然没错,但是还是有一些片面,更加准确的说法其实是 DNS 查询在刚设计时主要使用 UDP 协议进行通信,而 TCP 协议也是在 DNS 的演进和发展中被加入到规范的:

  1. DNS 在设计之初就在区域传输中引入了 TCP 协议,在查询中使用 UDP 协议;
  2. 当 DNS 超过了 512 字节的限制,我们第一次在 DNS 协议中明确了『当 DNS 查询被截断时,应该使用 TCP 协议进行重试』这一规范;
  3. 随后引入的 EDNS 机制允许我们使用 UDP 最多传输 4096 字节的数据,但是由于 MTU 的限制导致的数据分片以及丢失,使得这一特性不够可靠;
  4. 在最近的几年,我们重新规定了 DNS 应该同时支持 UDP 和 TCP 协议,TCP 协议也不再只是重试时的选择;

这篇文章已经详细介绍了 DNS 的历史以及选择不同协议时考虑的关键点,在这里我们重新回顾一下 DNS 查询选择 UDP 或者 TCP 两种不同协议时的主要原因:

  • UDP 协议
    • DNS 查询的数据包较小、机制简单;
    • UDP 协议的额外开销小、有着更好的性能表现;
  • TCP 协议
    • DNS 查询由于 DNSSEC 和 IPv6 的引入迅速膨胀,导致 DNS 响应经常超过 MTU 造成数据的分片和丢失,我们需要依靠更加可靠的 TCP 协议完成数据的传输;
    • 随着 DNS 查询中包含的数据不断增加,TCP 协议头以及三次握手带来的额外开销比例逐渐降低,不再是占据总传输数据大小的主要部分;

无论是选择 UDP 还是 TCP,最核心的矛盾就在于需要传输的数据包大小,如果数据包小到一定程度,UDP 协议绝对最佳的选择,但是当数据包逐渐增大直到突破 512 字节以及 MTU 1500 字节的限制时,我们也只能选择使用更可靠的 TCP 协议来传输 DNS 查询和相应。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值