传输层:可靠传输原理及协议
RDT 可靠传输协议经历了rdt1.0,rdt2.0,rdt2.1,rdt2.2,rdt3.0.一步步完善,使得网络得到很好的安全性稳定性。
在RDT协议发展历程中, 利用状态机FSM图像刻画传输协议。会更加准确形象。
Rdt1.0:可靠信道上的可靠数据传输
假设
Ret2.0:产生位错误的信道
假设
- 位翻转时会发生错误、但不会丢包
- 利用校验和检测位错误
如何从错误中恢复?
- 确认机制ACK:接收方显式地告知发送方分组已正确接收
- NAK:接收方显式地告知发送方分组有 错误·
- 发送方收到NAK后,重传分组
注:基于这种重传机制的rdt协议称为ARQ
- rdt2.0中传入的新机制:差错检测、接收方反馈控制信息:ACK/NAK、重传
如何解决分重复分组问题?
序列号:发送方给每个·分组增加序列号
接收方丢弃重复分组
如果ACK/NAK消息发生错误/被破坏,会怎么样?
消息错误时,解决:为ACK ,NAK增加错误校验和,检错并纠错.
发送方收到被破坏的ACK,NAK时不知道接收方发生了什么。解决:添加额外的控制消息
如果ACK,NAK坏掉,解决:发送方重传
新增待解决问题:不能简单的重传,会产生重复分组
解决方法:RDT2.1,加入序列号,及重复判断。
Rdt2.1
- 发送方:为每个分组增加序列号
- 接收方需要判断分组是否重复。注意:接收方无法知道ACK/NAK是否被发送方正确收到
Rdt2.2
-
与Rdt2.1功能相同,但是只使用ACK
-
接收方通过ACK告知最后一个被正确接收的分组
- 在ACK消息中显式地加入被确认分组的序列号
-
发送方收到重复ACK后,采取与收到NAK消息相同的动作:重传当前分组
Rdt3.0
-
如果信道既可能发生错误,也可能丢失分组,怎么办?
-
校验和+序列号+ACK+重传 够用吗?
-
方法:发送方等待合理的时间
-
如果没收到ACK,重传
-
如果分组或ACK知识延迟而不是丢了
- 重传会产生重复,序列号机制能够处理
- 接收方需在ACK中显式告知所确认的分组
-
-
需要定时器
滑动窗口协议
-
窗口定义:
- 允许使用更大序列号范围
- 窗口尺寸为N:最多N个等待确认的消息
-
滑动窗口含义:
- 随着协议的运行,窗口在序列号空间内向前滑动
- 滑动窗口协议:GBN、SR
GBN
-
允许发送方在收到ACK之前连续发送多个分组
- 更大的序列号范围
- 发送或接收方需要更大的存储空间以缓存分组
-
ACK机制
- ACK机制:发送拥有最高序列号、已被正确接收的分组的ACK
- 可能产生重复ACK
- 只需要记住唯一的·expectedseqnum
-
乱序到达的分组
- 直接丢弃–>接收方没有缓存
- 超时后,重新确认序列号最大的、按序到达的分组
GPN原理图
GBN的缺陷
-
重传分组过多
-
解决:
-
接收方对每个分组单独确认
- 设置缓存机制,缓存乱序到达的分组
-
发送方值重传没收到ACK的分组
- 为每个分组设置定时器,当这个分组没收到ACK,并超时后,重传
-
发送方窗口
- N个连续的序列号
- 限制已发送且未确认的分组
-
SR:解决了GBN问题
- 当发送方发送失败一个包时,接收方会继续接受发送方的分组,将它们放入缓存
- 当发送方重传分组时,接收方将该分组及缓存的分组一起读入
- 序列号空间大小与窗口尺寸关系:Ns + Nr <= 2的k次方。k为分组个数