目录
前言
数据链路层是介于物理层和网络层中间的一层(根据TCP/IP体系结构划分),主要功能是将数据封装成帧、传输以及控制。
就比如这样:
比如封装:
emmmm,开玩笑,是这样:TCP/IP体系结构
一、基本内容
1.数据链路
数据链路:传输数据除了需要物理线路之外,还需要一些相应的通信协议来控制数据的传输。所以说,物理线路+实现协议的硬软件=数据链路。
2.三个基本问题
不过我个人觉得叫做三个问题的解决办法似乎更容易理解=-=
1.封装成帧
封装成帧其实就是在一段数据的前后分别加上首部和尾部。我们知道(我知道你们知道):所有因特网上传送的数据都是以分组(数据报)为单元进行传输的,帧就是数据链路层上的数据报。有了首部和尾部,我们就能识别出帧的开始和结束,也就更方便对数据进行控制(比如下文的透明传输和差错检测)。
2.透明传输
在帧的首部或尾部一般会包含定界符,来区分不同的帧。透明传输主要关注的是,如何判断定位符、分辨这些定位符和帧的数据中和定位符相同的部分,以此对帧进行正确的处理。举一个简单的例子,如图:
图中的SOH和EOT等控制字符用于传输层,常用在Xmodem、Ymodem、Zmodem等文件传输协议中。同样,帧内部也有定界符,后文将帧结构时会讲到(感兴趣可以点击链接看看,反正我是还没看=-=)。
另外,当在数据传输过程中出现错误时,定界符的作用更加明显。比如发送端在没发送完一个帧的时候出现了故障,接收端在接收数据时发现不是一个完整的帧(没有EOT),所以舍弃。.
还有一个问题,如果帧的数据部分中有EOT(或SOH)呢?为了解决这种问题,我们可以在这个EOT/SOH的前面填充一些字节,如果数据部分中有ESC也一样,在ESC前面加一个ESC,对字符进行转义,如图(ESC就相当于我们常用的转义字符 '\'):
当进行帧检测时,就会发生以下情景(目前普遍由交换机负责对帧的控制):
3.差错检测
因为现实中的通信并不是理想的,不可能没有错误。为了保证传输信息的可靠性,就需要采用各种差错检测方式。目前在数据链路层使用最广泛的是循环冗余校验CRC方法(简称CRC循环校验)。具体过程如下:
1.信息发送方和接收方事先选定一个CRC版本,即使用同一个多项式P(X)作为除数;
2.发送方通过'模2运算'计算出一个冗余码(FCS),添加到帧的数据部分之后,组成一个传输帧,发送出去;
3.接收方将收到的数据同样进行‘模2运算’,检查余数是否为0,不是则舍弃。<