数据链路层

官方信息技术老师·11 页·深入(追求细节与边界)·0 次浏览·3 天前
MAC协议差错控制流控机制帧封装

数据链路层

搞清帧、MAC、差错与流控每个机制为什么这样设计

按 空格/→ 演示下一步

1 / 11 页

全部页面点击任意一页,跳回舞台从这页播放

MAC协议差错控制流控机制帧封装

数据链路层

搞清帧、MAC、差错与流控每个机制为什么这样设计

1第 1 页 · 数据链路层

数据链路层概述

网络层用 IP 地址把数据从北京送到上海,但进了小区后怎么送到 3 栋 502?这最后一段接力,就是数据链路层在干的事。

层定位
OSI 第二层,物理层之上、网络层之下,负责同一链路上相邻节点的数据传输
帧封装
把网络层包加上 MAC 头和校验尾,封装成可在链路上传输的帧
MAC 地址寻址
48 位硬件地址,在同一广播域内定位下一跳物理设备
差错与流量控制
CRC 检错重传,滑动窗口等机制协调收发两端速率
典型协议
Ethernet、Wi-Fi(802.11)、PPP、HDLC 等覆盖有线与无线链路
小区内从单元门送到具体住户对应 →数据链路层的相邻节点传输

网络层是城市间邮路,数据链路层只在同一局域网内把数据送到正确的主机

2第 2 页 · 数据链路层概述

差错处理概述

上一页我们看到数据链路层把比特组装成帧,但物理信道上的噪声、干扰会让某些比特发生翻转——接收方怎么知道自己拿到的不是「原版」?差错处理正是为解决这一矛盾而生。

差错来源
物理信道受噪声、衰减、干扰影响,比特可能 0 变 1 或 1 变 0,无法彻底消除
差错检测
发送方附加冗余信息,接收方据此判断帧是否被破坏;能力有上限,并非所有错误都能查出
检错方法
奇偶校验最简、校验和次之、CRC 最强;以太网、Wi-Fi 等工业协议几乎都用 CRC
纠错两条路线
前向纠错 FEC 直接纠正;自动重传请求 ARQ 发现错误就重发,更省带宽
寄重要快递对应 →差错处理流程

路上可能压坏(差错来源)→ 附清单拍照(检错码)→ 签收核对发现异常让重发(ARQ)

BER=错误比特数总传输比特数BER = \dfrac{\text{错误比特数}}{\text{总传输比特数}}
3第 3 页 · 差错处理概述

纠1位错的海明码

上一节我们看到了差错处理的两条思路——检错与纠错。海明码正是纠错思路里最经典的方案:只多嵌几个校验位,就能精确定位出错的位。

校验位放位
放在编号 1、2、4、8… 这些 2 的幂次位上,其余位置放数据位
校验覆盖规则
第 2^k 位校验「编号二进制第 k 位为 1」的所有位(含自身)
伴随式 = 位号
校验失败的位号求和,结果就是出错位的编号,本身正好落在 1~n 之间
码距 3 的硬限制
最小码距为 3,能检 2 位错、纠 1 位错;出现 2 位错时会被「误纠」成另一个错
楼栋巡检员对应 →海明码的校验位

巡检员1查1/3/5/7号房,2查2/3/6/7号房…同时告警的编号相加,就是漏水的房号

Hamming(2r1,  2r1r),r2\text{Hamming}(2^r-1,\;2^r-1-r),\quad r\ge 2
4第 4 页 · 纠1位错的海明码

检错码

上一页的海明码能纠1位错,但冗余位代价不低。多数场景其实只需要'发现翻车',让发送方重传一次就行。这正是检错码的用武之地:在数据后追加校验位,接收方一查便知数据是否完好。

检错码
在数据后追加冗余比特,让接收方判断传输中是否出错
三种主流方案
奇偶校验最简单,校验和较通用,CRC基于多项式除法能力最强
工作流程
发送方按算法生成校验位,接收方用同样算法重算并比对
能力边界
只能检不能纠;漏检概率非零,与编码方式及冗余长度相关
典型应用
以太网帧尾CRC-32、Wi-Fi的FCS、磁盘与内存的校验
身份证末位校验码对应 →检错码

能识别号码抄错几位,但无法告诉你正确号码是多少

能检 s 位错dmins+1\text{能检 }s\text{ 位错} \Leftrightarrow d_{\min} \geq s + 1
5第 5 页 · 检错码

基本数据链路协议1~3

前面讲的差错处理、海明码、CRC 是「单帧工具」;链路层真正要解决的是一串帧怎么可靠送到对面。这就要靠三种基本数据链路协议——从最理想一步步逼近真实信道。

协议1·乌托邦单向
假设信道绝对可靠:发送方单向狂发,不等确认、不管错误、不限速率
协议2·无错停等
加 ACK 回执和超时重传:每发一帧就停下来等,丢了再补;假定收到的帧一定正确
协议3·有错停等
在协议2上加奇偶校验:发现错误帧回 NAK 让发送方重传那帧,处理位错
两人对话的几种模式对应 →协议1→2→3 三种数据链路协议

A自顾自说=协议1;加'嗯'确认=协议2;加'再说一遍'纠错=协议3

6第 6 页 · 基本数据链路协议1~3

滑动窗口协议

前页基本协议每发一帧就等一次确认,效率太低——像一次只寄一件快递。现实中一次寄一沓,签收回执陆续到达,「已发未确认」的帧集合就是窗口,它会随 ACK 到来而滑动。

发送窗口
发送方已发出但尚未确认的帧集合,大小为 N
接收窗口
接收方当前允许接收的序号范围,超出即丢弃
序号与 ACK
每帧带序号;确认可累计(GBN)也可逐帧(SR)
超时与重传
未按时 ACK 的帧触发重传,策略决定重发一个还是多个
快递员一次抱走多件包裹对应 →滑动窗口的流水线发送

包裹=帧;手中未签收件数=发送窗;每签收一件即可再装一件

Ws+Wr2n(SR 中发送窗+接收窗\le序号空间)W_s + W_r \le 2^n\quad\text{(SR 中发送窗+接收窗\le 序号空间)}
7第 7 页 · 滑动窗口协议

回退n帧

上一页滑动窗口让发送方一口气发多帧,但发出去后如果某一帧丢了怎么办?回退N帧给了一个简单粗暴的答案。

发送窗口N帧
发送方维持大小为N的窗口,可连续发多帧而无需等待
接收窗口1帧
接收方只接受按序帧,乱序到达直接丢弃,不缓存
累计确认
ACK(n)表示n号及之前所有帧都已收妥
出错回退
帧丢失/超时,从出错帧起重传所有已发未确认帧
序号约束
序号位数k决定窗口大小的上限
老师按学号发试卷对应 →回退N帧重传

3号没拿到就不知道4、5号情况,从3号起重新发

N2k1N \leq 2^k - 1
8第 8 页 · 回退n帧

选择性重传

选择性重传:定义、要点与典型应用

选择性重传
选择性重传:定义、要点与典型应用
9第 9 页 · 选择性重传

本节要点

  • 链路层的全部难题:把不可靠的物理链路封装成可靠的逻辑信道
  • 检错码冗余少、纠错码冗余多——可靠性是用带宽换来的
  • 滑动窗口三件套:序号、发送缓存、接收窗口,缺一不可
  • GBN 与 SR 的根本差别:接收窗口是 1 还是 >1
  • 序号空间硬约束:GBN≥窗口+1,SR≥2×窗口
延伸主题:MAC 子层与多路访问协议PPP 协议与现实链路链路层与网络层的衔接
10第 10 页 · 本节要点

课后思考

先自己琢磨五分钟,再看参考答案——思考比答案本身更重要。

1为什么海明码要设计成'纠1位错'而不是直接纠多位错?纠错能力越强一定越好吗?

参考答案纠错能力越强,校验位占比越大。海明码纠1位错时,2^r ≥ m+r+1 取得平衡;纠多位会迅速让冗余膨胀,不划算。

2带宽充足但误码率高的链路上,应该用回退N帧还是选择性重传?为什么?

参考答案高误码率意味着丢帧多。回退N帧会重传大量已正确接收的帧,浪费带宽;选择性重传只重传丢失的帧,但接收方需更大缓存。

3如果让你把滑动窗口机制搬到一条延迟极高但带宽极宽的卫星链路上,窗口大小该怎么选?

参考答案带宽×延迟很大(带宽时延积大),窗口必须足够大才能'灌满'链路;小窗口会让链路闲置,吞吐上不去。

11第 11 页 · 课后思考