计算机网络笔记No.11
可靠数据传输
概述
可靠,即传输的数据不错、不丢、不乱。可靠数据传输对应用层、传输层、链路层都很重要
信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性
分析可靠数据传输协议时:
- 渐进地设计可靠数据传输协议的发送方和接收方
- 只考虑单向数据传输,但控制信息双向流动
- 利用状态机 (Finite State Machine, FSM) 刻画传输协议
可靠数据传输协议基本结构:接口
Rdt 1.0: 可靠信道上的可靠数据传输
在 Rdt 1.0 中,底层信道完全可靠:(理想情况)
- 不会发生错误(bit error)
- 不会丢弃分组
发送方和接收方的FSM独立:
Rdt 2.0:产生位错误的信道
- 在 Rdt 2.0 中,底层信道可能翻转分组中的位(bit) —— 对此需要利用 校验和 检测位错误
- 为了从错误中恢复 —— 需要确认机制(Acknowledgements)
ACK:接收方显式地告知发送方分组已正确接收
NAK:接收方显式地告知发送方分组有错误
发送方收到NAK后,重传分组 - 基于这种重传机制的rdt协议称为ARQ(Automatic Repeat reQuest)协议
相比于 Rdt1.0,Rdt2.0新引入了:差错检测、接收方反馈控制消息: ACK/NAK、重传
Rdt 2.0: FSM规约:停 — 等协议
Rdt 2.0::无错误场景:发送方发送一个包到接收方,检验无错,接收方返回的一个 ACK,发送方收到ACK,开始下一次发送
Rdt 2.0::有错误场景:发送方发送一个包到接收方,接收方检验出有错误,返回一个 NAK,发送方接收到NAK,重发
Rdt 2.0的缺陷:
- 如果ACK/NAK消息发生错误/被破坏(corrupted)、产生重复分组
Rdt 2.1:发送方, 应对ACK/NAK破坏
Rdt 2.1 vs. Rdt 2.0:
发送方:
- 为每个分组增加了***
- 需校验ACK/NAK消息是否发生错误
- 状态数量翻倍
接收方:
- 需判断分组是否是重复
- 接收方无法知道ACK/NAK是否被发送方正确收到
发送方, 应对ACK/NAK破坏: 发送方发送一个包,***为0;等待接收方发回***为0的 ACK;如果返回NAK(有错误),重发;返回ACK,再发送一个包,***为1;重复上述过程,***始终在0、1之间交替变换
接收方, 应对ACK/NAK破坏:收到一个包后,校验是否有错误以及校验是否是想得到的***,都满足则保存接受的数据,返回ACK;数据有错误,返回NAK;***有错误,不保存数据返回ACK
Rdt 2.2::无NAK消息协议
只使用ACK:
- 接收方通过ACK告知最后一个被正确接收的分组
- 在ACK消息中显式地加入被确认分组的***
- 发送方收到重复ACK之后,采取与收到NAK消息相同的动作,重传当前分组
Rdt 3.0:信道既可能发生错误,也可能丢失分组
发送方等待 合理 时间:
- 需要定时器
- 如果没收到ACK,重传
- 如果分组或ACK只是延迟而不是丢包 —— 重传会产生重复,***能够处理;接收方需在ACK中显式告知所确认的分组
发送方FSM:
示例:
Rdt 3.0性能分析:
- Rdt 3.0能够正确工作,但性能很差
- 示例:1Gbps链路,15ms端到端传播延迟,1KB分组
发送方利用率:发送方发送时间百分比:
在1Gbps链路上每30毫秒才发送一个分组——>33KB/sec
————————————————————————————————————————————————————————
由于水平有限及时间仓促或疏忽大意以及其他的一些原因,文中难免会存在一些错误,如若有发现不正确的地方,还请大佬们评论或私信告之于我,以便及时纠错