目录
1.停止-等待协议SW

接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于"从发送方到接收方的平均往返时间"。
确认丢失

为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。

为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样。数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号。
超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于"从发送方到接收方的平均往返时间"。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。

TD:发送方发送数据分组所耗费的发送时延 RTT:收发双方的往返时间 TA:接收方发送确认分组所耗费的发送时延
当往返时延RTT远大于数据帧发送时延TD时(例如使用卫星链路),信道利用率非常低。
若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即回退N帧协议GBN和选择重传协议SR。
2.回退N帧协议GBN

发送方
发送窗口尺寸WT的取值范围是1<Wr≤2"-1,其中,n是构成分组序号的比特数量。
WT=1 停止-等待协议,WT>2"-1 接收方无法分辨新、旧数据分组
- 发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
- 发送方只有收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;
- 发送方收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定。
- 发送方发送窗口内某个已发送的数据分组产生超时重发时,其后续在发送窗口内且已发送的数据分组也必须全部重传,这就是回退N帧协议名称的由来。
接收方
接收方的接收窗口尺寸WR的取值范围是WR=1,因此接收方只能按序接收数据分组。
- 接收方只接收序号落在接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发回相应的确认分组。为了减少开销,接收方不一定每收到一个按序到达且无误码的数据分组就给发送方发回一个确认分组,
- 而是可以在连续收到好几个按序到达且无误码的数据分组后(由具体实现决定),才针对最后一个数据分组发送确认分组,这称为累积确认;
- 或者可以在自己有数据分组要发送时才对之前按序接收且无误码的数据分组进行捎带确认;
- 接收方收到未按序到达的数据分组,除丢弃外,还要对最近按序接收的数据分组进行确认;
3.选择重传协议SR
发送方
发送窗口尺寸WT的取值范围是1<Wr≤2"-1
其中,n是构成分组序号的比特数量。
WT=1 与停止-等待协议相同
Wr>2"-1 接收方无法分辨新、旧数据分组
发送方可在未收到接收方确认分组的情况下,将序号落在发送窗口内的多个数据分组全部发送出去;
发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动;若收到未按序到达的确认分组时,对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。
接收方
接收窗口尺寸WR的取值范围是1<WR≤WT
WR=1 与停止-等待协议相同
WR>WT 无意义
接收方可接收未按序到达但没有误码并且序号落在接收窗口内的数据分组;
为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据
分组进行逐一确认!
接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动。