数据链路层:成帧、差错控制、可靠传输与介质访问控制
引言:数据链路层在网络中的位置
数据链路层位于物理层之上、网络层之下。物理层负责把比特转换成电信号、光信号或无线电波并在传输介质上传播,而数据链路层要解决的问题更进一步:如何把物理层传来的原始比特流组织成有边界、有意义、可检错、可控制的数据单位,并尽可能可靠地交付给相邻结点。
这一层关注的是"相邻结点之间"的通信,而不是端到端通信。比如一台主机把数据发给远端服务器,途中可能经过多个路由器。网络层看到的是从源主机到目的主机的路径选择,而数据链路层只关心每一段链路上相邻设备之间的数据传输是否正确、有序、受控。
本章可以按五条主线理解:第一,数据链路层的功能;第二,组帧,也就是如何把比特流划分为帧;第三,差错控制,包括检错编码和纠错编码;第四,流量控制与可靠传输机制,包括停止-等待、后退 N 帧和选择重传;第五,介质访问控制,也就是多个结点共享同一信道时如何决定谁可以发送数据。后面还会涉及局域网、以太网、无线局域网、广域网协议以及数据链路层设备。


一、数据链路层的基本功能
数据链路层的核心任务,是在相邻结点之间实现数据帧的有效传输。它并不保证整个互联网端到端的可靠性,而是尽力在一条链路范围内解决传输过程中可能出现的问题。
数据链路层的主要功能包括:为网络层提供服务、链路管理、组帧、流量控制、差错控制以及介质访问控制。
1. 为网络层提供服务
数据链路层向网络层屏蔽物理层的细节。网络层只需要把分组交给数据链路层,不必关心底层到底是双绞线、光纤还是无线信道,也不必直接处理比特同步、信号失真和帧边界识别等问题。
数据链路层可以向网络层提供三类典型服务。第一类是无确认的无连接服务,发送方直接发送帧,不建立连接,也不要求接收方确认,适用于误码率低、实时性要求高或上层能处理差错的场景。第二类是有确认的无连接服务,发送方不建立连接,但每发送一帧都需要接收方确认,适用于无线链路等误码率较高的场景。第三类是有确认的面向连接服务,通信前建立连接,通信中确认与控制,通信后释放连接,适用于对可靠性要求较高的链路。
2. 链路管理
链路管理主要出现在面向连接的服务中,包括链路的建立、维持和释放。通信双方在正式传输数据之前,需要协商参数、建立逻辑连接;传输过程中,需要维护链路状态;通信结束后,需要释放链路资源。
虽然很多局域网链路在实际使用中不强调显式的链路建立过程,但理解链路管理有助于区分"物理上连通"和"逻辑上可通信"这两个概念。
3. 组帧
物理层传输的是连续的比特流,但接收方必须知道哪些比特属于同一个数据单位。因此,数据链路层需要把网络层传来的分组封装成帧,并在帧中加入首部和尾部信息,使接收方能够识别帧的开始和结束。
帧通常包含帧头、数据部分和帧尾。帧头中可能包含地址、控制字段等信息;帧尾中常包含差错检测码,如 CRC 校验序列。组帧是数据链路层最基础的功能之一,因为没有清晰的帧边界,后续的差错检测、确认重传和介质访问控制都无法进行。
4. 流量控制
流量控制解决的是发送方发送速度与接收方接收能力不匹配的问题。如果发送方发送过快,而接收方缓存有限,接收方就可能来不及处理而丢弃帧。流量控制的目标是限制发送方的发送速率,使接收方能够及时接收和处理。
流量控制与可靠传输常常结合在一起,例如停止-等待协议和滑动窗口协议既可以控制发送窗口大小,又可以配合确认机制实现可靠传输。
5. 差错控制
实际信道可能受到噪声、衰减、干扰等因素影响,导致比特出错。数据链路层通过差错控制发现或纠正错误。
差错控制可以分为检错和纠错。检错只判断数据是否出错,发现错误后通常丢弃并请求重传;纠错不仅发现错误,还能确定错误位置并直接改正。常见检错方法包括奇偶校验和循环冗余校验 CRC,常见纠错方法包括海明码。
6. 介质访问控制
在广播式链路中,多个结点共享同一传输介质。如果多个结点同时发送数据,信号会发生冲突,导致帧损坏。介质访问控制要解决的问题就是:当多个设备都想使用同一信道时,如何协调发送顺序,避免或减少冲突。
常见介质访问控制方法包括信道划分介质访问控制、随机访问介质访问控制和轮询访问介质访问控制。信道划分方法包括频分复用、时分复用、波分复用和码分复用;随机访问方法包括 ALOHA、CSMA、CSMA/CD 和 CSMA/CA。
二、组帧:给比特流划出边界
组帧的核心问题是帧定界。发送方把一串数据封装成帧,接收方必须从连续比特流中准确识别每一帧的起点和终点。如果帧边界识别错误,后续所有数据解释都会出错。
常见组帧方法包括字符计数法、字节填充法、零比特填充法和违规编码法。
1. 字符计数法
字符计数法在帧头中使用一个计数字段,表示该帧的总字符数或字节数。接收方读到计数字段后,就知道接下来多少个字符属于当前帧。
这种方法实现简单,但缺点很明显:如果计数字段在传输中出错,接收方就会错误判断帧长度,导致当前帧和后续帧都无法正确识别。也就是说,一个小错误可能造成连锁失步。

