基本概念:
使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否出现了误码。
此时有:
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
可靠传输服务: 想发送端发送什么,接收端就收到什么
一般情况下,有线链路误码率比较低,使用不可靠传输服务,而无线链路误码率高,因此数据链路层必须向上提高可靠传输服务。
传输差错包括:比特差错,分组丢失,分组失序(先发送的分组未必先到达),分组重复(如果某个分组在传输渠道中滞留时间过长,此时发送方就会在发送一次这个分组)等。这些不仅仅出现在数据链路层,运输层也会出现。
可靠传输的实现比较复杂,是否使用要考虑实际情况。
停止-等待协议:
发送方发送数据后,接收方确认收到的是正确数据,如果正确,接收方给发送方发送ACK,发送方发送下一组数据,如果收到的是错误数据,那么发送NAK,发送方重新发送数据。
超时重传:
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
分组重复:
发送方发送的数据可能丢失,接收方发送的数据也可能丢失。如下:
为避免分组重复这种传输错误,必须给每个分组带上序号。对于停止-等待协议,由于每发送一个数据分组就停止等待只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,即序号0和1。
如上图所示:第一幅图是接收方发送ACK发送的迟到了,因此,发送方会误认为发送的DATA0丢失,重新发送DATA0,然后发送DATA0后,接收到了迟到的ACK会误认为DATA0已经被接收,从而发送DATA1。此时接收方收到了两个DATA0和一个DATA1,由于经过编号之后可以判定DATA0重复,因此会丢弃一个DATA0。如果对ACK也编号的话,其会返回ACK0和ACK1给发送方,发送方接收到了两个ACK0,因此会丢弃一个,继续发送ACK1.这样就解决了接收方返回ACK的超时问题。
信道利用率:
示例:
信道利用率较低。