数据链路层作为OSI参考模型中的第二层,位于物理层与网络层之间,扮演着承上启下的关键角色。其核心任务是将物理层提供的可能出错的原始比特流,转换为网络层可用的、逻辑上无差错的数据链路。为实现这一目标,数据链路层提供了一系列复杂而精细的功能,具体包括:
一、 成帧与帧同步
这是数据链路层最基本的功能之一。物理层只负责传输原始的比特流,但比特流本身没有结构。数据链路层需要将比特流进行划分,并添加上必要的控制信息(如首部和尾部),封装成一个一个的 帧(Frame) 。这一过程称为成帧或组帧。帧是数据链路层的数据传输单元,其中包含了目的地址、源地址、数据长度、数据负载以及用于差错检测的帧校验序列等字段。

帧同步指的是接收方能够从接收到的比特流中准确地区分出每一个帧的起始和结束位置。常用的帧定界方法包括:
- 字符计数法:在帧首部用特定字段标明帧内字符数。
- 字符填充法:使用特定的标志字节界定帧的边界,当数据中出现标志字节时,利用转义字符进行填充,以避免混淆。
- 零比特填充法:当数据中出现连续的五个“1”时,自动填入一个“0”,确保帧定界标志(如“01111110”)不会在数据中出现。
- 物理层编码违例法:利用物理层编码中未使用的信号模式来标识帧的边界。
二、 差错控制
数据在物理链路上传输时,由于噪声、干扰、衰减等原因,可能会发生比特错误,如单比特错误、多比特错误或突发错误。差错控制是数据链路层为确保数据传输的可靠性而采取的关键机制,其目标是将有差错的物理线路变成无差错的数据链路。
差错控制涵盖了检错和纠错两个方面:
- 检错编码:在帧的尾部添加冗余信息,用于检测数据在传输过程中是否发生错误。接收方通过同样的算法对收到的数据进行校验,若计算结果与接收到的校验位不一致,则判定数据出错。常见的检错方法包括:
- 奇偶校验(Parity Check) :最简单的检错方法,通过添加一个奇偶校验位使数据中“1”的个数为偶数或奇数,只能检测出单比特错误,对偶数个错误无能为力。
- 循环冗余校验(CRC, Cyclic Redundancy Check) :一种功能强大的检错方法,将数据视为多项式,通过模2除法计算出一个校验码(CRC码)附加在数据后。CRC能够检测出绝大多数错误,包括突发错误,是目前应用最广泛的检错方法,如以太网中采用的CRC-32.
- 校验和(Checksum) :对数据按一定长度进行二进制反码求和运算,将结果作为校验和附加在数据后。
- 纠错编码:不仅能发现错误,还能定位并纠正错误。最典型的纠错编码是 海明码(Hamming Code) ,它通过在数据位之间插入多个冗余校验位,使得接收方能够根据校验位的检错结果准确定位出错比特的位置,从而实现单比特错误的纠正。
值得注意的是,仅在数据链路层使用检错编码(如CRC)并不能完全保证可靠传输,通常还需要配合重传机制。接收方在检测到错误帧后会将其丢弃,并通过确认机制(如自动重传请求,即ARQ)让发送方重新传输该帧,才能实现真正的可靠传输。
三、 流量控制
流量控制是协调发送方和接收方之间数据传输速率的一种机制,其目的是确保发送方的发送速度不会超过接收方的处理能力和缓冲区存储能力,从而防止接收方因来不及处理而丢失数据。数据链路层的流量控制是点对点的,例如从主机到路由器。
实现流量控制的主要方法有:
- 停止-等待协议(Stop-and-Wait) :这是最简单的流量控制方法。发送方每发送一帧后,必须停下来等待接收方返回确认帧(ACK),收到确认后方可继续发送下一帧。这种方法的效率很低,特别是在高延迟或高带宽的链路上。
- 滑动窗口协议(Sliding Window) :该协议允许发送方在收到确认之前连续发送多个帧,通过设置发送窗口和接收窗口的大小来控制未确认帧的数量。根据出错处理方式的不同,滑动窗口协议又分为:
- 后退N帧协议(Go-Back-N, GBN) :当接收方检测到某一帧出错时,会丢弃该帧及其后续所有帧,并要求发送方从出错帧开始重传所有已发送但未确认的帧。
- 选择重传协议(Selective Repeat, SR) :接收方只丢弃出错的帧,并正确接收缓存后续正确的帧。发送方只需重传出错的帧,从而避免了不必要的重传,提高了链路利用率。
四、 链路管理
链路管理负责对数据链路的建立、维持和释放进行管理。对于面向连接的通信服务,在数据传输开始前,通信双方需要建立一条数据链路,并同步相关参数;在数据传输过程中,需要维持这条链路;当通信结束时,需要有序地释放链路资源。链路管理功能确保了通信双方能够有序地使用物理信道。
五、 物理寻址
当一个帧发送到共享介质(如以太网)时,必须确保它能被正确的目标设备接收。为此,数据链路层在帧头中添加物理地址信息,即MAC地址(媒体访问控制地址)。这些地址用于指明帧的源节点和目标节点(在同一物理网络或广播域内)的硬件地址,确保数据能够被链路层上的特定邻居节点接收。MAC地址通常是唯一的,固化在设备的网卡上,长度为48位(如6字节十六进制数表示)。发送方根据目标IP地址通过ARP协议解析出对应的目标MAC地址,并将该MAC地址填入帧头中。
六、 介质访问控制
在共享广播信道(如传统以太网总线、Wi-Fi)中,多个设备可能同时争用信道,导致数据冲突。数据链路层需要定义一套规则来协调各设备如何公平、高效地访问共享物理介质。常见的机制包括:
- CSMA/CD(载波监听多点接入/冲突检测) :用于有线以太网。设备在发送前先监听信道,发送过程中同时检测冲突,一旦检测到冲突立即停止发送并发送阻塞信号。
- CSMA/CA(载波监听多点接入/冲突避免) :用于无线局域网(Wi-Fi),通过使用随机退避算法等方式来避免冲突的发生。
七、 向网络层提供服务
从全局来看,数据链路层的所有功能最终都是为了向网络层提供透明的、可靠的数据传输服务。它将网络层交下来的IP数据报封装成帧,并通过物理链路发送出去;同时,它接收物理层传来的帧,去掉首部和尾部后将数据部分上交给网络层。这种功能通常由逻辑链路控制子层(LLC)提供,而MAC子层则负责处理信道的访问控制和物理寻址等与传输介质直接相关的任务。
综上所述,数据链路层通过精密的成帧、差错控制、流量控制、链路管理、物理寻址和介质访问控制机制,将物理层不可靠的比特流传输转换成了上层可以信赖的帧传输服务。这些功能相互协作,共同保障了数据在相邻节点之间的可靠、高效传输。