2. 字节填充法
字节填充法使用特殊字符作为帧的开始和结束标志。例如用一个标志字节 FLAG 表示帧边界。问题在于,如果数据部分本身也出现与 FLAG 相同的字节,接收方可能误以为帧结束。
为了解决这个问题,发送方在数据中出现 FLAG 或转义字符 ESC 时,在其前面插入一个 ESC。接收方收到后,如果看到 ESC,就知道后面的字符是普通数据,而不是控制字符。这种方法称为字节填充或字符填充。
字节填充法适合以字节为单位处理的数据链路协议,典型思想是通过"转义"来区分数据字符和控制字符。

3. 零比特填充法
零比特填充法常见于面向比特的协议,如 HDLC。它使用特殊比特串 01111110 作为帧定界标志。为了避免数据部分中偶然出现相同的比特串,发送方在数据部分每遇到连续 5 个 1,就自动插入一个 0。接收方在接收数据时,每遇到连续 5 个 1 后面的 0,就把这个 0 删除。
这样,帧定界符 01111110 就不会在数据部分中自然出现。零比特填充法的优点是可以面向任意比特串,不依赖字符编码,适合二进制数据传输。

4. 违规编码法
违规编码法利用物理层编码中不会出现的非法信号模式来表示帧边界。比如某种编码规则规定正常数据中不可能出现某种电平变化,那么就可以用这种"违规"模式作为帧开始或帧结束标志。
这种方法依赖具体物理编码方式,优点是不用额外插入大量控制字符,但适用范围受编码机制限制。
三、差错控制:发现错误与纠正错误
实际链路中比特可能发生差错。差错控制要解决两个问题:第一,如何发现数据在传输过程中是否出错;第二,如果出错,能否直接纠正,或者至少通知发送方重传。
差错控制通常使用冗余编码。发送方在原始数据后附加一些冗余位,接收方根据这些冗余位检查数据是否满足某种规则。如果不满足,就说明数据可能出错。
1. 奇偶校验
奇偶校验是在数据后增加 1 位校验位,使整个码字中 1 的个数满足奇数或偶数要求。
若采用偶校验,则数据位加校验位中 1 的个数应为偶数;若采用奇校验,则 1 的个数应为奇数。接收方收到数据后重新统计 1 的个数,如果不符合约定,就判断发生错误。
奇偶校验实现简单,开销小,但能力有限。它只能检测奇数个比特错误,无法检测偶数个比特错误,也无法确定错误位置。因此它适合简单场景,不适合高可靠性需求。
2. 循环冗余校验 CRC
CRC 是数据链路层中非常重要的检错方法。它把待发送数据看作一个二进制多项式,用约定的生成多项式进行模 2 除法,得到余数作为帧检验序列 FCS,附加在数据后面发送。
CRC 的基本步骤可以概括为:
首先,发送方和接收方约定一个生成多项式 (G(x)),它对应一个二进制比特串。若生成多项式阶数为 (r),则 CRC 校验码长度为 (r) 位。
然后,发送方在原始数据后补 (r) 个 0,再用生成多项式对应的比特串做模 2 除法。这里的模 2 除法不涉及借位和进位,本质上就是异或运算。
最后,把得到的 (r) 位余数替换原来补上的 0,附加到数据后面发送。接收方收到后,用同一个生成多项式对整个码字做模 2 除法,如果余数为 0,则认为没有检测到错误;如果余数不为 0,则判断传输出错。
CRC 的特点是检错能力强、实现效率高,广泛用于链路层协议。但要注意,CRC 只能检错,不能自动纠错。它判断的是"是否检测到错误",并不告诉接收方错误位在哪里。
3. 海明码
海明码是一种纠错编码,能够发现并纠正一定范围内的错误。它的核心思想是在数据位中插入若干校验位,通过多个校验关系共同定位错误位置。
如果数据位数为 (m),校验位数为 (r),为了能够定位所有单比特错误并区分无错情况,需要满足:
text
2^r >= m + r + 1
海明码通常把校验位放在序号为 1、2、4、8 等 (2^k) 的位置上,其余位置放数据位。每个校验位负责检查若干位,使得任何一个位置出错时,都会形成唯一的错误综合症,从而确定错误位置。
海明码的重点不只是公式,还要理解"多个校验位共同定位错误"的思想。奇偶校验只能知道有错,海明码通过多组校验关系可以知道哪一位出错,并将其翻转纠正。
四、流量控制与可靠传输机制
流量控制和可靠传输经常一起出现。流量控制防止发送方过快发送导致接收方来不及处理;可靠传输则通过确认、超时和重传等机制,处理帧丢失、帧出错和确认丢失等情况。
1. 停止-等待协议
停止-等待协议是最简单的可靠传输协议。发送方每发送一帧,就停下来等待接收方确认 ACK。只有收到确认后,才发送下一帧。如果发送方在规定时间内没有收到确认,就认为该帧或确认可能丢失,于是重传该帧。
为了防止重复帧造成混乱,停止-等待协议通常给帧编号。由于同一时刻最多只有一个未确认帧,所以只需要 1 bit 序号,即 0 和 1 交替编号。
停止-等待协议的优点是简单,缺点是信道利用率低。尤其在长距离、高带宽链路中,发送方发完一帧后要等待很长时间才能发送下一帧,链路大部分时间处于空闲状态。
停止-等待协议信道利用率常用下面思想计算:
text
利用率 = 发送一帧所需时间 / 从开始发送到收到确认前的总时间
若数据帧发送时延为 (T_D),往返传播时延为 RTT,确认帧发送时延为 (T_A),则利用率大致为:
text
U = T_D / (T_D + RTT + T_A)
如果确认帧很短,(T_A) 常可忽略。这个公式体现了为什么传播时延越大、帧越短,停止-等待协议效率越低。
2. 滑动窗口机制
滑动窗口协议允许发送方在未收到确认之前连续发送多个帧。发送方维护一个发送窗口,窗口中的帧可以连续发送;接收方维护一个接收窗口,表示当前可以接收哪些序号的帧。
当发送方收到确认后,发送窗口向前滑动,允许继续发送新的帧。滑动窗口机制可以显著提高信道利用率,因为发送方不必每发一帧就停下来等待确认。
滑动窗口协议中的序号空间非常重要。如果序号位数为 (n),则序号范围为:
text
0 ~ 2^n - 1
窗口大小不能随意设置,否则可能出现新旧帧序号混淆。不同协议对窗口大小有不同限制。


