不可靠传输信道在数据传输中可能发生:
1. 比特差错: 1001变为1000;
2. 乱序: 数据块1、2、5、6、3、4;
3. 数据丢失: 数据块1、2、5。
为了使传输层提供可靠的数据传输服务,基于不可靠信道实现可靠数据传输需要采取以下措施:
1. 差错检测: 利用编码实现数据包传输过程中的比特差错检测;
2. 确认: 接收方向发送方反馈接收状态。
(1). ACK( 肯定确认),Positive Acknowledgement, 正确接收数据;
(2). NAK( 否定确认),Negative Acknowledgement, 没有正确接收数据。
3. 重传: 发送方重新发送接收方没有正确接收的数据。
4. 序号: 确保数据按序提交。
5. 计时器: 解决数据丢失问题。
停-等协议工作流程:
1. 发送方发送经过差错编码和编号的报文段, 等待接收方的确认;
2. 接收方如果差错检测无误且序号正确, 则接收报文段, 并向发送方发送ACK,发送方收到ACK,继续发送后续报文段;
3. 接收方如果差错检测序号有误,则丢弃报文段, 并向发送方发送NAK,发送方收到NAK, 重发刚刚发送的报文段。
由于停等协议性能差、 信道利用率低,因此产生了流水线协议( 管道协议)。
流水线协议允许发送方在没有收到确认前连续发送多个分组,最典型的流水线协议: 滑动窗口协议。
在滑动窗口协议中,增加多个分组序号,发送方和接收方可以缓存多个分组。
发送窗口(Ws): 发送方可以发送未被确认分组的最大数量。
接收窗口(Wr): 接收方可以缓存的正确到达的分组的最大数量。
上图为发送方已经发送的分组序号。
上图为发送方正在发送的分组序号。
上图为发送方待发送的分组序号。
上图为接收方已经确认收到的分组序号。
上图为接收方正在接收的分组序号。
上图为接收方待接收的分组序号。
滑动窗口协议, 根据窗口的大小, 可以具体分为:
1. 回退N步协议: GBN协议( Go-Back-N)
GBN协议 :发送窗口WS≥1 , 接收窗口Wr=1。
GBN协议中发送端缓存能力高, 可以在没有得到确认前发送多个分组。接收端缓存能力很低, 只能接收1个按序到达的分组, 不能缓存未按序到达的分组。
GBN发送方响应的3类事件:
1. 上层调用;
2. 收到1个ACKn,GBN采用累积确认方式, 即发送方收到ACKn时, 表明接收方正确接收序号n以及序号小于n的所有分组;
3. 计时器超时,发送方只使用一个计时器。
2. 选择重传协议: SR协议( Selective Repeat)
SR协议: 发送窗口WS> 1, 接收窗口Wr> 1。
SR协议中发送端缓存能力高,接收端缓存能力高。
SR发送方响应事件:
1. 上层调用;
2. 计时器超时,发送方对每个分组进行计时;
3. 收到ACKn,SR协议采取逐个确认方式。