一、数据链路层的功能
数据链路层 使用 物理层 提供的“比特传输”服务
数据链路层 为 网络层 提供服务,将网络层的IP 数据报(分组)封装成 帧,传输给下一个相邻结点
物理链路:传输介质(0 层)+物理层(1层)实现了相邻结点之间的“物理链路”
逻辑链路:数据链路层需要基于“物理链路”,实现相邻结点之间逻辑上无差错的“数据链路(逻辑链路)”
二、组帧(封装成帧)
主要问题:
- 帧定界:如何让接收方能够确定帧的界限
- 透明传输:接收方要能够去除"帧定界”的附加信息,把帧"恢复原貌"
四种组帧方法:
- 字符计数法
- 字节填充法
- 零比特填充法
- 违规编码法
字符计数法
原理:在每个帧开头,用一个定长计数字段表示帧长
最大缺点:任何一个计数字段出错,都会导致后续所有无法定界
字节填充法
原理:
- 会在帧的开头加上 SOH 控制字符,帧的结尾加上 EOT 控制字符
- 如果帧的数据部分包含“特殊字符”,则发送方需要在这些“特殊字符”前填充“转义字符ESC”
- (接收方要做逆处理)
在帧的开头和末尾加上控制字符,若数据部分包含控制字符或转义字符,在其前面加转义字符
零比特填充法
原理:
- 会在帧的开头和结尾加上特殊比特串表示帧开始/结束
- 发送方需要对帧的数据部分进行处理,每当遇到连续5个1,就填充一个0
- 接受方需要对帧的数据部分进行逆处理,每当遇到连续5个1,就删掉后面的 0
注:HDLC 协议、PPP 协议使用此方法
违规编码法
原理:
- 曼彻斯特编码:上跳0下跳1看中间,中必变,如果周期中间不跳变,则“违规
- 在帧的开始和结尾处加上违规的曼彻斯特编码
三、差错控制
目标:发现并解决一个帧内部的"位错"
解决方案一:接收方发现比特错后丢弃帧,并通知发送方重传帧
检错编码:
- 奇偶校验
- CRC 校验(循环冗余校验)
解决方案二:由接收方发现并纠正比特错误
纠错编码:海明校验码
奇偶校验
概念:
信息位(有效数据):指帧的"数据部分
校验位(冗余位):即为了给帧的"数据部分"检错/纠错而附加的一些冗余比特
校验原理:
- 在信息位的首部或尾部添加一个校验位
- 奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
- 偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
- 奇偶校验码仅能检测出奇数位错误,无纠错能力
循环冗余校验码(CRC)
循环冗余校验码的思想:
- 数据发送方、接受方约定一个“除数”
- K 个信息位+R 个校验位作为“被除数”,添加校验位后需保证除法的余数为 0
- 收到数据后,进行除法检查余数是否为0若余数非0说明出错,则进行重传或纠错
理论上可以证明循环冗余校验码的检错能力有以下特点:
- 可检测出所有奇数个错误
- 可检测出所有双比特的错误
- 可检测出所有小于等于校验位长度的连续错误
海明校验码(纠错编码)
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
偶校验:1010->01010,能发现奇数位错误,但无法确定是哪一位出错。
1 个校验位之只能携带 2种状态信息(对/错)
海明码设计思路:将信息位分组进行偶校验->多个校验位一>多个校验位标注出错位置
多个校验位能携带多种状态信息,(对/错,错在哪)