转载声明:文章来源https://zhuanlan.zhihu.com/p/355971846
传输层:可靠传输原理及协议
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为分组个数
SR原理图
帖子还没人回复快来抢沙发