3. 后退 N 帧协议 GBN
后退 N 帧协议允许发送方连续发送多个帧,但接收方通常只按序接收。如果某一帧出错或丢失,接收方会丢弃该帧以及之后所有失序到达的帧,并继续确认最后一个正确按序收到的帧。发送方超时后,需要从出错或丢失的那一帧开始,把后续已经发送但未被确认的帧全部重传。
GBN 的特点是发送方窗口较大,接收方窗口为 1。它比停止-等待协议效率高,但如果链路误码率较高,一旦某帧出错,后续帧即使已经正确到达也会被丢弃,重传开销较大。
在 GBN 中,若序号位数为 (n),发送窗口大小通常应满足:
text
W_T <= 2^n - 1
这样可以避免新旧帧序号混淆。
GBN 采用累积确认机制。接收方确认某个序号,通常表示该序号之前的所有帧都已正确收到。例如 ACK 5 可以表示 0 到 5 或 5 之前的帧都已经正确接收,具体含义取决于教材和协议约定,但核心思想都是"按序累计确认"。

4. 选择重传协议 SR
选择重传协议允许接收方缓存失序到达的正确帧,只要求发送方重传出错或丢失的帧,而不是像 GBN 那样从错误帧开始全部重传。因此 SR 的重传开销比 GBN 小,尤其适合误码率较高的链路。
SR 的代价是实现更复杂。接收方需要有足够缓存保存失序帧,并对每个正确接收的帧单独确认。发送方也需要为窗口内每个帧维护状态,可能还要为每个未确认帧设置独立计时器。
在 SR 中,为避免新旧帧序号混淆,若序号位数为 (n),发送窗口和接收窗口通常满足:
text
W_T <= 2^(n-1)
W_R <= 2^(n-1)
常见情况下,SR 的发送窗口和接收窗口大小相等,都不超过序号空间的一半。

