可靠数据传输原理 一(rdt1.0 2.0 2.1 2.2)

Http Socket 2018-05-29

把不可靠的数据传输编程可靠的数据传输

  • 信道的不可靠特性决定了靠靠数据传输协议(Rdt)的复杂性
  • 要实现不丢,不乱,不错


应用层和传输层的箭头是单项的,而传输层跟网络层,链路层是双向的控制消息的流动完成的,后面会进一步去看

利用状态机刻画传输协议

圆圈是表示一个状态,横线上边是一个事件,下面是一个动作

Rdt1.0:可靠信道上的可靠数据传输(信道本省就是可靠的情况)

发送方:


由于确定百分之百可靠的传输所以发完之后,又回来重新等待继续发送不用管别的

接收方:


接收方也就一个状态,就等着从下层发过来,

Rdt2.0:可能产生位错误的信道,但是不会丢包等其他错误。

  • 底层信道可能翻转分组中的位,可以利用校验和检验位错误

发完了后发送方不知道错没错,只有接收方告诉他

如何从错误中恢复?

  • 确认机制(ACK):接收方显式的告知发送方分组已确认接收
  • NAK:接收方显式的告知发送方分组有错误
  • 发送方收到NAK后,重传分组。

也就是要有机制的概念了,引入了ACK的机制,NAK机制,重传机制。

这种基于重传机制的rdt协议称为ARQ(automatic repeat reQuest)协议

比1.0多的东西,Rdt2.0中引入的新机制

  • 差错检测
  • 接收方反馈控制消息:ACK/NAK
  • 重传


在rdt1.0的时候,发送方接收方一个状态就够了,
首先是等待上层调用,这个没有变。第二个状态是等待Ack,Nak,也就是法完之后要等待对方控制消息的状态,也就叫停等协议

而且发送的时候要加入不仅仅是data,还要加入checksum这个参数

Rdt2.1 应对ACK/NAK消息发生错误或者被破坏

  • 为ACK/NAK增加校验和,检错并纠错
  • 发送方收到被破坏的ACK/NAK时候不知道接收方发生了什么,添加额外的控制消息
  • 如果ACK/NAK坏掉,发送重传
  • 不能简单的重传,因为会产生重复分组

常用的一种方法,发送方接收到ack,nak错误的时候不管三七二十一直接重传,但是会带来的问题就是重复分组。怎么解决呢?

增加序列号,丢弃重复分组

rdt2.0和rdt2.1的区别

注意:接收方无法知道ack/nak是否被发送方正确收到。

Rdt2.2


是否真的需要NAK这样的机制,多了一种机制,处理逻辑就更复杂


本文由 方方無 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide