文章目录
1. 可靠数据传输协议
(1)服务抽象
数据可以通过一条可靠信道进行传输。借助于可靠信道,传输数据比特不会发生损坏或丢失,而且所有数据按照发送顺序进行交付。
由于可靠传输协议的下层协议可能是不可靠的,随着底层通道模型越来越复杂,我们需要不断开发一个可靠传输协议。(可靠数据传输–>比特损坏–>丢包)
(2)核心要点
- ARQ协议(检验和技术、重传、ACK和NAK分组):差错检验
- 停等协议
- 序号:冗余分组
- 倒计时定时器:分组
1.1 经完全可靠信道的可靠数据传输:rdt1.0
定义
- 底层信道完全可靠。
- 发送端只需接收来自较高层的数据,产生一个包含该数据的分组,并将该分组发送到信道中。
- 接收端只需要接收来自底层的分组,从分组中取出数据,并将数据发送给较高层。
特点
- 所有分组是从发送方传输到接收方。
- 接收方无需提供反馈给发送方。
1.2 经具有比特差错信道的可靠数据传输
核心
- 自动重传请求协议ARQ:比特差错
- 停等协议:使用ACK或NAK
- 序号:冗余分组
ARQ协议是解决比特差错的最基本的协议。
定义
- 底层信道中分组的比特可能受损。
比特差错通常出现在网络的物理部件中。 - 发送方有两个状态:
①等待来自上层的数据。
②等待来自接收方的ACK或NAK分组。 - 接收方仅有一个状态:要么回答ACK,要么回答NAK。这取决于分组是否受损。
①当分组被正确接收或收到失序分组时,返回ACK。
②当收到受损分组时,返回NAK。
(1)ARQ自动重传请求协议
发送方仅能通过接收方的反馈确定分组是否被正确接收。
目的: 处理信道具有比特差错的问题。
ARQ协议需要另外三个协议功能来处理存在比特差错的情况:
- 差错检验:分组检验和
- 接收方反馈
①当分组被正确接收,接收方向发送方返回ACK。
②当接收的分组受损,接收方反馈NAK。 - 重传:当接收方收到受损分组时,发送方重传该分组。
停等协议
对于rdt2.0,发送方有两个状态:等待来自上层的数据、等待来自接收方的反馈。
- 当发送方将分组发送到信道后,状态变为等待接收方的反馈。
- 在收到接收方ACK或NAK反馈之前,发送方保持等待接收方的反馈状态。 此时,它不能接收来自上层的数据,和向接收方发送分组。
- 当发送方收到NAK时,发送方重传最后一个发送的分组,并等待接收方的反馈。
问题:
rdt2.0具有一个致命的缺陷,就是没有考虑到ACK或NAK分组受损的可能性。
(2)检验和纠正ACK/NAK分组
检验: 在ACK/NAK分组中添加检验和字段。
纠正
- 增加足够的检验和比特
对于只产生差错但不丢失分组的信道有效。 - 重传当前分组
①当发送方收到受损的ACK/NAK分组时,重传当前分组。
②这种方法会引入冗余分组。
序号
在数据分组中添加一新字段,发送方对其编号接收方根据序号确定是否为重传的上一次的分组。
- 对于停等协议,1个比特序号足够了。
- 接收方根据序号确定发送方是否正在重传上一个分组。
①新分组的序号与前一个分组的序号不同。
(3)rdt2.x
rdt2.0
- 使用接收方到发送方的肯定确认和否定确认。
- ARQ协议。
- 停等协议。
rdt2.1
- 使用接收方到发送方的肯定确认和否定确认。
- ARQ协议。
- 停等协议。
- 序号。
rdt2.2
相比于2.1,是在比特差错信道上实现了一个无NAK的可靠数据传输协议。
- 接收方发送否定确认:
①发送NAK。
②对上次正确接收的分组发送ACK。
1.3 经具有比特差错的丢包信道的可靠数据传输:rdt3.0
核心
在rdt2.2的基础上,增加倒计时定时器形成的新协议。
- 自动重传请求协议ARQ
- 停等协议
- 接收方和发送方使用ACK和NAK
- 序号
- 倒计时定时器:丢包
定义
- 除了比特受损,底层信道还会丢包。
因此rdt3.0在rdt2.2的基础上增加了检测和处理丢包的定时重传机制。 - 为了能够检测和处理丢包,发送方需要能做到:
①每次发送一个分组,便启动定时器。
②响应定时器中断。
③终止定时器。 - 丢包
①数据分组丢失。
②ACK分组丢失。
问题:怎样检测和处理丢包?
- 发送方等待足够长的时间以确认是否丢包。
①发送方至少需要等待的时间:发送方和接收方之间的往返延时 + 接收方处理一个分组的处理延时。
②问题:最坏情况的最大时延难以估算、理想协议应该尽可能快的从丢包中恢复出来。 - 倒计时定时器:倒计时结束后,中断发送方。
(1)倒计时定时器
功能:
在倒计时结束后,中断发送方。(发送方响应中断,并重传分组)
可能导致重传的三种情况
- 数据分组丢失
- ACK丢失
- 数据分组或ACK过度延时
2. 流水线可靠数据传输协议
rdt3.0是一个功能正确的协议,它的核心问题在于它是一个停等协议。
- 发送方的利用率较低。
- 限制了底层网络硬件提供的能力。
为了解决上述问题可以:不以停等方式运行,允许发送方发送多个分组而无需等待确认。
功能要求
- 增加序号范围
- 发送方和接收方需要缓存多个分组
发送方最低限度应当缓存已发送但没有确认的分组。
接收方需要缓存已正确接收的分组。 - 序号范围和缓存要求取决于协议如何解决丢失、损坏及延时过大的分组。
2.1 回退N步(GBN)
(1)核心
为了实现流水线可靠数据传输,发送方可以连续发送多个分组,而不需等待确认,GBN协议采用了下述两种关键机制:
- 滑动窗口