Rdt(Reliable Data Transfer)可靠数据传输

数据传输引擎涉及到的rdt(可靠数据传输),所以学习一下

在TCP网络传输中,数据都是通过网络上可靠的通道来传输。但实际存在许多状况,如资料位元错误、封包遗失,造车资料不可靠,所以必须建立有效的传输协定。

1.rdt1.0
rdt的模型主要是用FSM(Finite State Machine-有限状态机)来定义状态与操作方式。

rdt1.0是假设使用最可靠的通道情况。主要有传输端与接收端两个部分,资料传输方式很单纯,传输端等待上层传资料进来,收到上面的资料以后装成封包送出去。

接收端收到封包以后,将封包解开,把讯息往上送。

2.rdt2.0

2.0考虑到了资料错误的情形,当接收端收到资料,会有ACK(相当于OK)NAK(相当于Send Again)两种讯息,当资料接收到以后确认无误,会送ACK给来源已确定资料无误。当侦测到错误时 会传回NAK通知来源端再送一次。

3.rdt2.1

2.1新增了sequence number,同样使用ACKNAK来确认讯息,封包的号码可以用来确认是否重新传输封包。例如接收端在等待编号0的封包,结果收到封包1,此时会回传ACK1给来源端,而正在等候ACK0的来源端收ACK1 表示封包0可能遗失,所以会再重送封包0.

4.rdt2.2

一次使用两种确认讯息 处理起来比较费力,因此2.2中移除NAK的讯息,在ACK中加入编号 就可以达到确认与否认的效果。

5.rdt3.0

3.0同时考虑到封包遗失与资料错误的情形,除了使用ACK机制,另外在传送端多了倒数计时器,封包送出去如果超过时间仍未收到ACK或是收到不正确编号的ACK,则再送出封包一次。

6.Stop-and_Wait与Pipelined Protocol

rdt3.0虽然确保了资料的可靠性,可是它采用Stop-and-Wait机制,效能方面无法让人接受,因为送出封包后必须等待对方回应才能继续传送,假如连线Delay太长,整体效率会严重低落。

为解决这问题,后来发展出 Pipelined Protocol,可以让传送端同时传送多个封包不需等待确认相对的,传输端与接收端都必须增加封包的暂存空间与序列号码。当其中的封包出现错误时有不同的回覆方法,主要有Go-Back-N(GBN)Selective Repeat(SR)两种方法。

Go-Back-N(GBN)

传输多个封包 必须有个暂存的区域,暂存的区域中存在着窗格大小(Window Size) N,存放着各种封包(已确认、已送出但未收到ACK、未送出的封包等等)

接收端也会开启窗格来接收封包,会记着目前收到封包的编号,假设收到顺序不对的封包N+1(等待接收第N个,下一个传来的却是第N+1),会将N以后的封包全部丢弃,此时传送端一直没收到ACK(N),会把N号以后的封包全部重新传送出去。

Selective Repear(SR)

GBN的传送方法往往会造成不必要的重复,因此SR的传送方法就是只针对未收到的封包做重新传输的动作。首先规划出大小为N的窗格来限制大小,窗格的基底会停留在最近一个尚未收到ACK的封包区域,当封包时间逾时会重新送出封包,直到收到该封包的ACK 窗格基底才会往前移动。

7.Flow Control(流量控制)

虽然TCP接收端有缓冲区,但有时候应用程序读取讯息的速度小于传输端传送讯息的速度,假如缓冲区满了还继续传资料过来,会造成缓冲区溢位的情况,为避免此状况,设了一个"receive window(接收窗格简写rcvWindow)"变量,用来记录缓冲区剩余的空间有多少。

当接收端收到讯息后,会回传给传送端rcvWindow的数值,如果rcvWindow=0,传送端会停止传输资料但这个方法会造成问题,假设停止后 接收端一直没讯息通知传送端,此时传送端不会运作,而接收缓冲区也是空的,资料传输停止。

因此当接收端rcvWindow=0时,传送端会持续传送一个1byte的区段给接收端 以确认缓冲区可否继续接收资料。




可靠数据传输协议(Reliable Data Transfer Protocol, RDT)是一种在网络通信中确保数据准确无误地从发送方传递到接收方的机制。它们主要用于实时应用和需要高数据完整性的场景,如电子邮件、文件传输、视频会议等。常见的RDT协议包括TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)在TCP/IP协议栈中的扩展。 **优点:** 1. **数据完整性**:RDT协议提供了错误检测和纠正机制,如校验和或序列号,确保数据在传输过程中不丢失、不重复或损坏。 2. **顺序保证**:接收端能按照发送顺序接收数据,这对于需要按特定顺序处理信息的应用非常重要。 3. **重传机制**:如果数据包丢失,RDT协议通常会自动请求重新发送,提高数据传输可靠性。 4. **连接管理**:建立连接后进行数据传输,断开连接时清理资源,简化了应用程序的复杂性。 **缺点:** 1. **效率**:为了提供可靠性,RDT协议增加了额外的控制信息和确认机制,可能导致带宽利用率降低和较高的延迟。 2. **开销**:额外的控制信息和确认过程会增加网络流量和处理器负载。 3. **复杂性**:实现复杂,对于简单的应用场景可能会引入不必要的复杂性。 4. **实时性**:虽然尽力而为,但仍然可能受到网络拥塞等因素影响,无法保证实时性,尤其是在网络条件较差时。 **相关问题:** 1. RDT协议如何处理网络丢包? 2. UDP协议是否支持可靠数据传输? 3. TCP和UDP在哪些场景下各有优势?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值