5. 三种可靠传输协议的比较
停止-等待协议最简单,窗口大小为 1,信道利用率低,适合低速或简单链路。GBN 允许连续发送多个帧,发送效率较高,但接收方不缓存失序帧,出错后可能重传大量帧。SR 只重传出错帧,信道利用率更高,但实现复杂,需要更大的缓存和更复杂的确认机制。
可以这样理解三者的演进:停止-等待协议是"发一个等一个";GBN 是"连续发,但错了从错误处往后全重来";SR 是"连续发,错哪个补哪个"。


五、介质访问控制:共享信道如何分配
介质访问控制主要解决广播信道中的冲突问题。多个结点共享同一条信道时,如果大家随意发送,帧之间可能互相干扰,导致接收方无法正确接收。因此需要某种规则决定谁在什么时候可以发送。
介质访问控制方法大致可以分为三类:信道划分介质访问控制、随机访问介质访问控制和轮询访问介质访问控制。

六、信道划分介质访问控制
信道划分方法的思想是把共享信道划分成多个互不干扰的子信道,每个用户占用其中一部分资源。这样可以避免冲突,但可能造成资源浪费。

1. 频分复用 FDM
频分复用把信道的总频带划分为多个互不重叠的频率子带,每个用户占用一个频带同时传输数据。广播电台就是典型例子,不同电台使用不同频率,用户调到对应频率即可接收。
FDM 的优点是各用户可以同时通信,缺点是需要保护频带以避免相邻频带干扰,并且当某个用户没有数据发送时,其占用的频带可能被浪费。

2. 时分复用 TDM
时分复用把时间划分为周期性重复的时隙,每个用户在固定时隙内发送数据。所有用户轮流使用同一频带。
传统 TDM 的缺点是时隙固定分配,即使某用户暂时没有数据,其时隙也可能空闲浪费。统计时分复用 STDM 则根据用户实际需求动态分配时隙,提高信道利用率。

