您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

DNS 支持 TCP 和 UDP 双协议,但为何偏偏只钟情 UDP?

时间:2020-11-26 13:52:05  来源:  作者:

一、前言

之前在聊到 App 网络优化时,聊到通过 HTTPDNS 替换掉传统的 DNS 解析,来达到网络优化的效果。其中提到 DNS 解析,是支持 UDP 和 TCP 双协议的。

但是细心的朋友通过 wireshark、sniffer、tcpdump 等抓包工具分析,会发现基本上所有客户端发起 DNS 查询的场景下,都只使用到了 UDP 协议。

那在 DNS 中,TCP 协议在什么场景下才会用到呢?

今天我们就来聊聊,DNS 的 TCP 的使用场景。

二、DNS

2.1 什么是 DNS

先来简单了解一下 DNS。

在网络的世界中,每个有效的域名背后都有为其提供服务的服务器,而我们网络通信的首要条件,就是知道服务器的 IP 地址。

但是记住域名(网址)肯定是比记住 IP 地址简单。如果有某种方法,可以通过域名,查到其提供服务的服务器 IP 地址,那就非常方便了。这里就需要用到 DNS 服务器以及 DNS 解析。

DNS(Domain Name System),它的作用就是根据域名,查出对应的 IP 地址,它是 HTTP 协议的前提。只有将域名正确的解析成 IP 地址后,后面的 HTTP 流程才可以继续进行下去。

DNS 同时占用了 UDP 和 TCP 的 53 端口,但是大多数情况下,DNS 查询都只使用到了 UDP,而 TCP 只在一些特殊情况下才会被使用到。

简单来说,DNS 使用 TCP 的情况,只有两种:

  1. DNS 查询响应报文大于 512 字节时。
  2. DNS 主、辅助服务器之间,进行区域传送时。

使用 TCP 的场景,基本上就是以上两种场景,当然,如果客户端主动发起一个 TCP 的 DNS 查询,也会使用 TCP 协议,这就不在讨论的范围内了。

2.2 DNS 响应报文大于 512 字节

说到 DNS 响应报文,先来看看 DNS 数据包的结构,对于 DNS 来说,请求报文和响应报文的结构是一样的。

DNS 支持 TCP 和 UDP 双协议,但为何偏偏只钟情 UDP?

 

这其中,我们主要关注 Flags 这个标志位的结构。

DNS 支持 TCP 和 UDP 双协议,但为何偏偏只钟情 UDP?

 

在 Flags 中,每个字段都有其自己的含义,在这里我们做重关注 QR 和 TC 两个字段。

  • QR 是一个 Bit,用于标识当前是查询报文(0)还是响应报文(1)。
  • TC 也是一个 Bit,当它的值为 1 时,表示当前响应报文总长度,已经超过 512 字节,所以做了截断处理,只返回前 512 个字节。

当遇到这种情况时,DNS 解析器会使用 TCP 来重发原来的查询请求,UDP 要求相应报文在 512 字节以内,而 TCP 则没有此限制,TCP 能用多个报文段来传送任意长度的用户数据。

DNS 查询是一个过程复杂,但是结果简单的过程。通常返回的数据不会大于 512 字节,这也就是为什么我们通过抓包的手段,得到的结果都是 DNS 在使用 UDP 协议。

需要注意的是,在实际使用中,很多 DNS 服务器在进行配置的时候,就把 TCP 查询包的方式关闭,仅支持 UDP 查询包。

2.3 DNS 主、辅助服务器的区域传送

DNS 服务器,在设计时就要求一定要是高可用、高并发和分布式的服务器,它被分为多个层次结构,分别是根 DNS 服务器、顶级域 DNS 服务器、权威 DNS 服务器。

这三类 DNS 服务器,组成一种类似树的结构。

DNS 支持 TCP 和 UDP 双协议,但为何偏偏只钟情 UDP?

 

在这个"树"中,一个独立管理的 DNS 子树,称为一个区域(zone)。一个 DNS 服务器负责管理一个或多个区域,为了满足高可用,一个区域的管理者必须为该区域提供一个主 DNS 服务器和至少一个辅助 DNS 服务器

