文章目录
在数据链路层,数据是以帧的形式传输的。帧由帧首部、数据部分、帧尾部这三个部分组成。帧的数据部分是从网络层传送到数据链路层的IP数据报,为了提高帧的传输效率,应当使数据部分的长度尽可能地大于帧首部和帧尾部的总长度。
后退N帧协议(GBN)
----发送窗口大小>1,接收窗口大小=1
1.GBN协议是为了解决什么?
解决停等协议的弊端:
- 必须增加序号范围
- 发送方需缓存多个分组
后退 N 帧协议 ( GBN ) 协议性能 :
① 优点 : 发送端可以先 连续 发送 滑动窗口中的 N 帧 数据帧 , 提高了信道利用率 ;
② 缺点 : 选择重传时 , 将某些正确发送的数据帧进行了重传 , 降低了传输效率 ;
解决办法:设置单个确认,同时加大接收窗口,设置接收缓存,缓存乱序到达的帧
为了解决上述弊端 , 引入了 选择重传协议 ;
发送窗口:发送方维持一组连续的允许发送的帧的序号
<1>发送窗口 : 发送方维持一组连续的允许发送的帧的序号
接收窗口:接收方维持一组连续的允许接收帧的序号
<2>接收窗口 : 接收方维持一组连续的允许接收帧的序号
GBN发送方必须响应的三件事
1.上层的调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送:如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满,上层等一会再发送(实际实现中,发送方可以先缓存这些数据,窗口不满时再发送帧)
2.收到了一个ACK
GBN协议中,对n号帧的确认采用累计确认的方式,标明接收方已经收到n号帧和它之前的全部帧。
3.超时事件
协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧
GBN 接收方要做的事
如果正确收到n号帧,并且按序,那么接受方为n帧发送一个ACK,并将该帧中的数据部分交付给上层
其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息:expectedseqnum(下一个按序接收的帧序号)
后退 N 帧协议 运行细节 :
① 发送端连续发送 :
发送窗口 大小为 4 , 可以一次性发送 4 帧数据 , { 0 , 1 , 2 , 3 } ;
发送端 发送 0 0 0 帧 , 接收方 接收到 0 0 0 帧 , 返回 ACK 0 0 0 ;
发送端 发送 1 帧 , 接收方 接收到 1 帧 , 返回 ACK 1
② 丢失 2 帧 :
发送端 发送2 帧 , 2 号帧 半路丢失 , 接收方 没有收到 2 帧 ;
③ 期待 2 帧 : 接收方 的 期待帧是 第 2 帧 ; ④ 接收方 获知 丢帧 :
发送方 发送3 帧 , 接收方 接收到 3 帧 , 此时发现 2 帧丢失 , 直接丢弃3 帧 , 并向接收方 发送 上一个成功接收的帧的确认信息 ACK 1 , 让发送方从 第2 帧开始发送 ;⑤ 发送方 收到 ACK 确认帧 :
发送方 收到 ACK 0 之后 , 发送窗口 向后 滑动一位 , 变成 {1,2,3,4} ;
发送方 收到 ACK 1 之后 , 发送窗口 向后 滑动一位 , 变成 {2,3,4,5} ;
⑥ 发送超时处理 : 如果 发送方 一直 没有收到 ACK 2 , 等待时间超时 , 就会 后退 N 帧 , 重发2,3,4,5 帧 ;
重点总结
1.累计确认(捎带确认)
2.接收方只按顺序接收帧,不按序无情丢弃
3.确认序列号最大的、按序到达的帧
4.发送窗口最大为2^n -1,接收窗口大小为1
浅析GBN协议的核心
基础前提
信道:信号传输的媒介
数据链路层传送的是帧
理解
首先我来说一下这个协议的核心,提高了信道的利用率,因为在数据通信的过程中,主机A传递信息给主机B,在数据链路层获取的是“帧”,传递帧的时候,一个小块帧传递到了物理层,直接就变成了数字信号?模拟信号?,当然只要知道是信号就可以了,这时候就要考虑到他的发送时延了吧,我其实不建议采用发送时延这个词的,因为我觉得应该是我当时也很疑惑。信号除了有发送时延,剩下的就算传播时延,一般会给出单向时延,算RTT的时候*2倍,别忘了哦。