3. 波分复用 WDM
波分复用主要用于光纤通信。它把不同波长的光信号合并在同一根光纤中传输,到接收端再分离不同波长。由于光的频率极高,光纤带宽巨大,WDM 可以显著提高光纤传输容量。
可以把 WDM 理解为光纤通信中的"频分复用",只是划分的是不同光波波长。
4. 码分复用 CDM
码分复用让多个用户在同一时间、同一频带上传输,但每个用户使用不同的码片序列进行区分。只要码片序列之间相互正交,接收方就可以通过相关运算从叠加信号中分离出目标用户的数据。
码分多址 CDMA 是码分复用的典型应用。每个站点被分配一个唯一的码片序列。发送 1 时发送该码片序列,发送 0 时发送该码片序列的反码。接收方用同一个码片序列与收到的叠加信号做内积,就能判断该用户发送的是 1、0,还是没有发送。
CDMA 的计算题核心是正交码片和内积运算。若两个码片序列正交,它们规格化内积为 0;某码片序列与自身的内积为 1,与自身反码的内积为 -1。利用这个性质,就能从多个用户叠加发送的信号中分离出某个用户的信息。
七、随机访问介质访问控制
随机访问方法不预先把信道固定分给各用户,而是让用户在有数据时尝试发送。如果发生冲突,再通过某种机制处理。其优点是灵活,适合突发数据;缺点是可能发生冲突,负载高时效率下降。
1. ALOHA 协议
纯 ALOHA 的思想非常简单:站点有数据就立即发送。如果发送后发现冲突或没有收到确认,就等待一个随机时间后重发。
纯 ALOHA 简单但效率低,因为任意时刻都可能有其他站点发送,冲突概率较高。其最大信道利用率约为 18.4%。
时隙 ALOHA 把时间划分为等长时隙,站点只能在时隙开始时发送。这样冲突只会发生在同一时隙内,减少了冲突可能性,最大信道利用率约为 36.8%。时隙 ALOHA 的效率高于纯 ALOHA,但需要全网时钟同步。


2. CSMA 协议
CSMA 是载波监听多路访问。它的思想是:站点发送前先监听信道,如果信道空闲再发送;如果信道忙,则按照某种策略等待。
CSMA 的常见策略包括 1-坚持 CSMA、非坚持 CSMA 和 p-坚持 CSMA。
1-坚持 CSMA 中,站点监听到信道空闲就立即发送;如果信道忙,就持续监听,一旦空闲马上发送。它的优点是信道空闲时利用及时,缺点是多个等待站点可能同时发送,导致冲突。
非坚持 CSMA 中,站点监听到信道忙时不持续监听,而是等待一个随机时间后再监听。这样可以减少冲突,但可能造成信道空闲后没有站点立即发送,降低利用率。
p-坚持 CSMA 常用于时隙信道。站点监听到信道空闲时,以概率 p 发送,以概率 1-p 推迟到下一个时隙继续判断。它在冲突概率和信道利用率之间折中。
CSMA 相比 ALOHA 能减少冲突,但不能完全避免冲突。原因是信号传播存在时延:一个站点监听到信道空闲时,可能另一个远端站点的信号还没有传播到它这里,于是两个站点仍可能同时发送。

3. CSMA/CD 协议
CSMA/CD 是带冲突检测的载波监听多路访问,典型用于传统总线型以太网。它的原则可以概括为:先听后发,边发边听,冲突停止,随机重发。
站点发送前监听信道,空闲则发送;发送过程中继续监听信道,检测是否发生冲突。一旦检测到冲突,就立即停止发送,并发送干扰信号强化冲突,使所有站点都知道发生了冲突。随后使用二进制指数退避算法等待随机时间后重发。
CSMA/CD 中有一个非常重要的最短帧长问题。由于冲突信号需要传播时间,发送方必须在发送过程中仍有机会检测到最远端冲突。为了保证这一点,帧的发送时间不能小于两倍的最大传播时延,即:
text
最短帧发送时间 >= 2τ
若数据传输速率为 (R),最大传播时延为 (\tau),则最短帧长为:
text
L_min = 2τR
以太网规定最短帧长为 64 字节,这与冲突检测机制密切相关。如果帧太短,发送方可能已经发送完毕,以为发送成功,但冲突信号还没有返回,导致无法检测冲突。
CSMA/CD 适用于半双工共享介质环境。现代交换式以太网通常工作在全双工模式,不再需要 CSMA/CD,因为每个端口独享链路,不会发生传统意义上的冲突。