主 DNS 服务器和辅助 DNS 服务器,必须是独立和冗余的,以便当某个 DNS 服务器发生故障时,不会影响该区域的 DNS 查询。

既然 DNS 服务器有主和辅助之分,那必然面临了数据同步的情况,我们将辅助服务器从主服务器同步信息的动作,称为区域传送,而在触发区域传送试,使用的就是 TCP 协议。

触发 DNS 区域传送的情况有两种:

  1. 新上线一台辅助服务器,会从主服务器执行区域传送,进行同步数据。
  2. 辅助服务器会定时(通常是 3 小时),向主服务器查询,以便了解到主服务器的数据是否发生变动,如果变动,也会触发一次区域传送。

区域传送会使用 TCP 协议,一方面是为了保证数据的可靠,另一方面此时传送的数据,也远比一个查询或响应大的多。

三、小结时刻

到此我们就了解清楚了,虽然 DNS 服务器支持 TCP 和 UDP 双协议,但是通常我们在做 DNS 查询的时候,也只用到了 UDP 协议。

TCP 只有在以下两种情况下,才会被使用到:

  1. DNS 响应报文大于 512 字节,通过 TC 标记为截断是,才会使用 TCP 重新查询一遍。
  2. DNS 主服务器和辅助服务器之间,进行区域传送时,为了保证稳定以及传输数据太大的原因,也会使用 TCP 协议传输。

DNS 查询和响应,通常都在广域网上通信,对于 DNS 客户端,保证好的重传和超时机制,就显得尤为重要了。



