上图中,第一幅图为停止等待协议,而第二幅图为流水线传输,是在接收方返回确认收到的数据之前发送N个数据分组。
回退N帧协议GBN(go-back-N):
无差错情况:
1.采用3个比特给分组编号,即序号0~7
2.发送窗口尺寸W_T的取值:1< W_T <= 2^3 - 1。发送窗口的尺寸不能超过其上限。
3.接收窗口的尺寸W_R的值:1
如上图所示:发送方发送了5个数据分组,并正确到达了接收方。接收窗口按顺序接收他们,接收方每接收一个,就将窗口向后滑动一位。全部接收后,将发送窗口也向后滑动,如下图所示:
累积确认:
接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后 (由具体实现决定)对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。
加上ACK1丢失了,但接收到了ACK4,还是不会影响发送数据。
有差错情况:
发送方一次发送5个数据:1 0 7 6 5(5最先发送,所以最先到达),假设此时第5号元素误码(下图2),那么就会将5丢弃(下图3),那么此时 1 0 6 7 也与接收序号5 对不上(下图4),所以就会发送ACK4,表示之间确实收到的最后一个正确数据分组编号为4,那么有4个对不上,就会连续发送4次。
在本例中,尽管序号为6,7,0,1的数据分组正确到达接收方,但由于5号数据分组误码不被接受,它们也“受到牵连”而不被接受,发送方还要重传这些数据分组,这就是所谓的Go=back=N (回退N)。
例题:
注意:
发送窗口滑动时,一次滑动的并不是W_T,而是根据ACK_N,将窗口滑动到N后面。