网络协议7:【传输层】可靠传输(rdt)的原理

1,767 阅读4分钟

累了,这里主要是记的多,俺写简单一点 除课件外参考


指望每次信息传递后的结果都和理想中一样毕竟不太可能——哪个传输渠道(这里主要称为信道,channel)都不是完全可靠的
而后面会提到,"Best Effort" 式的IP协议在面对这样的情况时是不会修复的,它自己在传输过程中还可能发生错误或者丢失。
这这俩以及其他各种原因之下,接收主机可能收到一个充满“漏洞”的数据
所以,我们需要设定一些协议来使它们传递的信息至少在我们看来“可靠”——Reliable data transfer,所谓可靠数据传播,这也是TCP传输成立的基础

最基本原理模型

rdt示意

image.png

引入了有限状态自动机的概念

  • 即,只有有限种状态的,在特定条件下能切换状态的机器
  • 比如刷卡就转的这种门禁机器

image.png

RDT的迭代

rdt1.0

rdt1.0是基于理想情况下的协议,假设所有信道都是可靠的——没有比特位的翻转,没有数据包的丢失与超时。所以rdt1.0的传输功能就是 发送方发送数据,接收方等着接受数据

image.png

rdt2.0

  • rdt2.0 在 rdt1.0 的基础上考虑了bit errors,即,不可信信道中数据包中的1可能会变0,0可能会变成1。rdt2.0的任务是发现并修复这些bit errors
  • rdt1.0 中接受者和发送者固定,rdt2.0 引入有限状态自动机finite state machines (FSM) 来切换指定发送者和接受者

实际机制

从实际来说,rdt2.0增加了3种新机制来提升:

  1. 通过checksum来错误校验
  2. 接收者反馈接受正误信息(ACKs——acknowledgements,NAKs——negative acknowledgements)
  3. 重传

即,传输层对应用层的数据进行打包处理时,新增checksum(校验和),从而接收端可以对其数据包进行检验,如果正确,返回ACK,发送者继续发送下一个数据包;如果不正确,返回NAK,发送者重传数据。

udt 指 unreliable……

image.png

image.png

小测试

image.png

image.png

出大问题

捏妈ACK或者NCK传错了咋办

不能只是简单地重发,可能重复了就。rdt2.1应运而生

rdt2.1

如何解决重复呢:

  • 如果ACK或者NAK错了,currupted了,还是重发
  • 但是这回,发送方在打包数据包时添加了0或者1编号sequence number (seq)
    • 两个状态就够啦,一次只发送一个未经确认的分组
  • sender就有0号数据包和1号package两种;receiver也有了2种状态等待0号package和等待1号package
  • receiver把序列重复的删了不接受即可
    • receiver也不知道发送方是否正确收到了其ACK/NAK
  • 需要“stop and wait”,发送方发送一个package,然后等待接收方响应

机制

罢了还是直接看图

sender:

image.png

这个图给ACK和NAK也加了编号,我查阅了一下其他文字内容都没涉及这个,建议不管,看最后那个就ok

receiver:

image.png

整体(基本上记这个就差不多):

image.png

rdt2.2

做了一点点微不足道的贡献哈,再见啦NAK,ACK就够了

机制

我们在ACK的信息上加上了顺序号:sender发送0号数据包,如果接收方正确接收到0号,返回(ACK0),发送方接着发送1号数据包。如果接收方没有接收到0号数据包或出现错误,返回(ACK1),发送方重传0号数据包。

相当于抽象成了“若不符合要求,重发”和“发新的”两个选项

淦啊2.2估计有个博主一开始写错了……中文基本都是错的,我上次改了一遍结果没改完

image.png

还是直接看这俩就好我觉得

image.png

image.png

题目

image.png

rdt3.0

rdt2.2之前的版本都重在处理数据包的bit errors情况,却没有考虑到数据包在传输过程中出现的数据包或者ACKs丢失问题,这样数据包丢失会使得网络处于拥塞状态

机制(解决方法)

方法:在超过合理时间(reasonable amount of time,同TCP)后重传

  • 发送端超时重传:如果到时没有收到ACK->重传
  • 如果package(或ACK)只是被延迟了:
    • 重传将会导致数据重复,但利用序列号已经可以处理这个问题
    • 接收方必须指明被正确接收的序列号
  • 需要一个倒计数定时器

image.png

还是理解这俩就好

image.png

image.png

过早超时(延迟的ACK)也能够正常工作:但是效率较低,一半包和确认是重复的

来点题目

image.png

image.png

Q: Consider a reliable data transfer (rdt) protocol over a channel with bit errors (packets are corrupted but not lost). Explain the procedure to detect and recover from errors. (5 marks)

A:

  1. Extract the checksum from the packet header.
  2. Calculate a new checksum from the packet and header data received.
  3. If these do not match there is an error.
  4. An error is reported with a NACK (or an ACK with the “wrong” number in rdt2.2, rdt3.0)