什么情况下 DNS 会使用 TCP 传输协议?」的摘要信息

我们知道, DNS 是同时占用 UDP 和 TCP 的 53 端口传输数据的,这种单个应用协议同时使用两种传输协议的情况,在 TCP/IP 栈中也算是个异类。 当我们在使用 tcpdump 、 WireShark 等抓包工具分析时,会发现几乎所有的 DNS 应用都是在使用 UDP 传输。 那么,为什么 DNS 还要占用 TCP 的端口,到底什么情况下才会用到 TCP 呢? 一点基础知识 TCP 全称 Transmission Control Protocol (传输控制协议), UDP 全称 User Data Protocol (用户数据报协议),它们都是 OSI 七层模型中的传输层协议。灰姑娘大学时是网络工程专业的学渣,虽没学到个啥,但好巧不巧,就记得某些考题逢考必有。比如: TCP 和 UDP 的区别 特性 TCP UDP 连接性 三次握手 不需要建立连接 可靠性 可靠,丢包会自动重传 不可靠 有序性 会对传输乱序的消息重新排列 可能乱序 传输速度 慢,因为要建立连接并保证可靠和有序 快 传输及控制 通过字节流传输,无界,有拥塞控制机制(慢开始、拥塞避免、快重传、快恢复) 数据包都是单独的,有界,不作拥塞控制 资源消耗 需要更多资源以传递更多信息,包头比较大(需要 20 字节) 头部只需 8 个字节 通过上述区别,我们不难看出, TCP 主要应用在对可靠性比较高的场合,比如 Telnet 、 FTP 等;而 UDP 主要应用于实时性较高的场合,例如即时聊天。 DNS 查询用的传输协议 前面提到,一般我们看到的绝大多数 DNS 查询是用的 UDP 传输。 域名解析时大多使用 UDP 协议 客户端在请求一个域名的解析结果时,实际上需要经过重重 DNS 查询。(对 DNS 不太了解的童鞋可以先学下这个:转载:从理论到实践,全方位认识DNS(理论篇)) 一方面,要保证用户端的...