目录
一、数据链路层
二、封装成帧
三、差错检测
四、可靠传输
1、停止等待协议
2、滑动窗口协议
3、选择重传协议
五、总结
一、数据链路层
这一篇记录一下五层协议体系结构中的数据链路层。这一层属于计算机网络的低层,下图是数据链路层在数据传输中的地位。
链路的意思是从一个结点到相邻结点的一段物理线路,中间没有其他交叉结点。可以理解为,两台计算机互相通信的路径中包含许多这样的链路。
数据链路指的是一条包含通信协议的线路,包括硬件和软件的实现,用来传输数据。
在数据链路层中,三个重要问题:封装成帧、差错检测和可靠传输。接下来看看是什么,重点记录可靠传输的实现原理。
二、封装成帧
数据链路层传输的单位是帧,网络层的IP数据报会成为帧的数据部分,然后再加上帧首部和尾部,构成一个完整的数据帧。帧首部和尾部作为帧定界,包括一些必要的控制信息。
帧的数据部分长度有明确规定,最大传送单元(MTU)的数值是上限(1500字节)。
帧定界符标记帧开始和帧结束。数据中如果出现帧定界符号,出现了透明传输的问题。透明传输是指对上层的传输数据没有限制,数据链路层需要提供“透明传输”的服务。
所以,采用了字节填充的方法,在标记字符前插入转义字符,解决了透明传输的问题。
三、差错检测
数据链路层为了检测差错,在帧的尾部设置了一个差错检验字段,使用循环冗余校验技术(CRC)进行差错检测。
这里不作具体介绍,在计算机组成原理中有详细的原理介绍和数学计算过程。
CRC有一个缺点,只能检错而不能纠错。这样需要使用纠错码进行前向纠错,但开销很大,一般在计算机网络中不使用。真正的办法是进行重传或者丢弃出错的帧。下面可靠传输中的方法解决了数据出错/丢失的问题。
四、可靠传输
可靠传输是在不可靠信道上实现可靠的服务。看起来很抽象的说法,如图更好理解。
可靠传输提供的服务如左图,它是由双向不可靠信道实现的,如右图。
不可靠的信道传输会出现差错、丢失、重复或者失序,所以要实现可靠的服务,可靠传输协议要在不可靠信道进行双向通信。
可靠传输的原理不仅在于数据链路层,在TCP协议中也用到这种原理和方法实现可靠的服务。
实现可靠传输包括了许多协议,这些协议的更新变换不断优化传输效率。
1、停止等待协议
停止等待协议(SW,Stop-and-Wait)经历过不断完善的过程,实现可靠传输的方法就是:当发现差错时,就进行重传。
一开始,协议规定接收数据会进行确认(ACK)和否认(NAK)。后来觉得没必要使用否认机制,一方面实现原理更复杂,另一方面效率低。
因此,想到了另一种好办法是:发送方发送完一个数据后,启动一个超时计时器,开启超时重传机制。这样发现,完全不用NAK来解决出错问题,协议更简单而且反应及时。
到这里,解决了数据出错和丢失的问题,但是还有一种情况,数据重复的问题来了。后来加上发送序号解决了顺序和重复数据的问题。
确认和超时重传机制实现了该协议,所以也成为自动请求重传(AQR)。
对于数据链路层,点对点通信的往返时间确定,不太会出现时序问题,在该层实现SW协议可以不对数据组进行编号。
停止等待协议实现简单,但是缺点在于信道利用率低,每次发送一个分组然后确认,浪费了许多空闲资源。所以,进一步改进,实现流水线传输方式提高信道利用率,引出下面的滑动窗口协议。
2、滑动窗口协议
滑动窗口的概念来源于协议的工作过程中,发送窗口不断向前滑动,故称为滑动窗口协议。
发送窗口是指流水线传输数据时候,来限制可以连续发送的数据分组个数。由此看来,是一种连续的AQR协议。
发送方需要维持一个发送窗口:允许发送方已发送但还没有收到确认的分组序号的范围,窗口大小是发送方已发送未确认的最大分组数。
然后,发送方收到一个确认后发送窗口向前滑动一个单位。
工作过程:
(1)接收方只按序接收分组。当收到失序的分组,它会丢弃,并对按序的分组进行确认。如果也用窗口来定义的话,接收窗口的大小为1.
(2)接收方采用累计确认的方式。在收到n个分组之后,对按序到达的最后一个分组进行确认。
(3)发送方采用超时重传机制来重传差错或丢失的分组。一旦分组出错,在该分组之后发送的所有分组都需要重传,退回去重传已发送的N个分组,故称为回退N帧协议(GBN)。
整个过程下来可以发现,GBN协议是在SW协议基础上修改了发送方的算法,接收方算法不变。
3、选择重传协议
GBN协议很大地提高了信道利用率,但是存在一个问题正是它的名字!回退N帧意味着一个分组的差错可能会造成大量分组的重传,但是这些分组可能已经都被接收方正确接收确认了,只是由于未按序到达。
因此,选择重传协议(SR)诞生了,它来解决这个问题。
上面提到了GBN协议的接收方可看做维持了一个大小为1的接收窗口,所以要解决重复发送不必要分组的问题,接收方开启了缓存机制,接收窗口大小不再是1。当然,也不能再采用累计确认的方式,而是要对每个分组逐一确认。接收方缓存来暂存未按序到达的分组。
SR协议显然比GBD协议复杂得多。
上图则是SR协议的工作过程例子,可以看到接收方有了缓存机制之后,就能够实现只重传错误的分组,提高了效率。
五、总结
数据链路层的数据传输原理如上面所述,很奇妙地发现,在不可靠的信道上加上合适的可靠协议(SW、GBN或者SR),就可以向上提供可靠的服务。不过,目前有线网络的性能已经使得传输过程出错的概率大幅度减小,在数据链路层可以不使用确认和重传的协议。但对于无线信道传输,还存在比较高的误码率,所以在数据链路层还是要实现可靠传输为上层提供服务。
当然,这篇我主要记录学习了数据链路层的几个重要内容,包括封装成帧、差错检测和可靠传输,重点是实现可靠传输的几个协议具体内容,数据链路层的知识不止这些,还有点对点协议(PPP)、载波监听多址接入/碰撞检测(CSMA/CD)等方面的内容。
如果觉得不错欢迎“一键三连”哦,点赞收藏关注,有问题直接评论,交流学习!
一起AC多多,Offer多多!
我的CSDN博客:https://csdn-czh./article/details/115444270