文章目录
  1. 可靠传输的工作原理
    1. 停止等待协议
    2. 连续ARQ协议
  2. TCP可靠传输的实现
    1. 以字节为单位的滑动窗口
    2. 超时重传时间的选择

可靠传输的工作原理

停止等待协议

顾名思义,在发送分组后等待确认收到,之后再发送下一分组。如果设定时间内没有收到确认,则将此分组重传。因此TCP在发送完一个分组后,必须保留此分组的副本直到收到确认。由于没有收到确认有两种可能:(1)发送分组丢失或出错;(2)对方收到分组,且确认无误,但是发送的确认丢失;(3)由于网络阻塞,收到确认迟到了;不管是哪种可能,发送方都会重传分组。对于(1),接收方会接收分组并发送确认;而对于(2),接收方直接丢弃这个重复分组,但是仍然发送确认分组。对于(3),发送方收到重复的确认后直接丢弃。

 

然而,停止等待协议的信道利用率极其低,下面介绍连续ARQ协议与滑动窗口协议。

连续ARQ协议

发送:位于窗口内的分组可以全部发送出去而不用等待前一组的接收确认。

累积确认:接收方不需要对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送接收确认,这就代表到这个分组为止的所有分组均已收到。

窗口滑动:发送方收到确认后,将窗口滑动到确认分组的下一分组。

连续ARQ协议工作例子如下。

TCP可靠传输的实现

以字节为单位的滑动窗口

 

超时重传时间的选择

TCP采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间。这两者之差为该报文段的往返时间RTT,TCP保留一个加权平均往返时间RTTS<-(1-a)×RTTS+a×RTT。a建议为1/8。超时重传时间RTO=RTTS+4×RTTD,RTTD为RTT偏差的加权平均值。而重传的报文,其往返时间无法准确计算,于是Karn提出:重传报文的RTT不加入RTTS的计算,而这种方法又不能及时应对网络阻塞的变化(如果网络阻塞,导致RTT变大,而重传报文的RTT不加入RTTS的计算,于是超时重传时间得不到及时更新),于是Karn算法修正为报文段每重传一次,就将超时重传时间增加一倍。