什么是重复ACK,它在什么时候发生?

21

我目前正在学习TCP协议,不明白重复确认是什么以及它们会在什么情况下发生。此外,重传是否只有在从接收方到客户端未接收到ACK时才会发生?要计算重传,您必须通过安全裕度将往返时间(从3次握手)加起来吗?

如果你能给我举个例子来解释这些问题,那将非常有帮助,因为我是初学者。


获取一份Richard Stephens的TCP/IP Illustrated。 - David Hoelzer
3个回答

18

DupACKs是TCP快速重传机制的一部分,确保了TCP协议的可靠性。当接收器接收到无序的数据包(例如序列2-4-3),就会发送重复确认信息。在接收到第4个数据包后,接收器开始发送重复的确认信息,以使发送方启动快速重传过程。另一种情况是数据包丢失。

请记住,在TCP网络中,数据包丢失是相当正常的。实际上,TCP利用数据包丢失作为反馈机制进行自我调节。

更多信息:


7
RDT协议是实现TCP协议的基础。RDT协议只在计时器到期时重新传输数据包。TCP现在使用重复确认和超时来重新传输丢失的数据包。
重复确认作为快速重传和数据包恢复的一部分。通常情况下,如果TCP计时器到期,则认为数据包已丢失并重新发送相同的数据包。但需要等待计时器到期。作为拥塞控制技术的一部分,TCP在拥塞期间表现得非常礼貌,通过将计时器间隔增加2倍来减慢数据包的重传速度,从而不会导致拥塞。然而,超时指数级增长,每次发送都假定数据包丢失。
由于超时时间增加,重传相同的数据包需要花费时间,并且发送方需要等待更长时间,从而导致延迟。
因此,TCP实现了重复确认,其唯一目的是在超时发生之前通知发送方。如果发送方接收到大于3个重复数据包,则会重新发送数据包。如果出现无序片段,则接收方会立即发送重复数据包。但是,如果没有发现数据包丢失,则确认被延迟,希望确认连续的片段,并减少网络中的确认数量。这种方法是发送累积确认而不是对每个片段发送确认。
如果发送方收到重复确认,则会根据确认号立即发送丢失的数据包,并且在发送丢失的数据包之前不会发送任何应用程序数据。但是,接收方不会确认重新传输的数据包,而是进行累积确认。这意味着它将确认号作为最后一个成功发送的无序片段值发送,该值在第一个重复确认发送之前发送。

7
由于TCP无法确定重复ACK是否是由丢失的段或仅仅是段的重新排序引起的,因此它会等待接收少量的重复ACK。假定如果只有段重新排序,则在处理重新排序的段之前,将只有一个或两个重复的ACK,然后生成新的ACK。如果连续收到三个或更多的重复ACK,则强烈表明已经丢失了一个段。
更多信息请参见:www.isi.edu/nsnam/DIRECTED_RESEARCH/DR_WANIDA/DR/JavisInActionFastRetransmitFrame.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接