4. CSMA/CA 协议
CSMA/CA 是带冲突避免的载波监听多路访问,主要用于无线局域网。无线环境中,站点很难像有线以太网那样边发送边检测冲突,因为发送信号远强于接收信号,而且还存在隐藏站问题。因此无线网络更强调避免冲突,而不是检测冲突。
CSMA/CA 的基本思想是发送前监听信道,信道空闲一段时间后再等待随机退避时间,退避计数到 0 才发送。接收方收到正确帧后发送 ACK。若发送方没有收到 ACK,就认为发生冲突或传输失败,需要重传。
无线局域网还可以使用 RTS/CTS 机制缓解隐藏站问题。发送方先发送 RTS 请求发送,接收方回复 CTS 允许发送。其他站点听到 RTS 或 CTS 后,会在指定时间内保持静默,从而减少冲突。
隐藏站问题是指两个站点都能与同一个接收方通信,但彼此听不到对方。如果它们同时向接收方发送,就会在接收方处发生冲突。暴露站问题则是站点误以为不能发送,实际上发送不会造成冲突,从而降低了信道利用率。CSMA/CA 和 RTS/CTS 主要用于缓解这些无线环境中特有的问题。
八、轮询访问介质访问控制
轮询访问介质访问控制通过集中或有序方式分配发送机会,典型方法包括轮询协议和令牌传递协议。
轮询协议中有一个主站按顺序询问各从站是否有数据发送。被询问到的站点才可以发送。它避免了冲突,但主站故障会影响全网,轮询开销也会降低效率。
令牌传递协议中,网络中有一个特殊控制帧称为令牌。只有持有令牌的站点才能发送数据,发送完后把令牌传给下一个站点。令牌环网就是典型例子。令牌机制可以避免冲突,并保证每个站点都有发送机会,但令牌丢失或损坏需要额外机制恢复。
轮询和令牌传递适合负载较重且需要确定性访问的场景,但实现复杂度高于随机访问方法。
九、局域网与 IEEE 802 标准
局域网覆盖范围较小,通常属于一个单位、校园或家庭内部网络。它具有传输速率高、误码率低、延迟小、便于管理等特点。局域网通常采用广播信道,因此介质访问控制是局域网的重要内容。
IEEE 802 标准把局域网的数据链路层进一步划分为两个子层:逻辑链路控制 LLC 子层和介质访问控制 MAC 子层。
LLC 子层向网络层提供统一接口,使网络层不必关心底层采用的是以太网、令牌环还是无线局域网。MAC 子层负责与具体介质访问控制相关的功能,例如 MAC 地址、帧格式、介质访问规则和差错检测。
在现代以太网中,LLC 的存在感相对较弱,MAC 子层更加重要。考试中常见的是 MAC 地址、以太网帧格式、CSMA/CD、交换机转发等内容。

十、以太网
以太网是最典型、使用最广泛的局域网技术。早期以太网采用总线型结构和 CSMA/CD 协议,所有主机共享同一信道。现代以太网更多采用交换机组成星型拓扑,每台主机独占交换机端口,通常支持全双工通信。
1. 以太网的特点
以太网提供的是无连接、不可靠服务。发送方发送帧之前不建立连接,接收方收到帧后通常不发送链路层确认。如果帧出错,以太网直接丢弃,可靠性由上层协议如 TCP 负责。
以太网使用 MAC 地址标识网卡。MAC 地址通常为 48 bit,全球唯一,常用十六进制表示。以太网帧根据目的 MAC 地址决定接收对象。若目的地址是广播地址,全网同一广播域内的主机都应接收该帧。
2. 以太网帧格式
以太网帧通常包括目的地址、源地址、类型字段、数据字段和帧检验序列 FCS。目的地址和源地址各 6 字节,类型字段 2 字节,用于标识上层协议,FCS 通常为 4 字节,用 CRC 进行差错检测。
以太网帧的数据字段有最小长度要求。由于以太网最短帧长为 64 字节,除去目的地址、源地址、类型字段和 FCS 等字段后,数据字段不足时需要填充。这个最短帧长与 CSMA/CD 的冲突检测机制有关。

3. 传统以太网与交换式以太网
传统共享式以太网中,所有主机共享同一冲突域,任意两个主机同时发送都可能冲突,因此需要 CSMA/CD。
交换式以太网使用交换机连接各主机。每个交换机端口形成独立冲突域,如果工作在全双工模式,就不会发生冲突,因此不再使用 CSMA/CD。交换式以太网提高了带宽利用率和网络性能,是现代局域网的主流形式。
十一、无线局域网 IEEE 802.11
无线局域网使用无线电波作为传输介质,典型标准是 IEEE 802.11,也就是通常所说的 Wi-Fi。由于无线信道开放、干扰多、隐藏站问题明显,无线局域网不能简单照搬有线以太网的 CSMA/CD,而采用 CSMA/CA。
无线局域网的基本组成包括无线站点、接入点 AP 和基本服务集 BSS。一个 AP 及其覆盖范围内的无线站点构成一个基本服务集。多个 BSS 可以通过分布式系统连接,形成扩展服务集 ESS。
802.11 帧比以太网帧更复杂,可能包含多个地址字段,因为无线帧在站点、接入点和分布式系统之间转发时,需要同时标识发送端、接收端、源地址和目的地址。
无线局域网的可靠性通常依赖链路层确认。由于无线误码率较高,接收方正确收到单播帧后需要发送 ACK;发送方未收到 ACK 则重传。这一点与以太网不同,以太网通常不在链路层确认普通数据帧。



十二、VLAN:虚拟局域网
VLAN 即虚拟局域网,它可以在物理网络基础上划分多个逻辑广播域。不同 VLAN 之间即使连接在同一台交换机上,也像处于不同局域网一样,二层广播不会直接互通。
VLAN 的主要作用是隔离广播域、提高网络安全性、方便管理和灵活划分用户组。传统按物理位置划分网络,而 VLAN 可以按部门、功能或策略划分网络,不受物理位置限制。
IEEE 802.1Q 是常见 VLAN 标准,它在以太网帧中插入 VLAN 标签,用于标识该帧所属 VLAN。交换机根据 VLAN ID 判断帧的转发范围。


十三、广域网与 PPP 协议
广域网覆盖范围大,常用于连接不同地区的局域网。与局域网相比,广域网链路距离长、带宽成本高、涉及运营商网络,数据链路层协议也有所不同。
PPP 是点对点协议,常用于点对点链路。它具有简单、通用、支持多种网络层协议等特点。PPP 帧通常包含标志字段、地址字段、控制字段、协议字段、信息字段和 FCS 字段。
PPP 的功能包括成帧、差错检测、链路控制和网络层协议协商。链路控制协议 LCP 用于建立、配置、测试和终止数据链路;网络控制协议 NCP 用于支持不同网络层协议,例如 IP。
PPP 不提供可靠传输,不进行纠错,也不使用序号和确认机制。它只进行差错检测,发现错误帧后丢弃,可靠性由上层协议负责。
十四、HDLC 协议
HDLC 是一种面向比特的数据链路层协议。它使用 01111110 作为帧标志,并采用零比特填充法防止数据中出现伪标志。HDLC 帧通常包含标志字段、地址字段、控制字段、信息字段和 FCS 字段。
HDLC 的控制字段可以区分信息帧、监督帧和无编号帧。信息帧用于传输数据,监督帧用于流量控制和差错控制,无编号帧用于链路管理等控制功能。
HDLC 是理解面向比特协议、零比特填充和链路控制思想的重要例子。

