为什么TCP设计中要设计ACK不重传?

问:

我们在讨论TCP握手挥手的时候,经常谈到报文丢失问题,如果ACK不重新发,就会间接导致SYN/FIN重新发送,岂不是会导致资源浪费?

答:

在 TCP 协议中,ACK(确认报文)本身不会重传。这是因为 ACK 是一种被动确认机制,不携带数据,也不需要可靠传输保证。若 ACK 丢失,对方无法收到确认,将触发超时重传机制,从而间接促使新的 ACK 被再次发送。

然而,在 TCP 三次握手或四次挥手阶段,如果 ACK 丢失,会导致对方的 SYN 或 FIN 报文被重传。例如:

  • 在握手过程中,若客户端发送的第三次 ACK 丢失,服务端会重发 SYN+ACK;客户端收到后再次发送 ACK。

  • 在挥手过程中,若最后一次 ACK 丢失,另一方会重发 FIN;收到后对方再发一次 ACK。

这种行为确实会带来一定的资源浪费,但代价很小。TCP 设计者认为:

  1. ACK 报文短小且丢包率极低;

  2. SYN/FIN 的重传机制已经能保证可靠性;

  3. 为 ACK 设计重传逻辑会增加协议复杂度。

因此,TCP 在可靠性和复杂度之间做了权衡:宁可允许少量控制报文重发,也不让 ACK 自身具备重传机制。

相关推荐
网络与设备以及操作系统学习使用者5 分钟前
vi与vim在openEuler中的差异及应用
linux·运维·网络·学习·vim
2401_868534788 分钟前
30个网络工程师面试题
网络·智能路由器
相思难忘成疾9 分钟前
Ubuntu 入门:安装、网络、软件一站式教程
linux·网络·ubuntu
凯瑟琳.奥古斯特19 分钟前
常见加密算法及应用
java·开发语言·网络·网络协议·职场和发展
hello world 99921 分钟前
【网络问题】网卡发送数据包错误
网络·tcp/ip·计算机网络
CPETW21 分钟前
RS-232 Sniffer 嗅探器 ---- UNI-T电子负载通讯协议抓取-A
网络·科技·stm32·单片机·嵌入式硬件·电子
ylscode22 分钟前
巨齿鲨突袭GitHub:5500余仓库沦陷,开源供应链安全防线再遭重创
运维·服务器·网络·安全·安全威胁分析
Bobolink_33 分钟前
TK跨境直播网络链路实测分析
网络·跨境网络
nailwl1 小时前
原生态部署librenms
网络协议·http·https
青云计划1 小时前
Lambda与建造者模式:从回调地狱到流式编排的工程实践
网络·windows·建造者模式