什么是重复 ACK 何时发生?

kar*_*i97 9 tcp

我目前正在学习 TCP 协议,但不明白什么时候会发生重复确认。仅当未从接收方接收到 ACK 到客户端时才会发生重传?要计算重传,您必须通过安全裕度添加往返时间(来自 3 次握手)?

如果你能用一个例子向我解释这些,这将非常有帮助,因为我是初学者。

Min*_*ius 9

DupACK 是故障恢复机制的一部分,称为:TCP Fast retransmit,确保 TCP 协议的可靠性。当接收方接收到无序数据包时发送重复确认(比如序列 2-4-3)。收到数据包#4 后,接收方开始发送重复的 ack,因此发送方将开始快速重传过程。另一种情况是丢包。

请记住 - 在 TCP 网络中丢包是很正常的。TCP实际上以丢包作为反馈机制来调节自身。

更多信息:


小智 5

RDT 协议是 TCP 协议实现的基础。RDT 协议用于仅在计时器到期时重新传输数据包。TCP 现在使用重复确认以及超时重新传输数据包(如果丢失)。

重复确认用作快速重传和数据包恢复的一部分。通常,如果 tcp timer 超时,则假定数据包丢失并且 tcp 重传相同的数据包。但它需要等待,直到计时器到期。作为拥塞控制技术的一部分,TCP 在拥塞期间表现得非常礼貌,通过将计时器间隔增加 2 倍,从而使数据包重传变慢,从而不会导致拥塞。然而,假设每次发送数据包都会丢失,超时会呈指数增长。

由于超时增加,相同数据包的重传很耗时,并且发送方需要等待更长的时间从而导致延迟。

因此,tcp 实现了重复确认,其唯一目的是在超时发生之前通知发送者。如果发送方接收方重复数据包大于 3,则它将重新传输该数据包。如果到达乱序段,则接收器立即发送重复数据包。但是,如果没有发现丢包,则延迟 ack 以确认背对背段并减少网络中的 ack 数量。这种方法是发送累积确认而不是向每个段发送确认。

如果发送方收到重复的确认,发送方立即根据确认编号发送丢失的数据包,并且在发送丢失的数据包之前不会发送任何应用程序数据到发送缓冲区。然而,接收方不确认重传的数据包,而是累计确认。这意味着它发送确认编号作为在发送第一个重复确认之前成功发送的最后一个最高的无序段值。


Jos*_*Jos 5

" 由于 TCP 不知道重复 ACK 是由丢失的段引起还是只是段的重新排序,所以它等待接收到少量重复的 ACK。假设如果只是段的重新排序,在处理重新排序的段之前,只会有一个或两个重复的 ACK,然后会生成一个新的 ACK。如果连续收到三个或更多重复的 ACK,则强烈表明某个段已经丢失。”

更多信息www.isi.edu/nsnam/DIRECTED_RESEARCH/DR_WANIDA/DR/JavisInActionFastRetransmitFrame.html