持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情
今天我们对可靠传输的基本概念进行一个介绍,同时对停止——等待协议进行一个讲解。
可靠传输的基本概念
通过上一篇文章可知,使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在
传输过程中是否产生了误码(比特错误)
数据链路层向上层提供的服务类型
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错只是传输差错中的一种。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会
出现在其上层。
可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求。
停止——等待协议SW
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或 NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时,启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。一般可将重传时间选为略大于 “从发送方到接收方的平均往返时间”。
为避免分组重复这种传输错误,必须给每个分组带上序号。
对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了。
注意事项
接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组。
为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止等待协议的停等特性,只需1个比特编号就够了,即编号0和1。
为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样,在数据链路层一般不会出现。
ACK分组迟到的情况,因此在数据链路层实现停止等待协议可以不用给ACK分组编号。
超时计时器设置的重传时间应仔细选择。-般可将重传时间选为略大于”从发送方到接收方的平均往返时间”。
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定。
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
停止-等待协议的信道利用率
习题练习
当往返时延RTT远大于数据帧发送时延Tp时(例如使用卫星链路),信道利用率非常低。
若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低。
为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR。下一篇文章我们将对这两种协议进行细致的讲解。