三个重复的确认

我理解拥塞避免的过程,在这个过程中,您试图控制networking中的拥塞程度,避免数据包丢失。 但是如何能有三个确认,即使有一个在传输中丢失,并且在超时之后最终到达目的地,如果超时,数据包将被丢弃,而不是在拥塞过程中继续前进和重复x次。

重复的ACK是重传/select性确认系统的一部分。 如果没有SACK支持,当丢失一个数据包并且接收者通知发送者它已经看到ACKed序列号时,你会得到重复的ACK。 每收到一个乱序的数据包,都会发送一个ACK,这就是为什么你会看到重复的ACK,有时候,如果networking直径足够大,窗口大小足够大,有时候会有很多ACK。

首先我们必须认识到,ACK并不是说我们已经看到了一个特定的序列号 – 他们实际上是在说我们没有看到这个特定的序列号,但是我们已经看到了以前的所有序列号。

从RFC 793 :

段还携带一个确认号码,它是反向传输的下一个预期数据字节的序列号。

如果除了其他标准( RFC 5681 ),ACK是重复的ACK,

确认号码等于给定连接上收到的最大确认

重复的ACK表示接收器收到了一些东西,而不是正确的序列号。 在三个重复的ACK(通常是3)之后,发送者重传该段。 这就是所谓的快速重传,因此比你提到的基于超时的重传更快。