Go-Back-N协议和Selective-Repeat协议是计算机网络在传输层和链路层用于实现可靠数据传输的两个重要协议。Internet的TCP协议在设计时借鉴了上述两个协议的基本思想。
回退N步(GBN)
回退N步(GBN)协议也称为==滑动窗口协议==,通过控制窗口的大小来控制发送方发送的速率,并且在滑动窗口这个机制的前提下,能够为数据的可靠传输做出保证
为什么要叫“回退N步”协议?
协议的名字”回退N步“来源于出现丢失和时延过长分组时发送方的行为。对于这些情况,发送方可能会重新发送对应的分组
我们知道,为了区分不同的分组,我们为这些数据分组都进行编号。
在GBN协议中,根据当前发送方传输的情况对一些特别位置进行特殊的命名:
-
基序号(base):定义最早未确认分组的序号
-
下一个序号(nextseqnum):定义最小的未使用序号
下图是GBN中发送方看到的序号:
如上图所示,将序号范围分成了四段:
- 【0,base - 1】:已经发送并且被确认的分组
- 【base,nextseqnum - 1】:已发送但未被确认的分组
- 【nextseqnum,base + N - 1】:即将被发送的分组
- 【base + N,---------】:现在还不能够使用的分组
上述那些已被发送但未被确认的分组以及即将发送的分组的==许可范围==就可以被看成是一个序号范围内长度为N的窗口。即为我们常说的滑动窗口,这个窗口会随着协议的运行,会在序号空间内不断的向前滑动
窗口长度可根据接收方接收和缓存报文的能力、网络中的拥塞程度或两者情况来进行设置
有利于理解的知识点:在实践中,分组的序号是承载在分组首部的一个固定长度的字段中。所以序号的大小是有限制的,如果字段长度为k,那么序号的范围就是【0,2k - 1】。所以,对于一些过长的序号就必须进行模2