十五、数据链路层设备
数据链路层设备主要包括网桥和交换机。它们与物理层设备中继器、集线器不同,能够识别帧,能够根据 MAC 地址转发数据。
1. 网桥
网桥工作在数据链路层,用于连接多个局域网网段。它根据 MAC 地址决定是否转发帧,可以隔离冲突域,减少无关流量。
网桥具有自学习能力。它会根据收到帧的源 MAC 地址和进入端口建立转发表。以后当收到目的地址已知的帧时,就只向对应端口转发;如果目的地址未知,则向除入端口外的其他端口泛洪。
2. 交换机
交换机可以看作多端口网桥。它每个端口通常连接一台主机或另一个网络设备,每个端口都是独立冲突域。交换机根据 MAC 地址表转发帧,显著提高局域网性能。
交换机的转发方式常见有存储转发和直通转发。存储转发会先接收完整帧并检查 FCS,再决定是否转发,可靠性较高但延迟稍大。直通转发在读取到目的地址后就开始转发,延迟低,但可能转发错误帧。
交换机不会默认隔离广播域。普通二层交换机会转发广播帧到同一 VLAN 内所有端口,因此一个 VLAN 通常就是一个广播域。要实现不同广播域之间通信,需要三层设备或三层交换机。

十六、本章高频计算与判断
数据链路层的计算题主要集中在滑动窗口、信道利用率、最短帧长、CRC、海明码和 CDMA。
滑动窗口题要先确定协议类型。停止-等待窗口为 1;GBN 接收窗口为 1,发送窗口最大通常为 (2^n - 1);SR 发送窗口和接收窗口通常不超过 (2^{n-1})。
信道利用率题要分清发送时延、传播时延、RTT 和确认帧发送时延。停止-等待协议效率低的根本原因是每发送一帧后要等待确认,而滑动窗口可以连续发送多个帧,提高链路利用率。
最短帧长题常和 CSMA/CD 结合。核心是发送方必须在发送完之前检测到最远端冲突,因此帧发送时间至少为 (2\tau),最短帧长为 (2\tau R)。
CRC 题要熟练模 2 除法。模 2 加减都等价于异或,不借位也不进位。生成多项式阶数决定校验码位数。
海明码题要先用 (2^r \ge m+r+1) 确定校验位个数,再确定校验位位置。纠错时根据校验结果形成错误位置编号。
CDMA 题要记住码片正交和规格化内积。目标站点的码片序列与收到的叠加序列做内积,结果为 1 表示发送 1,为 -1 表示发送 0,为 0 表示未发送。
十七、容易混淆的重点
第一,数据链路层的可靠传输不同于传输层的端到端可靠传输。数据链路层只负责相邻结点之间的一段链路,传输层负责源主机到目的主机之间的端到端通信。
第二,流量控制和差错控制不是一回事。流量控制解决发送太快导致接收方来不及处理的问题;差错控制解决帧丢失、出错和重复的问题。很多协议把二者结合实现,但概念上要分开。
第三,GBN 和 SR 的接收策略不同。GBN 不接收失序帧,错一帧可能导致后续多帧重传;SR 接收并缓存失序帧,只重传出错帧。
第四,CSMA/CD 和 CSMA/CA 的适用环境不同。CSMA/CD 用于有线共享以太网,重点是冲突检测;CSMA/CA 用于无线局域网,重点是冲突避免。
第五,集线器和交换机不能混淆。集线器工作在物理层,转发比特,所有端口共享冲突域;交换机工作在数据链路层,转发帧,能够隔离冲突域。
第六,以太网不提供链路层可靠传输。它可以通过 FCS 检测错误帧,但发现错误后通常直接丢弃,不在链路层重传。
第七,VLAN 隔离的是广播域,而交换机普通端口隔离的是冲突域。没有 VLAN 时,一台二层交换机上的多个端口通常仍属于同一个广播域。
结语
数据链路层是计算机网络中非常关键的一层。它把物理层提供的原始比特流组织成帧,通过成帧机制确定边界,通过差错控制发现或纠正传输错误,通过流量控制和可靠传输机制协调发送与接收,通过介质访问控制解决共享信道上的冲突问题,又通过以太网、无线局域网、PPP、HDLC、交换机和 VLAN 等技术落到真实网络中。
理解本章时,不要把知识点当成孤立概念。组帧解决"数据边界在哪里",差错控制解决"数据有没有错",流量控制解决"发送会不会太快",可靠传输解决"出错或丢失怎么办",介质访问控制解决"共享信道谁先发",交换机和 VLAN 解决"局域网中帧如何转发和隔离"。这些问题连在一起,就构成了数据链路层的完整逻辑。
重点问题






