(一)功能
1. 数据链路层的功能
1.1. 链路

链路:一条无源的,点到点的物理线路,中间无任何交换节点;
数据链路的传输单位是帧(Frame)
1.2. 组帧

封装:在一段数据的前后分别添加首部和尾部,就构成一个帧;
首部和尾部的作用:确定数据帧的界限(定界)
MTU(Max Transmission Unit):最大传输单元,数据大于 MTU 长度时,就需要分片;
用控制字符 SOH,EOT 定界举例

透明传输问题:当数据中出现 SOH,EOT 字符时,可能造成误判,导致帧被分割或部分被丢弃;
解决(字节填充法):
发送端数据链路层在数据中出现 SOH,EOT 字符时,在前面插入一个转义字符 ESC (Hex: 1B);
接收端在把数据发往网络层之前,删除对应的转义字符;
若数据中本身含有转义字符,则在前面再加一个,删除时,对于连续的两个转义字符只删一个;
解决(零填充法)
对于一些特殊的控制字段码,可以通过在数据中连续若干个 1 之后填一个 0 来避免出现重复;
例:控制字段为 7E = 0111 1110
- 注意到中间有 6 个连续的 1,则在数据中每连续 5 个 1 后插入 1 个 0 就可以避免重复;
1.3. 差错控制
循环冗余检验 CRC
冗余码
在发送端先将数据分组,假设每组数据长度为
,即 个 bit; 在每组数据的后面,添加
位的冗余码,作为最终发送的 位数据; 冗余码的计算:
先将原数据
左移 位,得到 ; 通信双方事先约定好一个
位的操作数 ,**在模 2 除法意义下,**计算 , 是一个 位二进制; 即是冗余码,也称帧检验序列(FCS),最终发送的数据 ; 模 2 除法(⭐):和普通整数除法相似,但是用异或代替减法,没有进位退位运算;
例:101001000 / 1101 = 110101,余 001
注意不是普通整数除法!
例:
, , , ,得到 ;
接收端检验:若收到的数据
模 2 除法意义下, 则合法,否则不合法,应丢弃; 可以做到无差错接收:通过 CRC 检验的数据帧传输无错的概率非常接近 1;
汉明码:是一个错误校验码集合,可以进行 1 位纠错;