跳转至

差错检测与介质访问

为什么链路层还要检错

信号会受噪声、衰减和干扰影响,硬件也可能产生瞬态错误。传输层已有校验和,并不意味着链路层校验多余:链路层可以在一跳结束时尽早丢弃损坏帧,某些链路还能本地重传,避免错误跨越整条路径后才被端点发现。

不同层的校验覆盖范围不同。以太网 FCS 保护一帧,IP 或传输校验保护相应首部或端到端数据。多层检测会增加少量开销,却能在不同故障边界提供证据。

从奇偶校验到 CRC

奇偶校验

发送方增加一个比特,使全部 1 的数量为偶数。单比特翻转一定改变奇偶性,因此可检测;两个比特同时翻转可能逃过检测。二维奇偶校验能定位并纠正部分单比特错误,但突发错误能力有限。

Internet 校验和

把数据按固定宽度字相加,并对结果取反。TCP、UDP 和 IPv4 首部使用相关思想。它实现简单、软件友好,但对某些有结构的多比特变化检测能力弱于 CRC。

循环冗余校验

CRC 把比特串视为二进制多项式。发送方选择生成多项式 \(G\),在数据 \(D\) 后补 \(r\) 个零并求模 2 除法余数:

\[ R=(D\cdot 2^r)\bmod G. \]

\(R\) 附在数据后,接收方用同一 \(G\) 检查。设计良好的生成多项式能检测所有单比特错误、许多多比特错误以及一定长度内的突发错误,且适合硬件流水线。

CRC 不是密码学完整性保护。攻击者若能修改数据,也能重新计算 CRC;TLS 使用带密钥的认证加密来对抗主动篡改。

检测、纠错与重传

发现错误后有两条路线:

  • 自动重传 ARQ:请求或自行重发,适合双向链路和可接受 RTT 的场景。
  • 前向纠错 FEC:发送额外冗余,使接收方无需重传即可恢复部分错误,适合卫星、实时媒体或多播。

FEC 用额外带宽和编码计算换取低恢复时延;ARQ 平时冗余少,但丢失后至少等待一次反馈。实际系统可以混合使用。所谓“纠错能力更强”没有免费午餐,必须付出码率、延迟或计算代价。

共享信道为什么需要 MAC 协议

多个节点共享一个广播信道,若同时发送,信号可能冲突。理想协议希望:只有一个活跃节点时独享速率,多个节点时公平共享,且不依赖脆弱的中心协调。

信道划分

时分、频分或码分把资源预先切开。负载稳定时可预测且冲突少;节点空闲时,它的份额可能浪费。传统蜂窝和多种无线系统会使用更复杂的集中调度。

随机接入

节点有数据就尝试发送,冲突后随机退避。低负载下响应快,负载高时冲突和退避开销增加。ALOHA 展示了最简思想,CSMA 在发送前先监听信道。

早期共享总线以太网使用 CSMA/CD:边发边检测碰撞,发现后停止并退避。现代全双工交换式以太网把每个端口变成独立链路,正常情况下不再发生这种碰撞,但历史术语仍常见。

轮流接入

轮询或令牌让节点轮流获得发送权,公平且高负载效率好;控制节点故障、令牌丢失和低负载等待是代价。

Wi-Fi 为什么强调避免碰撞

无线终端发送时自己的信号远强于接收到的远端信号,很难像有线介质那样可靠边发边检测。不同终端还可能彼此听不到,却都能干扰同一接入点,这叫隐藏终端问题。

Wi-Fi 采用 CSMA/CA 思想:监听、随机退避、发送后等待链路层 ACK;必要时可用 RTS/CTS 预留信道。RTS/CTS 增加控制开销,只在潜在冲突代价较高时更有价值。

一个负载权衡例子

十个终端每秒只偶尔发送一个短帧时,固定时分会让大部分时隙空闲,随机接入更灵活。若十个终端持续满负荷,频繁竞争会浪费空口,集中调度更可预测。因此 MAC 设计依赖流量突发性、节点数量、能耗和信道质量。

自测

一个帧通过 CRC 校验,能否证明它一定来自合法发送方?

不能。CRC 只提供非恶意差错检测,任何人都能重新计算。来源认证需要带密钥的 MAC 或数字签名等密码学机制。