回退n帧最大的问题就是
如果一次发送0—8
如果从0就出错了 即使后面7个都对 还是得重传 很浪费
但如果是回退n桢 接受窗口也是8个
虽然发送的时候是
可靠传输
使用差错检测技术(如CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生误码。
那么接下来如何处理呢?
如果向上是
- 不可靠传输服务:仅仅丢弃有误码的帧
- 可靠传输:想办法实现 发送端发送什么,接收端就收到什么
一般情况下:
有线链路误码率较低,为了减小开销,不要求向上层提供 可靠传输服务。
无线链路 易受干扰,要求数据链路层向上提供可靠传输服务。
传输差错
- 比特差错
- 分组丢失
- 分组失序
- 分组重复
- 后面三个一般会出现在数据链路层的上层
可靠传输服务并不局限于数据链路层,其它各层均可实现可靠传输。
可靠传输的实现机制-停止等待协议SW

针对于四种情况,SW需要具备四种功能。
用自己的话描述一下整个过程:
四种情况
1 .确认与否认
发送方给接收方发送数据分组,如果接收方接收到数据分组,则发送一个ACK确认收到给发送方。
如发送方发送的数据编码有误码,接收方通过CRC检测到了之后,就会给发送方发送NAK否认编码。
所以发送方发送分组后并不能直接从缓存中删除,而需要收到ACK确认分组之后才能删除
2 超时重传(数据包丢失)
如果发送方在传数据分组的过程中出现了问题,接收方接收不到。
这个时候难道就让接收方傻傻地等待着。
如果这样,那么接收方和传输方都啥事干不了。所以就需要一个超时重传协议。
超时重传协议是针对发送方来说的,如果在固定时间内发送方没有收到ACK或者NAK的话,那么它就重传他的数据分组。
3 确认丢失
这样子就好了咩?有没有可能有这种情况,发送方给接收方发送数据包1,接收方收到了,并存下来了。
而在发送确认分组的过程中确认分组丢失了。而发送方因为没接收到确认分组所以启动了超时重传协议。
这时候又重新传了数据包1。但是对于接收方来说,它已经接收过数据包1了,这时再接收就重复了。所以必须要有一个机制来让接收方分辨接收到的数据分组是不是同一个。
所以就需要对数据分组编码。只需要区分是否是同一个,所以用一个比特0和1就可以。比特0表示同一个,比特1表示不同一个(下一个)。
4 确认迟到
最后一种情况是:因为某种原因,对数据包一的确认迟到了。
所以超时重传重新发了一次数据包0.而后又收到数据包0的确认分组。
这时就发送数据包1.这是接下来会收到数据包0和1的确认分组,但是计算机无法识别,所以需要对确认分组也进行比特0和1的编号。

停止-等待协议的通道利用率

怎么理解通道利用率:
信道利用率也就是说在通道中对有效数据的处理时间。
TD表示数据分组在发送方处理的时间。
RTT表示从处理完一个数据分组到再一次可以发送下一个数据分组中间经历的时间。
也就是数组分组到底接收方,再确认分组到底发送方。也就是往返时间。(注意往返)
(这一段时间只是拿来传播,实际上并没用)
所以信道利用率就是TD/RTT+TD
TA很小,忽略不计。
由于停止-等待协议的通道利用率过低,所以尝试利用率高的协议。回退N帧协议GBN
可靠传输的实现机制-回退N帧协议GBN
用自己的话描述一下:
正常情况
类似于停止-等待协议,但是回退N帧协议具有发送窗口,每次发送的时间就将发送窗口的数据依次发送出去。
而接收窗口只有一个窗口,只能一个一个接收,然后一个一个发送确认分组。
当接收方收到确认分组后,就依次往前移动窗口。然后走过的那些就可以在缓存中删除。
而接收窗口走过的那些就可以直接交付给上层处理。

累计确认:
不一定要对每个接收分组都发送确认,而可以对接收到的最后一个分组发送确实。
如果有接收分组有ACK1和ACK4,而ACK1在发送过程丢失了,而发送方收到了ACK4,则也可以正常运行,发送方能够正常地将发送窗口向前移动四个窗口。
优点:即使确认分组丢失,发送方也不必重传。

如发送56701,而5在发送过程中出现了差错,于是丢弃5这个数据分组。
即使6701都没用差错,接收窗口对6701都不能接收。所以需要返回上一次最后数组分组的确认。也就是ACK4。
接收方接收到ACK4,而再坚持一下自身,就知道是发送的数据分组出现了问题。所以可以不等超时计时器就开始重传。
以上描述的情况就是GO-BACK-N,回退N帧
若WT窗口尺寸超过取值范围,会出现什么情况?
接收方会无法分辨新,旧数据分组。

总结:
可靠传输的实现机制-选择重传协议

就是类似于回退N帧协议
然后发送方和接收方的窗口尺寸一样
不再累计确认,而是逐一确认
接收方只有在按序接收数据分组后,接收窗口才能向前相应滑动
发送方只有按序收到对已发送数据分组的确认时,发送窗口才能向前相应滑动。
若收到未按序到达的分组时,应对其进行记录,以防止该数据分组的超时重发,但是发送窗口不能向前滑动。

总结
实现数据链路层的可靠传输有三种方法
- 停止等待协议
- 回退N帧协议
- 选择重传协议