数据链路层负责一套链路上从一个节点向另一个物理链路直接相连的相邻节点传输数据报。换言之,主要解决相邻节点间的可靠数据传输节点(nodes):路由器和主机 链路(links):连接相邻节点的通信信道

组帧(framing):将来自网络层的IP数据报构造成数据帧,添加首部(帧起始标志、地址信息)和尾部(校验序列)
典型帧格式: [起始符][地址字段][控制字段][数据][CRC校验/FCS][结束符]

注意:以太网标准规定,最小帧长度必须为64字节,所以最小数据长度=64-目的MAC(6)-源MAC(6)-类型(2)-FCS(4)=46
帧同步:确保接收方能够正确识别数据帧的起始和结束位置的过程。常见的帧同步方法:
比特填充的标志比特法(Bit Stuffing):使用一个特定的比特序列(如01111110)来标志帧的开始和结束

发送方:如果数据中出现连续的5个1比特,则直接插入1个0比特 接收方:当出现连续的5个1比特时

介质访问控制(MAC):当多个节点共用同一条链路时,MAC决定了多个设备如何共享传输介质
寻址(Addressing):在数据链路层使用物理地址(MAC地址)进行设备寻址,确保数据能够正确地传输到目标设备
MAC地址(Media Access Control Address):用于在网络中唯一标识一个网络设备地地址
MAC寻址过程示例:主机A向主机D发送数据,途中经过路由器B和路由器C(这四个节点处于不同的网络段)

流量控制(Flow Control):协调发送方和接收端之间的数据传输速率,防止发送方发送速率过快导致接收方无法即使处理。常见方法:
背景:信道的噪声导致的数据传输问题
解决办法:差错检测与纠正
概念:数据链路层的差错编码(差错控制编码/信道编码)是确保数据在物理介质上可靠传输的核心技术。它通过在原始数据中添加冗余比特,使接收方能够检测甚至纠正传输过程中产生的比特翻转(如0变1或1变0)
核心功能:
下面介绍几种主要的差错编码技术
奇偶校验(Parity Check):在数据中添加一个额外的校验位(奇偶位),使数据中“1”的个数满足奇数或偶数
奇校验示例:

缺点:
循环校验(Cyclic Redundancy Check,CRC)是一种在数字通信和数据存储中广泛使用的错误检测技术。它的核心目的是检测数据传输或存储过程中可能发生的意外改动(比特错误),例如由噪声、干扰或硬件故障引起的错误
CRC校验码计算方法:1.设原始数据D为x位二进制数字 2.使用预先定义好的生成多项式G作为除数
3.生成多项式有y + 1位二进制数,最高次方为y,校验码的位数为y 4.将原始数据M乘以2^y(相当于在M后面添加y个0) 5.再用G对M做模2除(异或运算),得到y位余数(不足y位前面用0补齐),即为CRC校验码
CRC校验示例:
11010011 (二进制)
x⁸ + x² + x¹ + 1
0x107 (但计算时用 100000111 更直观)。x⁸)。
11010011 的 CRC-8 校验码,并验证接收端如何检测错误。
步骤 1: 发送方计算 CRC 校验码
在原始数据末尾附加 r 个 0:
D = 11010011r=8 个 0: 11010011 + 00000000 = 1101001100000000进行模2除法 (XOR 除法):
1101001100000000100000111 (9位)1 到被除数当前最高位 1,做 XOR 操作。结果作为新的部分被除数,继续下移计算过程:
1101001100000000 <-- 被除数 (原始数据 + 8个0)
XOR 100000111 <-- 除数 (G) 第一次对齐最高位的1 (位置1)
----------------------
1010000100000000 <-- 第一次 XOR 结果 (余数)
100000111 <-- 除数右移对齐下一个最高位的1 (位置3)
----------------------
100010100000000
100000111 <-- 除数右移对齐 (位置4)
----------------------
10110000000
100000111 <-- 除数右移对齐 (位置7) (注意前面补了3个0)
----------------------
110011100
100000111 <-- 除数右移对齐 (位置8)
----------------------
100110110
100000111 <-- 除数右移对齐 (位置9)
----------------------
1100100 <-- 最终余数 (8位)1 进行对齐和 XOR。r (8位)。如果不足,在前面补0。本例余数是 1100100,补足8位是 01100100 (前面加一个0)。得到 CRC 校验码:
01100100 (二进制) 就是计算出的 CRC-8 校验码。0x64。发送完整数据帧:
11010011011001001101001101100100步骤 2: 接收方验证数据 (无错误情况)
接收数据帧: 1101001101100100
使用相同的生成多项式进行模2除法:
1101001101100100100000111计算过程:
1101001101100100 <-- 接收到的完整帧 (数据 + CRC)
XOR 100000111 <-- 除数对齐第一个1 (位置1)
----------------------
1010000101100100
100000111 <-- 对齐下一个1 (位置3)
----------------------
1000101001100100
100000111 <-- 对齐 (位置4)
----------------------
10110010100100
100000111 <-- 对齐 (位置7)
----------------------
1100010000100
100000111 <-- 对齐 (位置8)
----------------------
100011110100
100000111 <-- 对齐 (位置9)
----------------------
110001100
100000111 <-- 对齐 (位置12)
----------------------
1000011 <-- 最终余数
100000111 <-- 位数不够除?停止!余数=1000011 (7位) -> 补0=0100001101000011 (补足8位)。验证结果:
01000011 (二进制),不等于 00000000。
介质访问控制协议(Medium Access Control,MAC)负责解决多个设备共享同一通信信道时的冲突问题
MAC协议主要分为以下三类:
使用多路复用技术(FDM、TDM、WDM、CDM)
详细解析请见计算机网络(1)——概述中的3.1.2 多路复用
载波监听多路访问协议(Carrier Sense Multiple Access,CSMA):发送前先侦听,减少冲突概率。侦听/发送策略分类:
冲突仍然可能发生:由于信号传播延迟

在t4/t5时刻之后,后续再发送数据已经没有意义了,但是CSMA协议一旦开始发送第一个比特,那么该数据就要发送完毕。这会导致不必要的资源浪费,所以基于CSMA提出了一改改进的CSMA/CD协议
CSMA/
CD(Carrier Sense Multiple Access/Collision Detect冲突检测):在CSMA协议的基础上增加了冲突检测机制

冲突检测机制:
场景假设:

某一空闲时间A发送数据,当数据即将到达B的临界时刻,B也开始发送数据;当B发送的数据到达A时,A才会检测到冲突。根据边发边听,不发不听的特性,如果B发送的数据到达A时,A已经完成数据发送的过程,那么A将不再检测冲突,所以要满足一个条件:L(min)/R >= 2d(max)/V
/ | 信道划分MAC | 随机访问MAC | 轮询/令牌MAC |
|---|---|---|---|
网络负载重时 | 共享信道效率高且公平 | 产生冲突开销 | 结合两者优点 |
网络负载轻时 | 共享信道效率低 | 共享信道效率高且单个节点可以利用信道的全部带宽 | 结合两者优点 |
基本概念:轮询是一种集中式的介质访问控制方法 由一个主节点(控制器)按顺序询问各个从节点是否有数据要发送

工作原理:
特点:
优点:
缺点:
基本概念:令牌MAC是一种基于令牌的介质访问控制方法,使用一个称为"令牌"的特殊帧来控制网络访问

工作原理:(1)令牌传递:
(2)节点访问流程:
(3)数据接收:
主要特点:
优点:
缺点:
Question:在同一个LAN内,如何在已知目的IP地址的情况下确定其MAC地址?
地址解析协议(Address Resolution Protocol,ARP):是一种用于解析网络层地址(如IP地址)和数据链路层地址(如MAC地址)的协议。它工作在网络层与数据链路层之间,通过广播请求和单播响应实现地址解析ARP表:LAN中的每一个节点都会维护一张ARP表,用于存储该LAN中节点的IP地址和MAC地址的映射关系<IP地址;MAC地址;TTL>
ARP工作原理: