为什么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 自身具备重传机制。

相关推荐
上海安当技术10 小时前
固件签名与Secure Boot:安当CAS如何构建汽车固件信任链
网络·汽车·信任链·boot·secure·固件签名·安当cas
上海安当技术11 小时前
诊断接入认证:安当CAS如何堵住汽车网络安全的物理后门
网络·web安全·汽车·access·secure·安当cas·诊断接入认证
ze^011 小时前
【软考信息安全】第2章 网络攻击原理与常用方法
网络·web安全·网络安全
这个DBA有点耶12 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
arbboter12 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
消失的旧时光-194314 小时前
第一篇:Ktor Client 到底是什么?从 Retrofit 迁移理解 Ktor 网络请求架构
网络·架构·retrofit·ktor·dsl
数据知道14 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
江畔柳前堤14 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
LabVIEW开发15 小时前
LabVIEW 通过以太网控制 Yokogawa WT3000 功率分析仪:tmctl.dll 与原始套接字方案
网络·labview·labview知识·labview功能·labview程序
xiaoxiangsiyan16 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns