一、数据链路层概念
链路(link):两个结点之间的物理线路段,中间没有其他的交换结点。
数据链路(data link):数据传输时还需要通信协议的控制,实现这些协议的软硬件加上链路就构成了数据链路。
二、数据链路层功能
数据链路层最基础的服务就是为网络层服务,将源自网络层的数据以帧为单位传输到相邻结点的目标网络层。(这种传输是在物理层将数据帧转换为比特流之后完成的,也就是说物理层为数据链路层提供服务。可以看出,在计算机网络体系中,下层为上层提供服务,同时上层利用下层提供的服务实现上层的功能。)
数据帧:链路层的协议数据单元,封装网络数据报
数据链路层为完成服务,必须具备三大主要功能:封装成帧,透明传输,差错检测。
2.1 封装成帧
在IP数据报前后分布添加首部和尾部就构成了一个帧。
只有在数据链路层封装成帧时有添加尾部,其他如构成IP数据报时仅添加首部。帧尾部存放有CRC校验码,可以检测差错(后面会具体描述)。首部和尾部还有个重要作用就是帧定界,即确定帧的界限。
2.2 透明传输
透明:一个事物实际存在,但看起来好像不存在一样,比如空气,实际存在,但是看不见。
在计算机中,用户输入计算1+1的指令,计算机显示计算结果为2,计算过程是存在的,但是对用户是透明的,用户只能看见结果而不能看见过程。在透明传输中,透明是针对数据链路层的,数据链层的数据帧无论是什么样的比特组合,都能顺利在链路上传输。为什么要有这个功能呢?
在传输数据时,如果数据的二进制组合中出现与帧定界符相同的组合,此数据帧的传输就会提前终止,数据传输出错。因此,需要采取手段避免这种错误,以实现透明传输。
2.2.1 字符计数法
字符计数法的原理就是在帧首部使用一个计数字段,以表明该帧的字符长度,这样就避免了数据帧传输提前终止。它的缺点是当有数据帧中有一个字符丢失,后面的数据帧全会出错。比如第一帧中的1如果丢失,那么第一帧就会变成52345,后面的所有帧依次错位,全部出错。
2.2.2 字符填充法
在数据帧中与控制信息相同的比特组合前面加一个转义字符“ESC”,相当于告诉系统这是一个数据信息,不是控制信息。
SOH:Start Of Header,放在首部表示帧的开始
EOT:end of transmission,放在尾部表示帧的结束
当接收方接收到数据帧后会自动去除转义字符。
2.2.3 零比特填充法
只需记住5 1 1 0即可,看见5个连续的1,就插入一个0。
只有在帧的开始与结束处才出现6个连续的1,事实上,此方法正是以F(01111110)为边界。
2.2.4 违规编码法
违规编码法适用于曼彻斯特编码,曼彻斯特编码用从高到低的跳变表示1,从低到高的跳变表示0,那我们就可以用“高-高”,“低-低”表示帧的开始与结束。