Contents
  1. 1. TCP与UDP协议
    1. 1.1. 区别如下
    2. 1.2. 简要总结
  2. 2. 为什么DNS既使用TCP又使用UDP?
    1. 2.1. DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
    2. 2.2. 为什么既使用TCP又使用UDP?
    3. 2.3. 区域传送时使用TCP,主要有一下两点考虑
    4. 2.4. 域名解析时使用UDP协议
  3. 3. 总结
  4. 4. 参考链接

https://scoolor.github.io/2018/11/10/dns/ 一文中简单整理了DNS协议的一些知识,其中涉及到DNS协议同时会占用53端口,且同时使用UDP和TCP协议,我们使用Wireshark抓包,看到在解析时仅仅使用了UDP协议,这是为什么呢?本文简要说明一下。

TCP与UDP协议

首先简要介绍一下TCP和UDP协议。

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议。

UDP(User Datagram Protocol,用户数据报协议)是用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

区别如下

TCP 是面向连接的传输控制协议,而UDP提供了无链接的数据报服务,类似电话与短信;

TCP 面向连接,提供可靠的数据服务;

TCP首部开销20字节,UDP首部开销8字节;

TCP逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道;

UDP没有拥塞机制,因此网络出现拥堵不会使源主机的发送效率降低(有利于实时会议视频等);

TCP的连接只能是点到点的,UDP支持一对一,多对一,多对多的交互通信;

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境;

简要总结

TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?

其实不然,在有些情况下UDP协议可能会变得非常有用。

因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

为什么DNS既使用TCP又使用UDP?

DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;

DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。

区域传输是DNS的事务,对准确性要求比较高,而且会产生大于512字节的数据包,因此使用TCP协议。

为什么既使用TCP又使用UDP?

首先了解一下TCP与UDP传送字节的长度限制。

UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。

区域传送时使用TCP,主要有一下两点考虑

  1. 辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
  2. TCP是一种可靠的连接,保证了数据的准确性。

域名解析时使用UDP协议

客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

总结

大多数情况下,DNS解析请求和响应都很小,使用UDP协议更加高效,虽然没有TCP可靠,但是速度快,消耗的系统资源更少,非常适合少量数据包的传输。
一些DNS事务,比如区域传输或其他附加查询,可能会产生大于512字节的数据包,因此使用TCP更加可靠,使用TCP会减少丢包和重新发包的情况,因此更加可靠与高效。

参考链接

  1. http://benbenxiongyuan.iteye.com/blog/1088085
  2. https://www.cnblogs.com/549294286/p/5172435.html
  3. https://www.quora.com/When-does-DNS-use-TCP-instead-of-UDP-Why
Contents
  1. 1. TCP与UDP协议
    1. 1.1. 区别如下
    2. 1.2. 简要总结
  2. 2. 为什么DNS既使用TCP又使用UDP?
    1. 2.1. DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
    2. 2.2. 为什么既使用TCP又使用UDP?
    3. 2.3. 区域传送时使用TCP,主要有一下两点考虑
    4. 2.4. 域名解析时使用UDP协议
  3. 3. 总结
  4. 4. 参考链接