DNS啥时候用UDP啥时候用TCP来传输?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS啥时候用UDP啥时候用TCP来传输?相关的知识,希望对你有一定的参考价值。

参考技术A 一、DNS报文角度来看
主要是查看DNS报文首部中的标志字段
[QR][opcode][AA][TC][RD][RA][(zone)][rcode]

主要关注字段为TC字段,当TC字段为1时,表示应答总长度超过512字节,只返回前512个字节,这时DNS就需要使用TCP重发原来的查询请求。因为在UDP的应用程序中,其应用程序被限制在512个字节或更小,因此DNS报文穿数据流只能有512字节,而TCP能将用户的数据流分为一些报文段,因此TCP就能用多个报文段去传超过512字节的数据流或是任意长度的数据流。

大多数书只写DNS使用UDP 53端口,这并不完整,会导致别人误解,认为DNS只用UDP,不用TCP,呵呵。

二、应用角度来看
区域传输用TCP,其他用UDP。
什么是区域传输?
dns的规范规定了2种类型的dns服务器,一个叫主dns服务器,一个叫辅助dns服务器。在一个区中主dns服务器从自己本机的数据文件中读取该区的dns数据信息,而辅助dns服务器则从区的权威dns服务器中读取该区的dns数据信息。当一个辅助dns服务器启动时,它需要与主dns服务器通信,并加载数据信息,这就叫做区传送(zone transfer).
通俗地讲,就是DNS服务器之间传输时使用TCP,而客户端与DNS服务器之间传输时用的是UDP。

dns可以使用tcp与udp两种协议,分别在啥情况下使用

dns可以使用tcp与udp两种协议,分别在什么情况下使用

  现在就来说说DNS分别在什么情况下使用这两种协议。

     如果用wireshark、sniffer或古老些的tcpdump抓包分析,会发现几乎所有的情况都是在使用UDP,使用TCP的情况非常罕见,神秘兮兮。其实当解析器发出一个request后,返回的response中的tc删节标志比特位被置1时,说明反馈报文因为超长而有删节。这是因为UDP的报文最大长度为512字节。解析器发现后,将使用TCP重发request,TCP允许报文长度超过512字节。既然TCP能将data stream分成多个segment,它就能用更多的segment来传送任意长度的数据。


  2. 另外一种情况是,当一个域的辅助域名服务器启动时,将从该域的主域名服务器primary DNS server执行区域传送。除此之外,辅域名服务器也会定时(一般时3小时)向PDS进行查询以便了解SOA的数据是否有变动。如有变动,也会执行一次区域传送。区域传送将使用TCP而不是UDP,因为传送的数据量比一个request或response多得多。

  DNS主要还是使用UDP,解析器还是服务端都必须自己处理重传和超时。DNS往往需要跨越广域网或互联网,分组丢失率和往返时间的不确定性要更大些,这对于DNS客户端来说是个考验,好的重传和超时检测就显得更重要了。

参考技术A DNS一般情况下使用UDP通讯,但有两种情况例外:
1、当客户端发出DNS查询请求,从服务器收到的响应报文中的TC(删减标志)比特被置为1时,此时意味着服务器响应长度超过512字节,而仅返回前512字节(udp报文最长为512B 而tcp无此限制)。在遇到这种情况时,客户端会使用TCP重发起原来的DNS查询请求,它将运行返回的响应超过512字节。
2、DNS的主辅名字服务器在同步时使用TCP协议。辅名字服务器一般每3小时向主名字服务器发起查询,看主服务器是否有新的记录变动,如有变动,将执行一次区域传送,区域传送使用TCP协议。
参考技术B tcp/udp是两种连接方式
跟DNS没关系
tcp是基于安全的连接,比如说网页
udp是基于快速的连接,比如游戏,
具体资料你可以去网上搜
学问很深
估计看一个月都看不完
参考技术C 可靠传输基于TCP
不可靠传输基于UDP

以上是关于DNS啥时候用UDP啥时候用TCP来传输?的主要内容,如果未能解决你的问题,请参考以下文章

DNS同时占用UDP和TCP端口53——传输数据超过512时候用tcp,DNS服务器可以配置仅支持UDP查询包

TCP是啥意思

DNS用的是TCP协议还是UDP协议

DNS用的是TCP协议还是UDP协议

DNS分别在什么情况下使用UDP和TCP

TCP和UDP的代理服务器有啥差别?