尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

数据链路层核心原理:从帧封装到可靠传输的计算机网络基石

数据链路层核心原理:从帧封装到可靠传输的计算机网络基石 1. 从“透明管道”到“可靠传输”数据链路层的核心使命如果你正在备考计算机考研尤其是408统考那么“王道计算机网络”这套书和课程你肯定不陌生。它几乎是每个考研人的案头必备而其中的数据链路层常常是大家从“看得懂”到“理得顺”的一道坎。很多人学完物理层觉得网络就是一根根线缆和比特流到了数据链路层突然冒出一堆帧、差错控制、流量控制的概念容易感到混乱。其实你可以把物理层想象成修建了一条“透明”的公路它只负责把路基铺好保证信号车辆能在这条路上跑起来。至于路上跑的是什么车、车会不会撞在一起、车坏了怎么办、车流量太大堵住了怎么疏导物理层一概不管。数据链路层就是这条公路上的第一套“交通管理系统”。它的核心使命就是把物理层提供的可能出错的、无结构的比特流封装成可靠的、有结构的“数据帧”并在相邻的两个节点比如你的电脑和家里的路由器之间进行无差错的传输。为什么这一层如此重要因为网络通信的绝大多数可靠性保障都是从这一层开始的。考研中这一章是后续网络层、传输层许多重要协议如IP、TCP设计思想的基石。理解不透数据链路层学TCP的滑动窗口、拥塞控制就会非常吃力。我当年复习时就曾在这里卡壳后来把几个核心服务拆开揉碎了看才豁然开朗。接下来我们就抛开教材的平铺直叙用“解决问题”的视角把数据链路层的精华彻底捋清。2. 数据链路层的三大核心服务与实现手段数据链路层向上层网络层承诺的服务可以概括为三大件封装成帧、透明传输、差错控制。这三点不是并列关系而是层层递进、环环相扣的工作流程。很多同学笔记记了一堆但没理清它们内在的逻辑做题时容易张冠李戴。2.1 封装成帧给比特流装上“集装箱”物理层传来的是一串0和1没有起点和终点标识。封装成帧就是在这串比特流的前后加上特殊的标记称为帧定界符从而划分出一个一个独立的、可处理的数据单元——帧。为什么需要帧没有帧接收方就不知道从哪里开始算一个完整的数据包到哪里结束。就像一列无限长的火车你不知道哪几节车厢是运往同一个目的地的。如何实现最经典的方法是使用特殊的比特组合作为帧开始SOH, Start of Header和帧结束EOT, End of Transmission标志。例如早期协议使用一个特定的8位模式“01111110”。一个关键矛盾如果数据部分恰好包含了和帧定界符一样的比特模式怎么办接收方会误以为帧结束了。这就引出了下一个核心服务——透明传输。2.2 透明传输让数据“隐身”通过定界符“透明”在这里的意思是对于上层交下来的数据数据链路层应该原封不动地传送不能因为数据里包含了特殊字符如帧定界符就出错。为了实现透明传输主要采用两种技术字符填充法面向字节主要用于早期面向字符的协议如PPP协议。当数据中出现帧定界符“01111110”时发送端就在它前面插入一个转义字符“01111101”ESC。接收端看到ESC后就知道后面的“01111110”是数据不是帧边界会删除ESC还原数据。这就好比在数据中的特殊字符前加个“\”进行转义。零比特填充法面向比特这是更通用、更高效的方法被HDLC、PPP等协议广泛采用。它的规则是发送端在数据部分中每当遇到连续5个‘1’时就自动插入一个‘0’。这样数据部分永远不会出现连续的6个‘1’而帧定界符“01111110”是6个连续的‘1’。接收端进行反操作在连续收到5个‘1’后如果下一个是‘0’就删除这个‘0’如果下一个是‘1’则说明遇到了帧结束符。这个方法硬件实现简单效率高是考研的重点。注意很多同学容易混淆“透明传输”和“可靠传输”。透明传输解决的是“数据内容与帧结构冲突”的问题是帧成形的保障而可靠传输解决的是“帧在信道中出错或丢失”的问题是帧传送的保障。这是两个不同层面的问题。2.3 差错控制发现并处理传输错误物理信道不是理想的会受到噪声干扰导致比特翻转0变11变0。差错控制就是用来检测甚至纠正这些错误的。考研中主要掌握检错纠错码如海明码了解原理即可。奇偶校验最简单但检错能力弱。在数据后加一个校验位使整个数据中‘1’的个数为奇数奇校验或偶数偶校验。只能检测奇数个比特错误。循环冗余校验CRC这是数据链路层差错检测的绝对核心和必考点。它基于模2除法异或运算。发送端将待发送的数据比特串看作一个多项式M(x)的系数。双方事先约定一个生成多项式G(x)例如CRC-16: x^16 x^15 x^2 1。在数据后面补上G(x)最高次幂个‘0’然后除以G(x)得到的余数R(x)就是CRC校验码FCS帧检验序列。将FCS附加在原数据后面一起发送。接收端用收到的完整数据原数据FCS除以同样的G(x)。如果余数为0则认为帧无差错否则丢弃该帧。核心要点CRC有很强的检错能力能检测所有奇数位错、双比特错以及长度小于等于生成多项式阶数的突发错误。但它只能检错不能纠错。发现错误后通常的处理方式是丢弃错误帧然后依靠上层如运输层的TCP或本层的可靠传输协议来重传。这里我画一个简化的CRC计算流程表帮你理清思路步骤发送端操作接收端操作关键点1. 准备待发送数据 D 生成多项式 G (r阶)接收数据 D‘ FCS’G的阶数r决定了FCS的位数r位2. 计算D左移r位补r个0得到 D * 2^r。用 D * 2^r 除以 G模2除得到余数 R即FCS用收到的完整比特串 (D‘ * 2^r FCS’) 除以 G模2除本质是异或没有借位进位3. 发送/接收发送D FCS接收D‘ FCS’FCS紧跟在原始数据之后4. 验证-计算余数。若余数为0则接受该帧否则丢弃余数为0是检错正确的标志不是“无余数”3. 可靠传输协议从停等到选择重传的演进逻辑差错控制如CRC只能发现错误然后丢弃。但网络层需要的是“无差错”的交付。如何保证丢弃的帧能重传最终让接收方按序、无重复地收到所有帧这就是可靠传输协议要解决的问题。这是数据链路层乃至整个计算机网络中最精妙、最考验理解力的部分之一。其演进路线体现了计算机科学中“用复杂度换性能”的经典思想。3.1 停止-等待协议SW最简单的可靠原理极简发送方每发完一帧就停止发送等待接收方的确认ACK。收到ACK后才发下一帧。如果超时未收到ACK则重发上一帧。为什么需要编号考虑这种情况发送方发帧0接收方收到并回复ACK0但ACK0在网络中丢失了。发送方超时重发帧0。此时接收方会收到两个帧0。如果没有编号接收方无法判断这是新的帧0还是旧帧0的重传可能会重复上交网络层。因此即使只有一帧在传帧也必须带一个比特0或1的序号。优点简单易于实现。致命缺点信道利用率极低。利用率 U Td / (Td RTT Ta)其中Td是发送时延RTT是往返时延Ta是处理确认时延。在远距离、高速率信道下U会低得可怜。这就好比用万吨巨轮一次只运一个集装箱大部分时间都在等货装船和返航。3.2 回退N帧协议GBN批量发送与累计确认为了解决SW的效率问题GBN允许发送方在不等待确认的情况下连续发送多个帧。这些帧的序号范围构成了一个“发送窗口”。接收方采用累计确认的方式比如收到帧0、1、2后可以只发一个ACK2表示2及之前的所有帧都已正确接收。核心机制发送窗口大小为N表示最多有N个已发送但未被确认的帧在空中。接收窗口大小为1。接收方只能按序接收。如果期望收到帧k但收到了帧k1它会丢弃k1因为不按序并重复发送最后一个按序帧的ACK例如ACK k-1。出错处理如果发送方发现某个帧比如帧k超时未确认它会回退到帧k并重传帧k及之后所有已发送但未确认的帧。这就是“回退N帧”名字的由来。优点相比SW显著提高了信道利用率尤其是在RTT较大的情况下。缺点一旦某个帧出错或丢失会导致其后面正确的帧也被无辜重传造成带宽浪费。这是一种“惩罚性”重传。3.3 选择重传协议SR精准打击效率至上GBN的缺点在于“一损俱损”。SR协议对此进行了优化接收窗口大于1可以缓存非按序到达但正确的帧发送方只重传真正出错或丢失的帧。核心机制发送窗口 接收窗口大小通常相等且大于1。独立确认接收方对每一个正确收到的帧无论是否按序都发送独立确认。比如按序收到了帧0、1然后收到了帧3接收方会发送ACK0、ACK1并缓存帧3然后继续期待帧2。选择重传发送方只为超时未确认的帧单独重传。接收方一旦收齐了某个序号之前的所有帧就可以将一批按序帧交付给上层。优点避免了GBN的冗余重传带宽利用率最高。难点与考点窗口尺寸与序号空间的关系。这是SR协议最易错的地方。假设序号用n个比特表示则序号空间为0到2^n - 1。必须保证发送窗口和接收窗口的大小之和不超过序号空间大小即 W_T W_R 2^n否则会造成接收方无法分辨新旧帧。例如n3序号0~7如果W_T W_R 4则可能发生如下情况发送方发0,1,2,3接收方全部收到窗口滑动到[4,5,6,7]但所有ACK都丢失了发送方超时重发0,1,2,3此时接收方期待的是4,5,6,7但收到了0,1,2,3它无法判断这是新的帧序号循环回来了还是旧帧的重传。因此通常取 W_T W_R 2^(n-1)。为了更直观地对比这三个协议我整理了下面的表格特性停止-等待 (SW)回退N帧 (GBN)选择重传 (SR)发送窗口11 (通常为N)1 (通常为N)接收窗口111 (通常为N)确认方式逐个确认累计确认独立确认重传策略超时重发单个帧超时重发该帧及之后所有已发未确认帧只重传超时的单个帧接收处理必须按序必须按序非按序帧丢弃可缓存非按序正确帧优点简单控制容易利用率高于SW实现比SR简单带宽利用率最高避免无用重传缺点信道利用率极低一个帧出错导致大量重传实现复杂需更多缓存窗口尺寸有限制适用场景几乎已被淘汰仅用于教学错误率较低的信道错误率较高或带宽珍贵的信道4. 介质访问控制共享信道下的“交通规则”当一条传输介质被多个设备共享时如总线型以太网、无线Wi-Fi如何协调大家有序地发送数据避免冲突这就是介质访问控制MAC子层要解决的问题。考研中主要掌握两大类信道划分和随机访问。4.1 信道划分MAC各走各的道互不干扰这类方法的核心思想是“分而治之”把一条宽带信道逻辑上划分成多个互不干扰的子信道。频分多路复用FDM按频率划分。就像广播电台不同电台使用不同频率同时广播互不影响。ADSL上网、无线电广播就是典型应用。时分多路复用TDM按时间划分。将时间分成等长的时隙每个用户周期性地占用一个固定时隙。就像CPU的时间片轮转。缺点是即使某个用户没有数据它的时隙也会空着造成浪费。统计时分多路复用STDM对此进行了改进动态分配时隙提高了效率。波分多路复用WDM本质是光域的FDM用于光纤通信。码分多路复用CDM/CDMA最巧妙的一种。每个用户被分配一个独特的码片序列。发送时用数据比特1或-1乘以码片序列接收时用相同的码片序列与接收到的信号进行内积运算即可还原出原始数据。不同用户的码片序列是正交的因此可以同时同频通信而互不干扰。3G移动通信的核心就是CDMA。实操心得理解CDMA的关键是掌握其正交性。假设两个站的码片序列S和T其规格化内积 S·T 0。发送时发送1则发码片序列本身发送0则发序列的反码。接收时用发送方的码片序列与收到的叠加信号做内积结果为1则解码为1为-1则解码为0为0则说明该站未发送。这个计算过程是选择题和计算题的常客务必亲手算几遍。4.2 随机访问MAC先听再说冲突了就退避在广播信道中更常见的是随机访问协议其特点是“竞争”用户随机发送可能冲突冲突后有一套解决机制。以太网的CSMA/CD和无线网的CSMA/CA是重中之重。载波监听多路访问/冲突检测CSMA/CD用于有线总线型以太网传统半双工。流程“先听后说边听边说”。载波监听发送前先监听信道是否空闲。空闲则立即发送忙则持续监听直到空闲然后等待一个随机时间再发送避免多个站同时发送。冲突检测发送过程中持续监听信道。如果检测到信号电压异常增大说明有冲突立即停止发送并发送一个强化冲突的干扰信号让所有站都知道发生了冲突。二进制指数退避冲突后等待一段随机时间再重试。退避时间 基本退避时间2τ即端到端往返时延乘以一个从[0, 1, ..., 2^k -1]中随机选取的数r其中k是冲突次数不超过10。冲突越多k越大随机范围越大重发等待时间可能越长从而降低再次冲突的概率。关键参数——争用期碰撞窗口2τ即信号在最远两个站点间往返一次的时间。帧的发送时延必须大于2τ才能保证在帧发送完毕前检测到冲突。这决定了以太网有最小帧长如64字节和最大网络半径的限制。载波监听多路访问/冲突避免CSMA/CA用于无线局域网Wi-Fi802.11。为什么无线不用CD无线环境中信号强度衰减大且存在“隐蔽站”问题A和C都听不到对方但都能和B通信A和C同时向B发送就会在B处冲突发送方自己很难检测到冲突。因此采用“冲突避免”。核心机制虚拟载波监听通过RTS/CTS帧预约信道。A想发数据给B先发一个短的控制帧RTSB收到后回复CTS。周围站点听到RTS或CTS就会在一段时间内保持沉默避免冲突。物理载波监听。冲突避免即使信道空闲发送前也要等待一个帧间间隔DIFS然后进入退避阶段。退避算法也是二进制指数退避但时间单位是时隙。确认机制每个数据帧都必须得到接收方的ACK确认否则认为丢失并重传。这是无线环境不可靠的补偿。5. 局域网与广域网链路层协议的实际化身理论最终要落地到协议。数据链路层的协议主要分为两大类局域网LAN协议和广域网WAN协议。5.1 局域网以太网与IEEE 802.3标准今天说到局域网几乎就等同于以太网。它的成功源于其简单、灵活和低成本。拓扑与演进从总线型同轴电缆CSMA/CD发展到星型集线器/交换机双绞线。星型拓扑中心设备的变化是关键集线器Hub是物理层设备所有端口在一个冲突域交换机Switch是数据链路层设备每个端口是一个独立的冲突域通过自学习算法构建MAC地址表实现帧的定向转发。以太网帧格式V2标准最常用必须熟记各字段长度和含义。前导码7字节帧开始定界符1字节10101011用于时钟同步。目的MAC地址 源MAC地址各6字节硬件地址全球唯一理论上。类型字段2字节指明上层协议如0x0800代表IPv40x86DD代表IPv6。数据字段46-1500字节承载IP数据报。最小46字节是为了满足CSMA/CD的最小帧长要求64字节减去18字节的首尾部。FCS4字节CRC校验码。MAC地址48位前24位是厂商标识OUI后24位由厂商分配。注意MAC地址是“平面”地址没有层次结构不适合大规模网络路由。5.2 广域网PPP与HDLC广域网协议负责在点对点的长途链路上传输数据。高级数据链路控制HDLC是ISO制定的标准是许多协议的基础。它采用零比特填充法实现透明传输帧格式包含标志字段、地址字段、控制字段、信息字段和FCS字段。但它在实际互联网中应用不广。点对点协议PPP这是考研绝对重点也是现实中拨号上网、路由器之间连接最常用的协议。它的设计哲学是“简单”。帧格式非常简洁。标志字段F0x7E、地址字段A固定为0xFF、控制字段C固定为0x03、协议字段指明信息部分是什么如0x0021是IP数据报、信息部分、FCS、标志字段F。透明传输同样使用零比特填充法因为信息部分是任意的二进制数据。工作状态图PPP链路建立、认证、网络层协议配置、数据传输、链路终止的过程是一个经典的有限状态机选择题常考。特别是链路控制协议LCP负责建立、配置、测试链路网络控制协议NCP负责为不同的网络层协议如IP建立连接。6. 链路层设备从冲突域到广播域的进化设备是协议的物理体现也是划分网络范围、提升网络性能的关键。网桥Bridge早期设备基于MAC地址过滤和转发帧可以连接两个不同的物理网段隔离冲突域。它通过自学习算法构建转发表记录帧的源MAC地址和进入的端口并设置老化时间。交换机Switch本质就是多端口网桥。每个端口是一个独立的冲突域。交换机通过硬件ASIC实现高速查表转发延迟极低。交换方式直通交换只读目的MAC地址就开始转发延迟最小但不进行差错检测。存储转发将整个帧缓存下来进行CRC校验无误后再转发。延迟较大但可靠性高是主流方式。广播域交换机所有端口仍在同一个广播域。广播帧目的MAC全F会被泛洪到所有端口。冲突域 vs. 广播域这是理解网络分层和设备的精髓。冲突域同一时间内只能有一台设备发送数据的网络范围。物理层设备中继器、集线器会扩大冲突域数据链路层设备网桥、交换机可以隔离冲突域。广播域广播帧能够到达的网络范围。数据链路层设备无法隔离广播域网络层设备路由器可以隔离广播域。一个经典的拓扑可以帮助理解假设一个集线器下连接了多台电脑这是一个冲突域用一台交换机替换这个集线器那么交换机的每个端口都是一个独立的冲突域但所有端口仍属于同一个广播域要隔离广播必须在中间加入路由器。7. 考研真题高频考点与避坑指南结合历年408真题和我的复习经验数据链路层有几个地方特别容易出错需要反复琢磨。1. CRC校验的计算与特性坑点误以为CRC能纠错。牢记CRC是检错码发现错误后直接丢弃帧。计算题给一个生成多项式G(x)如x^4 x 1对应二进制10011和一个数据M计算FCS。步骤必须清晰补0、模2除法、得余数。注意余数的位数比G(x)阶数少1。选择题问“以下哪种差错CRC检查不出来” 需要知道CRC能检查所有奇数位错、双比特错、以及突发长度≤r的错。对于更长的突发错误存在漏检概率。2. 滑动窗口协议中序号与窗口的关系停等协议序号0和1交替即可窗口大小均为1。GBN协议发送窗口W_T 1接收窗口W_R 1。序号空间至少为W_T 1否则无法区分新旧帧。例如若用3比特编号0~7则最大发送窗口为7。SR协议发送窗口W_T 1接收窗口W_R 1。必须满足 W_T W_R 2^nn为序号比特数。通常取 W_T W_R 2^(n-1)。这是选择题和计算题的高频考点务必自己推导几种边界情况。3. CSMA/CD的争用期与最小帧长公式推导最小帧长 争用期 × 数据传输速率。争用期 2 * 最大端到端时延。题目常给网络跨度、信号传播速度如200m/μs、数据率如1Gbps让你计算最小帧长。理解最小帧长限制是为了保证发送方在发完帧之前能检测到最远距离处发生的冲突。如果帧太短发完了都没检测到冲突就失去了冲突检测的意义。4. 以太网帧格式与MTUMTU最大传输单元1500字节指的是数据字段的最大长度。整个以太网帧最大是1518字节加上18字节的首尾部。最小帧长64字节包括14字节首部目的MAC6源MAC6类型2、46-1500字节数据、4字节FCS。当数据不足46字节时需要填充到46字节。类型字段 vs. IEEE 802.3的长度字段以太网V2用类型字段IEEE 802.3标准用长度字段。如何区分类型字段值大于15000x0600长度字段值小于等于1500。实际中V2格式占绝对主导。5. PPP协议的状态与字段协议字段0x0021是IP数据报0xC021是LCP数据0x8021是NCP数据。这个容易在选择题中混淆。透明传输PPP既支持面向字节的异步链路用字符填充也支持面向比特的同步链路用零比特填充。题目会说明链路类型。无重传机制PPP协议本身不提供可靠传输无序号、无确认可靠性交给上层如TCP。这点常与HDLC对比考察。复习这一章切忌死记硬背。最好的方法是自己画图画出发送窗口和接收窗口滑动的过程画出CSMA/CD检测到冲突的时间线画出PPP协议建立链路的序列图。把抽象的协议变成动态的过程理解就会深刻得多。数据链路层是构建网络可靠性的基石把这章吃透后面学习网络层的IP协议和传输层的TCP协议时你会感到前所未有的顺畅。
返回列表