粗浅的rdt协议介绍

1rdt1.0:经完全可靠信道的可靠数据传输

rdt1.0是假设使用最可靠的通道情况。主要有传输端与接收端两个部分。发送端等待上层传数据传进来,将数据打包为分组并将其发送到信道中;接收端收到分组以后,将封包解开,将其发送到上层应用。

(1)底层信道完全可靠

a.无比特差错

b.无分组丢失-分组按序到达

(2)发送方和接收方有各自的FSM

a.发送端通过底层信道发送数据

b.接收端通过底层信道接收数据

 

2rdt2.0:经具有比特差错信道的可靠数据传输

rdt2.0考虑到了数据错误的情形。

发送端等待上层传数据传进来,将数据和检验和打包为分组并将其发送到信道中然后等待,如果接受到ACK则数据无误,回到等待调用状态,如果收到NAK则说明发送的数据有误则进行重传。

当接收端收到资料,会有ACK(肯定确认)与NAK(否定确认请重传)两种讯息,当数据分组接收到以后确认无误,会发送ACK给发送方已确定数据无误。当发现有错误时,会传回NAK通知发送端重传。

在这里引入停等协议:当发送方处于等待ACK或NAK的状态时,它不能从上层获得更多的数据。(发送方不会发送一块新数据,除非发送方确信接收方已正确接收当前分组)

注意:rdt2.0重大缺陷!!!!:

a.发送端不知道在接收端发生了什么

b.ACK/NAK受损可能会导致重传-解决:序号机制(一个字节即可)

 

3rdt2.1

rdt2.1在rdt2.0的基础上新增了sequence number,分组的号码可以让发送方知道是否需要重传以及让接收方确认这是否是一次重新传输的分组。

例如接收端在等待编号0的封包,结果收到封包1,此时会回传ACK1给来源端,而正在等候ACK0的来源端收到ACK1,表示封包0可能遗失,所以会再重送封包0。

 

4rdt2.2

rdt2.2和rdt2.1的区别在于去掉了NAK,接收方必须包括一个ACK报文所确认的分组序号,通过在make_pkt中包括参数ACK0和参数ACK1来实现,发送方必须检查接收到的ACK中的报文中被确认的分组序号。

 

5rdt3.0:经具有比特差错的丢包信道的可靠数据传输

rdt3.0同时考虑到分组遗失与错误的情形,除了使用rdt2.2的机制,另外在发送端增加多了到技术定时器,封包送出去如果超时仍未收到ACK或是收到不正确编号的ACK,则重发。

过程:

  1. 每次发送一个分组时,便启动一个定时器
  2. 响应定时器中断
  3. 终止定时器

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值