何时发生重复的ACK?

时间:2018-01-08 10:54:11

标签: tcp

我目前正在学习TCP协议,并且不了解它们何时会发生重复确认。只有在没有从接收器向客户端收到ACK时才会发生重传?要计算重传,您必须通过安全边际添加往返时间(从3次握手)?

如果你可以通过一个例子向我解释一下这可能是非常有用的,因为我是初学者。

3 个答案:

答案 0 :(得分:3)

RDT协议是TCP协议实现的基础。RDT协议仅在计时器到期时才用于重发数据包。TCP现在使用重复的ack和超时来重发数据包(如果丢失)。

重复的ack被用作快速重传和数据包恢复的一部分。 通常,如果tcp timer过期,则假定该数据包丢失,并且tcp重新传输同一数据包。 但是它需要等待,直到计时器到期。 作为拥塞控制技术的一部分,TCP在拥塞期间的行为非常礼貌,方法是将计时器间隔增加2倍,从而使数据包的重传速度变慢,从而不会导致拥塞。 但是,如果每次发送时都会丢失数据包,则超时将成倍增加。

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

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

如果发送方收到重复的ack,则发送方会根据确认号立即发送丢失的数据包,直到发送丢失的数据包后,才在发送缓冲区中发送任何应用程序数据。 但是,接收器不会确认重发的数据包,而是会进行累积确认。这意味着它将在发送第一个重复确认之前发送确认号,作为最后成功发送的无序段值中的最后一个。

答案 1 :(得分:2)

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

请记住 - TCP网络中的数据包丢失非常正常。 TCP实际上通过丢包作为反馈机制进行自我调节。

更多信息:

答案 2 :(得分:1)

  

“,因为TCP不知道重复的ACK是否是由丢失引起的   段或只是段的重新排序,它等待一小部分   收到重复的ACK。假设如果有   细分的重新排序,将只有一两个重复   在处理重新排序的段之前的ACK,然后   生成一个新的ACK。如果在一个网络中收到三个或更多重复的ACK,   行,则表明段已丢失。 “

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