滑动窗口
发送窗口
发送方维持一组连续的允许发送的帧的序号
接收窗口
接收方维持一组连续的允许接收帧的序号
发送过程
如图,假如发送方的发送窗口大小是6,首先发送0号帧,并建立0号帧的副本,防止帧丢失,然后发送0号帧,发送1号帧,一直到5号帧:
接收方收到了0号帧之后,回复发送方ACK0:
发送方收到了ACK0之后,发送窗口往后移动一个,并把6号帧放到链路上:
接收方收到1之后,就回复ACK1,发送方收到ACK1之后,窗口移动,7号帧进入发送窗口,并发送2号:
目前发送方就被分成了四个部分:发送完已经被确认的(0,1号帧),已经发送等待确认的(2号帧),还能发送的(34567号),还不能发送的(其余的)
GBN中发送窗口必须相应的三件事
上层(网络层)的调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需要将数据返回给上层,暗示窗口已满。上层等一会儿在发送。(实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)
收到了一个ACK
GBN协议中,对n号帧的确认采用累计确认的方式,标明接收方已经收到n号帧和它之前的全部帧。也就是说接收方不需要每一帧都返回一个确认帧。
超时事件
协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧
在GBN中,假设0号帧传输成功,但是1号帧未传输成功,接收方在接收0号帧之后,1号帧未收到,但是收到了23456号帧,但是接收方会忽略这些帧,这样发送方一直收不到1号帧的确认帧,直到触发了超时计时器,就会重新传1号帧及以后的帧。
GBN中接收方需要做的事
-
如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK,并将该帧中的数据部分交付给上层。
-
其余情况(未收到应该收到的n号帧)都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个按序接收的帧序号)(假如接收方收到了012,那么接收方就会等待3号帧,假如未收到3号帧之前收到了45号帧,那么接收方就会把45号帧丢弃,并且重新发送最近接收的2号帧的ACK2给发送方)
GBN图示
滑动窗口长度
若采用n个比特对帧编号,那么发送窗口的尺寸应满足:。因为发送窗口尺寸过大,就会使得接收方无法区别新帧和旧帧。
GBN协议重点
累积确认(偶尔捎带确认)
偶尔捎带确认就是双方通信时,甲方给乙方发送数据时,可以捎带发送乙方之前给甲方发送数据的确认帧
接收方只按顺序接收帧,不按序无情丢弃
确认序列号最大的,按序到达的帧
发送窗口最大为,接收窗口大小为1
GBN性能分析
因连续发送数据帧而提高了信道利用率。
在重传时必须把原来的已经正确传送的数据帧重传,使传送效率降低。