滑动窗口协议
单工 ——> 全双工
设备改造成全双工工作模式;
线路合并,两条线路->一条线路;
数据帧和应答帧在一个信道上传输;
捎带/载答(piggybacking):暂时延迟待发确认,以便附加在下一个待发数据帧的技术。 优点:充分利用信道带宽,减少帧的数目意味着减少“帧到达”中断; 缺点:带来的问题:复杂。 如何把单工的设备改造成双工的设备?
3.4.1 一比特滑动窗口协议(A One Bit Sliding Window Protocol) 协议特点
可进行数据双向传输,信息帧中可含有确认信息(piggybacking技术);
信息帧中包括两个序号域:发送序号和接收序号(已经正确收到的帧的序号) 工作过程
协议4:问题仍旧相同 能保证无差错传输,但是基于停等方式; 若双方同时开始发送,则会有一半重复帧; 效率低,传输时间长。 1.滑动窗口的概念 发送端和接收端分别设定发送窗口和接收窗口 。 发送窗口用来对发送端进行流量控制。 发送窗口的大小 WT 代表在还没有收到对方确认信息的情况下发送端最多可以发送多少个数据帧。
接收端设置接收窗口 在接收端只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下。 若接收到的数据帧落在接收窗口之外,则一律将其丢弃。 在连续 ARQ 协议中,接收窗口的大小 WR = 1。
只有当收到的帧的序号与接收窗口一致时才能接收该帧。否则,就丢弃它。
每收到一个序号正确的帧,接收窗口就向前(即向右方)滑动一个帧的位置。同时发送对该帧的确认。
滑动窗口的重要特性 只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。 收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。 当发送窗口和接收窗口的大小都等于 1时,就是双工的停止等待协议。 3.4.2 退后n帧协议(A Protocol Using Go Back n) 为提高传输效率而设计,例如:
卫星信道传输速率50kbps,往返传输延迟500ms,若传1000bit的帧。
使用协议4,则传输一个帧所需时间为: 发送时间 + 信息信道延迟 + 确认信道延迟(确认帧很短,忽略发送时间)= 1000bit / 50kbps + 250ms + 250ms = 520ms
信道利用率 = 20 / 520 =4% IMAGINATION!!! 发送端一次连续发送26个数据帧; 经历的时间是520ms; 此时刚好第一帧的应答帧回来了! 发送端又可以发送以帧了! …… 流水线诞生了!!! 退后n帧协议(A Protocol Using Go Back n) 一般情况,信道带宽b比特/秒,帧长度L比特,往返传输延迟R秒,则信道利用率为 (L/b) / (L/b + R) = L / (L + Rb) 结论
传输延迟大,信道带宽高,帧短时,信道利用率低。 解决办法
连续发送多帧后再等待确认,称为流水线技术(pipelining)。 带来的问题
信道误码率高时,对损坏帧和非损坏帧的重传非常多
GO BACK N协议实现分析 事件驱动
Network_layer_ready(内部事件)
发送帧(帧序号,确认序号,数据)
Frame_arrival (外部事件)
检查帧序号,落在接收窗口内则接收,否则丢弃;
检查确认序号,落在发送窗口内则移动发送窗口,否则不做处理。
Cksum_err (外部事件)
丢弃
timeout (内部事件)
退后n帧重传 计时器处理
启动,发送帧时启动
停止,收到正确确认时停止
超时则产生timeout事件
3.4.3 选择重传协议(A Protocol Using Selective Repeat)
实现 缓冲区设置
发送方和接收方的缓冲区大小应等于各自窗口大小; 增加确认计时器,解决两个方向负载不平衡带来的阻塞问题; 可随时发送否定性确认帧NAK。 窗口参数
发送窗口下界:Ack_Expected
发送窗口上界:Next_Frame_To_Send
接收窗口下界:Frame_Expected
接收窗口上界:TooFar
P6协议实现分析 事件驱动
Network_layer_ready(内部事件)
发送帧(帧类型,帧序号,确认序号,数据)
Frame_arrival (外部事件)
若是数据帧,则检查帧序号,落在接收窗口内则接收,否则丢弃;不等于接收窗口下界还要发NAK
若是NAK,则选择重传;
检查确认序号,落在发送窗口内则移动发送窗口,否则不做处理。
Cksum_err (外部事件)
发送NAK
timeout (内部事件)
选择重传
Ack_timeout (内部事件)
发送确认帧ACK 计时器处理
启动,发送数据帧时启动
停止,收到正确确认时停止
超时则产生timeout事件 Ack计时器处理
启动,收到帧的序号等于接收窗口下界或已经发过NAK时启动
停止,发送帧时停止
超时则产生ack_timeout事件 选择重传的最大窗口
停止等待协议中数据帧和确认帧的发送时间关系
小结 可靠传输
通过确认和重传机制
传输层协议,如TCP,也提供可靠传输服务
链路层的可靠传输服务通常用于高误码率的连路上,如无线链路。