Tags:UDP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
简介简单就是美。在网络协议的世界中,TCP和UDP是建立在IP协议基础上的两个非常通用的协议。我们现在经常使用的HTTP协议就是建立在TCP协议的基础上的。相当于TCP的稳定性来说...【详细内容】
2021-12-06  Tags: UDP  点击:(21)  评论:(0)  加入收藏
一、TCP协议位于传输层, 提供可靠的字节流服务。所谓的字节流服务(Byte Stream Service) 是指, 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理。 而可...【详细内容】
2021-11-26  Tags: UDP  点击:(34)  评论:(0)  加入收藏
作者 | Vitaly Suturikhin翻译 | 徐鋆 低广播延迟已经成为任何关于建设源端站和CDN的招标和竞争中的必要特性。以前这种标准只适用于体育广播,但现在运营商要求每个领域的广...【详细内容】
2021-08-17  Tags: UDP  点击:(70)  评论:(0)  加入收藏
在写面向UDP连接的 socket 的通信程序时,我先总结归纳一些关于面向TCP和UDP连接的socket 通信程序的相关知识:面向TCP连接的 socket 通信程序:服务端:创建套接字,指定协议族(sock...【详细内容】
2021-06-07  Tags: UDP  点击:(163)  评论:(0)  加入收藏
UDP报文接收概述UDP数据报的接收要分两部分来看: 网络层接收完数据包后递交给UDP后,UDP的处理过程。该过程UDP需要做的工作就是接收数据包并对其进行校验,校验成功后将其放入接...【详细内容】
2021-06-04  Tags: UDP  点击:(93)  评论:(0)  加入收藏
一、引言UDP是TCP/IP协议中的传输层协议的一种,本文介绍了在Linux下编写基于UDP协议的Client/Server模型的程序的方法,并给出了一个echo Client/Server例子程序。二、UDP协议...【详细内容】
2021-05-13  Tags: UDP  点击:(274)  评论:(0)  加入收藏
UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络...【详细内容】
2021-05-12  Tags: UDP  点击:(179)  评论:(0)  加入收藏
作者:Draven 面向信仰编程为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同...【详细内容】
2021-04-13  Tags: UDP  点击:(234)  评论:(0)  加入收藏
对于TCP端口是否开放,测试的方式很简单,Windows系统cmd命令行下使用telnet就可以进行探测 那么如何探测UDP端口是否开放?下面介绍Linux和windows下探测UDP 端口是否开放的几种...【详细内容】
2021-03-08  Tags: UDP  点击:(485)  评论:(0)  加入收藏
再谈会话现在IP网络里面离不开TCP、UDP这两种传输层协议,主流应用都基于这两种协议来做封装传输,对于TCP来说,在发送实际数据的时候必须先建立可靠的连接,俗称 ”三次握手”,而UD...【详细内容】
2021-03-04  Tags: UDP  点击:(668)  评论:(0)  加入收藏
▌简易百科推荐
HTTP 报文是在应用程序之间发送的数据块,这些数据块将通过以文本形式的元信息开头,用于 HTTP 协议交互。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应...【详细内容】
2021-12-27  程序员蛋蛋    Tags:HTTP 报文   点击:(0)  评论:(0)  加入收藏
一 网络概念:1.带宽: 标识网卡的最大传输速率,单位为 b/s,比如 1Gbps,10Gbps,相当于马路多宽2.吞吐量: 单位时间内传输数据量大小单位为 b/s 或 B/s ,吞吐量/带宽,就是网络的使用率...【详细内容】
2021-12-27  码农世界    Tags:网络   点击:(2)  评论:(0)  加入收藏
1.TCP/IP 网络模型有几层?分别有什么用? TCP/IP网络模型总共有五层 1.应用层:我们能接触到的就是应用层了,手机,电脑这些这些设备都属于应用层。 2.传输层:就是为应用层提供网络...【详细内容】
2021-12-22  憨猪哥08    Tags:TCP/IP   点击:(29)  评论:(0)  加入收藏
TCP握手的时候维护的队列 半连接队列(SYN队列) 全连接队列(accepted队列)半连接队列是什么?服务器收到客户端SYN数据包后,Linux内核会把该连接存储到半连接队列中,并响应SYN+ACK报...【详细内容】
2021-12-21  DifferentJava    Tags:TCP   点击:(9)  评论:(0)  加入收藏
你好,这里是科技前哨。 随着“元宇宙”概念的爆火,下一代互联网即将到来,也成了互联网前沿热议的话题,12月9日美国众议院的听证会上,共和党议员Patrick McHenry甚至宣称,要调整现...【详细内容】
2021-12-17  王煜全    Tags:Web3   点击:(14)  评论:(0)  加入收藏
一、demopublic static void main(String[] args) throws Exception { RetryPolicy retryPolicy = new ExponentialBackoffRetry( 1000, 3);...【详细内容】
2021-12-15  程序员阿龙    Tags:Curator   点击:(20)  评论:(0)  加入收藏
一、计算机网络概述 1.1 计算机网络的分类按照网络的作用范围:广域网(WAN)、城域网(MAN)、局域网(LAN);按照网络使用者:公用网络、专用网络。1.2 计算机网络的层次结构 TCP/IP四层模...【详细内容】
2021-12-14  一口Linux    Tags:网络知识   点击:(30)  评论:(0)  加入收藏
无论是在外面还是在家里,许多人都习惯了用手机连接 WiFi 进行上网。不知道大家有没有遇到过这样一种情况, 明明已经显示成功连接 WiFi,却仍然提示“网络不可用”或“不可上网”...【详细内容】
2021-12-14  UGREEN绿联    Tags:WiFi   点击:(25)  评论:(0)  加入收藏
拉了千兆宽带,买了标称 1300Mbps 的无线路由器,为什么 WiFi 还是跑不满千兆?要回答这个问题,我们先得知道这个 1300Mbps 是怎么来的。开始回答之前先说明一下,这期只讲 802.11ac,...【详细内容】
2021-12-14  Ubiquiti优倍快    Tags:WiFi   点击:(83)  评论:(0)  加入收藏
问题背景IPv6环境下,在浏览器中通过http://[vip:port]访问web业务,提示无法访问此网站,[vip]的响应时间过长。分析过程之前碰到过多次在PC浏览器上无法访问vip的情况,排查方法也...【详细内容】
2021-12-13  云原生知识星球    Tags:网络问题   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条