传输层--可靠数据传输的基本原理
可靠的数据传输:
网络top 10 问题之一就是解决网络的可靠的数据传输。
什么是可靠:即不丢,不错,不乱;
rdt : reliable data transfer
rdt 1.0 : 独立 sender receiver
rdt 2.0 :引入的新机制:重传,差错检测,NAK,ACK。
解决的问题是:数据不错。接受方显式反馈是否接受到正确数据。
rdt 2.1 : ACK/NAK被破坏如何解决? 可以直接重传分组吗?不可以,会导致重复的分组。
解决方案:发送方对每个分组增加序列号,接受方丢弃重复分组。
rdt 2.2 :取消NAK,作简化
接收方通过ACK告知最后一个被正确接受的分组,在ACK消息中显示的加入被确认分组的序列号。
rdt 3.0:
如果分组丢失怎么处理?需要定时器
“校验和+序列号+ACK+重传+定时器”
rdt 3.0 能够正确工作,但性能很差,网络协议限制了物理资源的利用;
如何解决这个问题,做好改进?
》》》》缓存
发送方和接收方都设置缓存,启用流水线机制提高了效率。
滑动窗口协议:GBN,SR
GBN(go back to n):
窗口尺寸为N,发送方最多允许N个分组未确认。
为空中的分组设定计时器,发送方只有一个计时器,超时重传所有未收到确认的分组。
累积ACK确认机制
接收方没有缓存,不会缓存乱序到达的分组,直接丢弃乱序到达的分组。
SR协议:
设置缓存机制,缓存乱序到达的分组
为每个分组设置计时器,只重传没有收到ACK的分组。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构