注:此文档仅用于学习记录,部分内容引用于王道考研的视频课
一、滑动窗口协议分类
滑动窗口协议主要分为以下三类:停止等待协议(Stop-and-Wait ARQ)、后退N帧协议(Go-Back-N ARQ)和选择性重传协议(Selective Repeat ARQ)。
停止等待协议(Stop-and-Wait ARQ):这是最简单的滑动窗口协议形式,窗口大小固定为1。发送方发送一个数据帧后,停止发送并等待接收方的确认帧(ACK)。如果在规定时间内收到ACK,发送方继续发送下一个数据帧;若超时未收到ACK,则重发该数据帧。这种协议的优点是简单易实现,但缺点是信道利用率低,因为发送方在等待确认的过程中处于空闲状态。
后退N帧协议(Go-Back-N ARQ):该协议的发送窗口大小大于1,接收窗口大小仍为1。发送方可以连续发送多个数据帧,而不需要等待每个帧的确认。接收方按顺序接收数据帧,如果收到一个正确的帧,就发送一个确认帧给发送方。如果某个帧丢失或出错,接收方会等待后续的帧,直到收到一个序号不正确的帧时,才发送一个针对最后一个正确接收帧的确认帧。这种协议提高了信道利用率,但在信道误码率高的情况下,可能会导致发送方的发送进度经常需要后退,传输效率低下。
选择性重传协议(Selective Repeat ARQ):在这种协议中,每个数据帧发出时都设置一个计时器。如果某个数据帧未收到确认,计时器超时后重传该数据帧。如果接收方检测到错误,会发送否认帧(NAK)给发送方,发送方收到NAK后重传对应的数据帧。这种协议允许发送方只重传丢失或出错的数据帧,而不是整个窗口内的数据帧,提高了传输的可靠性。
注意:上述的三种协议目前没有明确规定用于计算机网络的哪一层中,由于教材的更新,实际上三种ARQ可以作用于数据链路层也可以作用于传输层,如果作用于链路层,那么发送的数据就是帧;如果说作用于传输层,那么发送的数据就是数据报,此时滑动窗口协议在教材中还有另一种说法:TCP流量控制、拥塞控制。
本文的二、三、四章节主要针对链路层的实现,对于传输层的概念集中于五、六两章节讲解!
二、停止等待协议
顾名思义,发送发 发送了一帧数据后,必须等到接收方接受到信息,并返回一个ack确认帧后才能再次发送第二帧,可以将停止等待协议看成一个特殊的,发送方和接收方的窗口大小都是1的滑动窗口协议。
1.停等协议无差错情况
这边为什么需要1bit来编号,而且为什么1位就足够呢?可以不编号吗?带着这些疑问往下看,当出现差错的情况下怎么办?
2.发送方出现差错
发送方发送1帧后,在RTT时间内没有收到确认帧,那么就会触发超时重传,这里有两点需要注意的:
(1)由于需要触发超时重传,所以每次发送帧的时候都需要保存当前帧的一个副本
(2)数据帧和确认帧需要编号,这个就是上一小节的疑问点了,为什么要编号很好理解,因为接收方如果收到了相同的帧序号,就说明这是一个重复帧,那么会丢弃上一帧,如果不编号,那么发送方不知道接收方你给我的确认帧是哪一帧的,接收方也不知道你发送的帧是不是重复帧,就会出现数据传输不可靠
那为什么用1位就可以呢?其实答案和上述的一样,1位bit可以表示0和1。我们模拟一下场景:
发送方:发送0帧。接收方:收到0帧,发送ACK=0
发送方:收到ACK=0,发送1帧。接收方:收到1帧,但是接收方检测到这个帧有问题,那好,我不给发送方确认信息了,因为这个帧有问题
发送方:RTT超时重传,没有收到ACK=1,说明需要重传1号帧,而不是0号帧。接收方:收到了1号帧的重传,因为帧编码是1,所以明确知道这个重传的是哪一个帧。
所以1位bit位就足够了(本质原因还是停等协议窗口大小就=1),那么有同学会问?2位3位更多位可以吗?当然可以,只是没必要浪费存储空间
3.接收方出现差错
接收方出现差错即ACK丢失,和2小节的概念其实也差不多很好理解,发送方超时重传了1帧,然后接收方收到了1帧,由于帧已经编号了,所以知道这个帧是要覆盖掉原来的帧,这里也可以解释为什么要对帧编号的理由。
4.ACK延迟
以上图为例,发送方发了0帧后,接收方发送的ACK=0在网络上太慢了,这时候发送方启动了超时重传,重新发送0帧,这时候接收方收到后 丢弃重复的0帧,重新发第二个ACK=0,并且这时候网速正常,接收方也收到了ACK=0,并且开始发送1帧,但发送完1帧后,接收方才收到了最早的第一个ACK=0的信息,这时候发送方就要对这个信息丢弃,那么接收方怎么知道这个ACK信息不是刚才发的1帧的ACK呢?很简单因为编码了呀!ACK=0,这里同样也可以解释为什么要对帧编码
5.停等协议性能分析
TD、TA表示的这一帧从第0bit开始发送,到最后一位bit发送结束的时间(发送n位bit的事件),也叫发送时延
RTT表示往返时延
相关例题:
题干分析:4kb/s就是发送bit速度,单向传播时延是30ms,那么RTT往返就是60ms,