传输层中可以进行可靠数据传输的原理

本文介绍可靠数据传输的基本原理,包括可能遇到的问题如数据更改、包顺序错乱和丢失等,并探讨了Automatic Repeat Request (ARQ) 协议的实现方式,如Stop-and-Wait和Go-Back-N及Selective-Repeat等不同机制。
摘要由CSDN通过智能技术生成

可靠数据传输的原理

让我们反过来想,可靠传输会遇到什么问题

会遇到的问题

  • 信道可能会使得原有数据遭到更改(使得0变1,1变0)
  • 接收方收到的包的顺序乱了
  • 包在传输过程中丢失了

如何处理?

  • 使用Automatic Repeat reQuest (ARQ)协议
    • 错误检测
    • 接收方的回复
    • 重新传输

Stop-and-Wait(停止并等待)

关键技术
  • checksum(校验和)
  • ACK
  • 超时重传(Timer)
  • 序号
过程
  • 发送方将checksum和序号放入每一个包
  • 接收方使用checksum检查损坏的包
  • 接收方用序号保证没有包丢了包的顺序是对的
  • 接收方发送ACK来通知发送方一个包被正确接收了
  • 如果接收方发送的ACK在一个指定时间内没有到达(timeout),发送方会再次发送包
四种情况
  • 正常情况
  • 包损坏/丢失
  • ACK丢失
  • 过早超时/ACK延时
正常情况
发送方接收方
向包中添加checksum和序号,每次都发送一个包然后等待ACK,直到ACK到来才发送下一个包收到包之后检查checksum
开始计时如果checksum是对的,发送ACK通知发送方包裹正确收到,ACK中会特定指出下一报文段的序号
在timeout前,收到ACK
停止计时

在这里插入图片描述

包损坏/丢包
发送方接收方
发送packet然后等待ACK情况1:检查checksum发现包损坏,悄悄丢弃
情况2:根本就没收到包(包丢失了)
开始计时
超时了(因为一定不会有ACK来,所以肯定超时),重新发送包

在这里插入图片描述

ACK丢了
发送方接收方
发送方发送包然后等待ACK,开始计时接收方成功收到包,检查checksum,一切完美,发送ACK
没收到ACK
超时重发接收方又收到了重复的包裹,直接丢弃,再次发送ACK

在这里插入图片描述

过早超时/ACK延时
发送方接收方
发送包1等ACK,开始计时收到包1,一切无误,发送ACK0
没有接收到ACK0(ACK0延迟)
超时重发包1,开始计时收到重复的包1,直接丢弃,发送ACK0
收到延迟的ACK0,停止计时
收到另一个ACK0,直接忽略

在这里插入图片描述

然而,停止并等待的效率不够高,因为发送一个packet并接收一个ACK需要等待两倍的传播时间(一来一回),所以出现了Go-Back-N和Selective Repeat的方法。 这两种方法都是协议管道传输,是基于滑动窗口的思想的。

Go-Back-N

过程

发送方可以在“管道”中存放N个packets,并按顺序发送,但接收方收到后是按顺序发送ACK,也就是如果发送方管道中有其中一个packet丢失或损坏从而使得接收方没有收到,那么接收方就会丢弃该丢失或损坏包裹后收到的其他包裹,并且仍然回复收到的最后一个包裹所对应的ACK。因为这里的接收方没有缓存来暂时容纳收到的packet
在这里插入图片描述

Selective-Repeat

过程

发送方可以在“管道”中存放N个packets,并按顺序发送,接收方可以按收到的包裹发送对应的ACK。因为这里有缓存容纳收到的packet
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值