破天荒想写点学习笔记,实则是数据跑太慢了,找事情打发时间,简单记录一下两周的计算机网络学习内容。

这份笔记按“先理解在解决什么问题,再记概念和公式”的顺序整理。后面补充的是物理层与数据链路层的常见基础内容,具体考试范围还是以老师讲授和教材为准。

阅读导航:

开始之前:先把分层这件事理顺

首先明确一点: 计算机网络并不是只有一种分层方式。 OSI 参考模型分为七层,TCP/IP 体系结构通常按四层描述,而课程中常用的是方便讲解的五层模型。

这里统一采用五层模型,从上到下是:

应用层       应用程序之间交换信息
运输层       为应用进程之间的通信提供服务,也常称“传输层”
网络层       让分组能够跨越不同网络到达目的地
数据链路层   在一段链路上组织和传送帧
物理层       通过实际信号传输比特流

通过老师讲的例子,计算机网络可以类比快递的实现。发送方把应用数据逐层交给下一层,下层根据需要添加控制信息,这个过程叫 封装 ;接收方反过来逐层处理,这个过程叫 解封装

不过,“一层一层贴 tag”只是帮助理解的比喻:不是每层都一定添加同样形式的首部,物理层主要负责把比特表示成可传输的信号。

接下来记录物理层与数据链路层。 话说为什么我们从下往上学,好多网课都是从上往下,hyw。


一、物理层

1. 物理层负责什么

计算机中的数据可以表示成 0 和 1,但网线、光纤和无线空间并不能直接传输抽象的数字,需要把它们转换成实际信号。

传输介质传输的信号
双绞线等铜缆电信号
光纤光信号
无线空间电磁波信号

通信过程可以简化为:

发送方的比特 → 转换为信号 → 经过传输介质 → 接收方恢复比特

物理层解决的是: 怎样在传输介质上传输比特流。 它通常不关心这些比特是聊天消息、图片,还是视频。

2. 物理层接口的四个特性

物理层不仅涉及信号,也规定通信设备与传输介质之间的接口。

特性规定什么直观例子
机械特性接口的形状、尺寸、引脚数量等插头是什么形状
电气特性电压、阻抗等电气参数什么电平表示什么状态
功能特性各条线路或引脚的功能哪个引脚负责发送
过程特性各种操作的步骤和顺序怎样建立、进行和结束传输

可以记成: 长什么样、用什么信号、各部分做什么、按什么顺序操作。

3. 数据、信号和码元

  • 数据 :需要传递的信息。
  • 信号 :数据在传输过程中的物理表现。
  • 码元 :数字通信中,在一个符号时间内发送的基本信号单位。

信号可以分为下面两类。信号与系统还在追我。

类型特点
模拟信号表示信息的参数连续变化
数字信号使用有限种、可区分的信号状态表示信息

一个码元不一定只表示一个比特。 例如,规定四种可区分的信号状态:

状态 A → 00
状态 B → 01
状态 C → 10
状态 D → 11

选择其中一种状态,就能够表示一组 2 比特的数据。因此,在每个码元有 MM 种可选状态、直接映射等长比特组的情况下:

每个码元携带的比特数=log2M \text{每个码元携带的比特数}=\log_2 M

这里通常假设 MM 是 2 的整数次幂。比如两种状态对应 1 比特,四种状态对应 2 比特,八种状态对应 3 比特。

4. 波特率与比特率【重点】

名称含义单位
码元速率,也叫波特率每秒传输多少个码元Baud,波特
比特率每秒传输多少个比特bit/s,也写作 bps

在上述映射条件下,设码元速率为 RsR_s,比特率为 RbR_b

Rb=Rslog2M R_b=R_s\log_2 M

例如,码元速率为 2,000 Baud,每个码元有 4 种状态:

Rb=2,000×log24=4,000 bit/s R_b=2{,}000\times\log_2 4=4{,}000\ \text{bit/s}

波特率数的是码元,比特率数的是比特,二者不能直接画等号。 而且线路比特率也不等于应用实际可用的数据速率,还可能包含编码和协议开销。

顺手记一个单位:1 B=8 bit1\ \text{B}=8\ \text{bit}。大写 B 是字节,小写 b 是比特。网络速率中的 k、M、G 通常按十进制计算,例如 1 Mbit/s=106 bit/s1\ \text{Mbit/s}=10^6\ \text{bit/s}

5. 单工、半双工与全双工

这三个概念描述通信方向:

方式含义例子
单工只能沿一个方向传输传统广播
半双工双方都能发送,但不能同时发送对讲机
全双工双方可以同时发送与接收常见的现代交换式以太网链路

“双向”不一定等于“全双工”,还要看能不能同时进行。

6. 编码与调制

两者都在解决“怎样用信号表示数据”,处理方式不同:

  • 基带编码 :将数据映射成适合直接传输的基带信号。
  • 调制 :让数据控制载波的某些参数,形成适合信道传输的信号。

常见的基带编码:

编码方式核心特点
不归零编码 NRZ常见形式用不同电平表示数据,长时间不跳变时可能不利于同步
曼彻斯特编码每个比特中间都有跳变,可以提供时钟信息;用中间跳变的方向区分比特
差分曼彻斯特编码比特中间有跳变,用比特开始处是否跳变区分比特

画编码波形时,要先看题目对 0、1 的具体约定。 不要只背“向上跳变就是 1”,不同约定可能相反。

常见的调制方式:

方式改变载波的什么参数
ASK,振幅键控振幅
FSK,频移键控频率
PSK,相移键控相位
QAM,正交振幅调制结合振幅与相位的变化

同步可以直观理解为:接收方需要知道“什么时候读一个符号”,否则即使收到了信号,也可能把相邻数据的边界读错。

7. 为什么传输速率不能无限提高【重点】

实际信道会受到多种限制:

  • 衰减 :信号在传播过程中变弱。
  • 失真 :不同频率成分受到的影响不同,使波形发生变化。
  • 噪声与干扰 :额外信号影响接收判断。
  • 带宽有限 :信道只能有效通过一定频率范围的信号。

发送得过快时,相邻码元可能相互影响,出现 码间串扰 。教材中通常用两个公式说明速率限制。

7.1 奈氏准则:理想情况下,码元也不能无限密集

对于带宽为 WW Hz 的理想低通信道,在无码间串扰的条件下,最高码元速率为:

Rs,max=2W R_{s,\max}=2W

如果每个码元有 MM 种可区分状态,对应的最高比特率为:

Rb,max=2Wlog2M R_{b,\max}=2W\log_2 M

例如,W=3,000 HzW=3{,}000\ \text{Hz}M=4M=4

Rb,max=2×3,000×2=12,000 bit/s R_{b,\max}=2\times3{,}000\times2=12{,}000\ \text{bit/s}

这里能看出两种提高比特率的思路:增加信道带宽,或者让一个码元携带更多比特。

但是,信号状态越多,接收方越难区分相邻状态。真实环境有噪声,所以不能靠无限增加 MM 来无限提高速率。

这里使用的是教材常见的理想低通信道模型,不能把“最高码元速率为 2W2W”不加条件地套到所有信道上。

7.2 香农公式:有噪声时,可靠传输存在容量上限

对于带宽受限、具有加性白高斯噪声的信道,容量为:

C=Wlog2(1+SN) C=W\log_2\left(1+\frac{S}{N}\right)
符号含义单位或要求
CC信道容量bit/s
WW信道带宽Hz
SS接收端信号的平均功率NN 使用同一单位
NN噪声的平均功率SS 使用同一单位
S/NS/N信噪比无量纲的功率比

公式里代入的是功率比,不能直接把 dB 数值塞进去。

SNRdB=10log10(SN) \mathrm{SNR}_{\mathrm{dB}}=10\log_{10}\left(\frac{S}{N}\right)
SN=10SNRdB/10 \frac{S}{N}=10^{\mathrm{SNR}_{\mathrm{dB}}/10}

例如,带宽为 3,000 Hz,信噪比为 30 dB:

SN=1030/10=1,000 \frac{S}{N}=10^{30/10}=1{,}000
C=3,000log2(1+1,000)29,902 bit/s C=3{,}000\log_2(1+1{,}000)\approx29{,}902\ \text{bit/s}

也就是约 29.9 kbit/s。

这个容量表示理论上的可靠通信速率边界:在相应模型下,低于容量并采用合适编码,误码率可以做到任意小; 不是说随便一种设备都能达到这个速率,更不是说传输天然零误码。

7.3 两个公式怎么区分

对比项奈氏准则的上述表达香农公式
主要关注带宽限制下的码元速率,以及每个码元承载的信息量带宽和噪声共同决定的信道容量
需要的量带宽 WW、状态数 MM带宽 WW、信噪比 S/NS/N
提醒注意理想低通信道、无码间串扰等条件注意 dB 要先换成功率比

若一道题同时给出这些条件,并要求在这两类限制下估算上限,应分别计算,结果不能超过其中较小的限制。两个天花板,撞到哪个都上不去。

8. 带宽、速率和吞吐量别混在一起

“带宽”这个词在不同语境里有两种常见用法:

概念含义常见单位
信号或信道的频率带宽有效频率范围的宽度Hz
网络中的“带宽”通常指链路的数据传输能力bit/s
吞吐量某段时间内实际通过的数据量与时间之比bit/s
有效吞吐量实际交付的有效业务数据速率,不计重复数据及相应开销bit/s

比如“100 Mbit/s 的网口”描述的是速率;“3,000 Hz 的信道带宽”描述的是频率范围。二者不能直接比较大小。

链路标称速率高,也不代表下载一定快:还可能受其他链路、服务器、协议开销和拥塞影响。

9. 常见传输介质

介质基本特点理解要点
双绞线将铜线成对绞合,减轻干扰和串扰常见以太网网线采用这种结构
同轴电缆内导体与外部屏蔽层同轴排列曾用于早期共享式以太网,也用于其他通信系统
光纤用光传输,抗电磁干扰,适合较高带宽和较长距离的应用常见分类有单模和多模
无线介质通过空间传播电磁波使用灵活,但受遮挡、干扰和共享信道影响

单模、多模中的“模”,说的是光在光纤中的传播模式, 不是单工、全双工中的那个“单”。

顺带区分: 介质 是信号传播所依赖的物理载体, 信道 是通信所使用的传输通道。同一介质可以通过复用承载多个信道。

10. 信道复用:一条传输资源怎么给多人用

如果每两台设备都单独铺设一条线路,成本会很高。复用的思路就是:让多个通信共享传输资源,再用某种规则把它们区分开。

方式怎么区分不同通信直观理解
频分复用 FDM使用不同频段同一时间,各走不同车道
时分复用 TDM使用不同时间片同一条车道,按固定时隙轮流走
统计时分复用 STDM根据实际需求动态分配时间资源有数据的人再获得发送机会
波分复用 WDM光纤中使用不同波长光通信中的频分思路
码分复用 CDM使用可区分的码序列用不同的编码区分同时传输的信息

固定时分复用中,某个用户没数据时,分给它的时隙可能空着;统计时分复用可以改善这种浪费,但需要额外标识和调度。

码分多址 CDMA 的入门理解是:发送端用自己的码片序列表示数据,接收端通过相关运算提取对应信号。在理想的同步正交模型里,不同用户的码序列内积为 0;实际无线环境还要考虑同步、功率和干扰。

11. 发送时延和传播时延【重点】

这部分属于网络基础性能知识,放在这里是因为它和物理传输关系很近。

发送时延 :把整段数据的所有比特推上链路,需要多久?

设数据长度为 LL bit,发送速率为 RR bit/s:

t发送=LR t_{\text{发送}}=\frac{L}{R}

传播时延 :一个比特对应的信号从链路一端传播到另一端,需要多久?

设链路长度为 dd m,传播速度为 vv m/s:

t传播=dv t_{\text{传播}}=\frac{d}{v}

例如,发送 1,000 B 数据,速率为 8 Mbit/s;链路长 200 km,传播速度取 2×108 m/s2\times10^8\ \text{m/s}

t发送=1,000×88×106=1 ms t_{\text{发送}}=\frac{1{,}000\times8}{8\times10^6}=1\ \text{ms}
t传播=200×1032×108=1 ms t_{\text{传播}}=\frac{200\times10^3}{2\times10^8}=1\ \text{ms}

忽略其他因素,从开始发送到最后一个比特到达,共需要 2 ms。

这里并不是先把整帧发完,信号才开始传播: 发送与传播会重叠发生。 最先发出的比特,早就在路上了。

实际还可能有:

  • 处理时延 :设备检查、查表等处理消耗的时间。
  • 排队时延 :数据等待发送机会的时间,拥塞时可能显著增加。

多跳传输中,要按经过的链路和设备计算相应时延。如果设备采用存储转发,还需要考虑收完一帧后才开始下一跳转发的影响。

提高发送速率,会缩短发送时延;在介质与距离不变时,并不会按同样比例缩短传播时延。

时延带宽积也可以顺手记一下:

单向链路的时延带宽积=R×t传播 \text{单向链路的时延带宽积}=R\times t_{\text{传播}}

单位是 bit,可以理解为链路连续发送时,已经进入链路、还没传播到另一端的比特量。后面讨论端到端窗口时,也会用 R×RTTR\times\mathrm{RTT} 衡量一个往返周期内能发送的数据量,要看题目采用哪一种时延。

12. 中继器与集线器

设备主要工作是否根据 MAC 地址选择转发方向
中继器对信号进行再生、整形等处理,延伸传输距离
集线器 Hub可以理解为多端口中继器,将收到的信号向其他端口重复发送

在传统共享式以太网中,集线器连接的主机共享传输资源,处于同一个冲突域。它不会先检查“这帧到底发给谁”,再有选择地发出去。

这就引出了下一层: 只有传输比特的能力,还不够组织好通信。


二、数据链路层

1. 从比特流到帧:这一层多做了什么

物理层让接收方收到一串比特,但只看到连续的 0 和 1,还会遇到这些问题:

  • 一段数据从哪里开始、在哪里结束?
  • 怎样判断传输中有没有发生差错?
  • 多台设备共享介质时,谁可以发送?
  • 在以太网这类网络中,怎样识别帧的接收者?

数据链路层把数据组织成 帧(Frame) ,结合具体协议处理这些问题。

发送方:网络层分组 → 封装成帧 → 转换为比特和信号
接收方:接收信号与比特 → 识别并检查帧 → 取出网络层分组

链路 是连接相邻节点的通信路径; 数据链路 是在链路基础上,加上实现通信协议所需的控制机制。

这里的“相邻”是网络通信关系上的相邻,不意味着两台设备必须摆在一起。跨越多个网络到达远方主机的整体问题,还需要后面的网络层参与。

2. 链路层常见的几个任务

任务要解决的问题
封装成帧如何划分和识别数据边界
透明传输数据内容碰巧像控制标记时,怎样避免误识别
差错检测怎样发现帧在传输中被破坏
媒体接入控制共享介质上,多个设备怎样协调发送
按协议提供流量控制、可靠传输等能力怎样避免接收方来不及处理,以及应对丢失、重复等问题

这些不是每一种链路层协议都完整提供的功能清单。 例如,以太网有检错机制,但普通以太网 MAC 不会为每个数据帧执行确认与重传;Wi-Fi 则对许多单播帧提供链路层确认与重试。

3. 封装成帧

概念上,一帧可以表示为:

┌──────────┬───────────────────┬──────────┐
│  帧首部  │  数据部分/有效载荷  │  帧尾部  │
└──────────┴───────────────────┴──────────┘

帧首部可能包含地址、类型或控制信息,帧尾部可能包含检错信息。 具体字段取决于协议,并不是所有帧都长得一样。

常见成帧思路有:

方法基本思路需要注意
长度字段或字符计数用长度信息帮助确定边界长度字段出错可能影响后续识别
特殊字符或字节定界用约定标记表示开始、结束数据中的同类标记需要转义
特殊比特串定界用约定的比特模式标记边界需要比特填充等机制
编码违例等物理层机制利用正常数据不会使用的信号模式依赖具体编码和协议

不要误以为所有链路层协议都靠同一对“开始字符、结束字符”识别帧。

4. 透明传输:数据里也有分隔符怎么办

假设协议用某个标记表示“帧结束”,而一张图片的数据里恰好出现相同内容,接收方就可能提前截断。

透明传输 要保证:数据中允许出现任意内容,不会因为碰巧像控制标记而被错误解释。它和“加密、让别人看不懂”没有关系。

4.1 字节填充

碰到特殊字节时,在前面加转义字节,或者按约定进行替换;接收端执行逆操作,恢复原数据。

以 PPP 的字节转义规则为例:

数据中的 0x7E → 发送为 0x7D 0x5E
数据中的 0x7D → 发送为 0x7D 0x5D

其中 0x7E 用作帧标志,0x7D 是转义字节;还可能根据配置转义其他控制字符。规则见 RFC 1662:PPP 成帧与透明传输

4.2 比特填充

在使用 01111110 作为标志的相应比特定界协议中,发送端对标志之间的内容进行处理: 连续遇到 5 个 1,就插入一个 0。

原始内容:111111
填充之后:1111101
分组理解:11111 | 0(插入)| 1(原第六位)

上图的关键是顺序:前五个 1、插入的 0、原来的第六个 1。接收端在对应位置删除填入的 0,恢复原内容。帧边界标志本身不参与这个填充过程。

5. 差错检测:怎样知道数据可能传错了【重点】

传输中,0 可能变成 1,1 也可能变成 0,这叫 比特差错 。还可能发生整帧丢失、重复等情况,不能全部靠一次校验解决。

检错的基本思路是:发送端根据数据计算冗余信息,一起发送;接收端用相同规则检查数据与冗余信息是否一致。

5.1 奇偶校验

以偶校验为例:增加一个校验位,使整个比特串中 1 的数量为偶数。

数据:1011,其中有 3 个 1
校验位:1
发送:10111,共有 4 个 1

如果传输中翻转了奇数个比特,奇偶性就会改变,能够被检测出来;如果翻转了偶数个比特,单个奇偶校验位就不能检出。

5.2 循环冗余检验 CRC

CRC 可以理解为:把比特串当成二进制多项式的系数,用双方约定的生成多项式做模 2 除法,把余数作为检错信息。

初学时先记操作步骤:

  1. 设生成多项式的最高次数为 rr,对应二进制除数有 r+1r+1 位。
  2. 在待发送数据后补 rr 个 0。
  3. 用约定除数进行模 2 除法。
  4. 将得到的 rr 位余数附在原始数据后面。
  5. 接收端用同一除数检查收到的比特串。

模 2 加减都等价于 按位异或 ,没有进位,也没有借位:

0 ⊕ 0 = 0       0 ⊕ 1 = 1
1 ⊕ 0 = 1       1 ⊕ 1 = 0

一个小例子,数据为 1101,除数为 1011,所以 r=3r=3

原始数据:      1101
补 3 个 0:    1101000
模 2 除法余数:001
最终发送:     1101001

上面求余数时,每次将除数的最高位与当前余数的最高位对齐,再异或:

  1101000
⊕ 1011000
---------
  0110000
⊕ 0101100
---------
  0011100
⊕ 0010110
---------
  0001010
⊕ 0001011
---------
  0000001  → 取低 3 位,余数为 001

在这个简化教材算法中,接收端计算 1101001 ÷ 1011,余数应为 000;余数非零说明检测到了差错。

余数为零,只能说明没有检测到差错,不能保证数据绝对正确。 某些错误模式仍可能漏检;具体检错能力与生成多项式等条件有关。

实际协议中的 CRC 还可能规定初始值、位序和最终异或等细节,不能把上面的简化计算直接当作所有协议的实现。

CRC 是计算方法,FCS(帧检验序列)是帧中存放检错结果的字段。 二者不是同一层面的概念。

5.3 检错与纠错不是一回事

方式基本目的例子
检错发现数据可能出错奇偶校验、CRC
纠错利用冗余信息恢复一定范围内的错误汉明码等纠错码
检错后重传检测异常后重新发送ARQ 机制

若教材讲到汉明码,单比特纠错的一个基础关系是:

2rm+r+1 2^r\ge m+r+1

其中 mm 是数据位数,rr 是校验位数。右边包含 m+rm+r 种单比特出错位置和 1 种无错情况。例如 4 个数据位可以配 3 个校验位,形成常见的 (7,4)(7,4) 汉明码。

普通单错纠正汉明码不能保证同时安全地区分所有双比特错误;常见的扩展汉明码增加整体奇偶校验,提供单错纠正、双错检测能力。

6. 可靠传输:帧没到怎么办

先区分两个概念:

  • 差错检测 :检查收到的帧是否可能损坏。
  • 可靠传输机制 :进一步处理丢失、重复等问题,在协议假设和重试策略范围内完成正确交付。

检测出一个坏帧并将其丢弃,还没有解决“这份数据最后到底有没有送到”的问题。

常见机制包括:

机制作用
确认 ACK接收方告知发送方,某些数据已成功收到
超时重传等待过久没收到预期确认,再次发送
序号区分新数据与重复数据
缓存在需要时保存待确认数据或乱序数据

利用确认和重传实现差错恢复,通常称为 ARQ,自动重传请求 。不要把名称理解成“必须由接收方显式请求,发送方才能重传”,超时也可以触发重传。

7. 停止等待协议【重点】

最容易理解的可靠传输方式是: 发送一帧,等确认;确认收到,再发下一帧。

发送方                         接收方
  │ ─────── 数据帧 0 ─────────→ │
  │ ←──────── ACK ─────────── │
  │ ─────── 数据帧 1 ─────────→ │
  │ ←──────── ACK ─────────── │

如果数据帧丢失,发送方收不到确认,超时后重传。

更容易忽略的是: 数据帧成功到达,但 ACK 丢了。 发送方也会重传,此时接收方必须识别重复帧,不能把相同数据再向上交付一次,还应再次发送确认。

因此需要序号。经典的交替位停止等待协议使用 0、1 交替编号;这个做法依赖相应的链路和帧寿命假设,不代表现实网络中可以让任意旧帧无限存活。

停止等待为什么效率可能很低

忽略 ACK 的发送时间、处理时间及差错,若一帧发送时间为 tft_f,往返传播时间为 RTT\mathrm{RTT},发送方用于发送数据的时间比例约为:

U=tftf+RTT U=\frac{t_f}{t_f+\mathrm{RTT}}

这里的 RTT 不包含本公式单独列出的数据帧发送时间 ;做题时要看题目如何定义。

例如,发一帧只需 1 ms,但等待往返传播需要 20 ms:

U=11+204.76% U=\frac{1}{1+20}\approx4.76\%

大多数时间都在等确认。网速挺快,但一直在等“收到”。

8. 滑动窗口、GBN 与 SR【重点】

提高效率的一种办法是: 允许发送方在等待确认期间,连续发送多帧。

发送窗口规定当前允许发送、但尚未完成确认的序号范围。收到确认后,窗口向前移动,让新的帧获得发送资格。

对比项停止等待回退 N 帧 GBN选择重传 SR
发送窗口1可以大于 1可以大于 1
接收乱序帧通常不保留经典形式丢弃乱序帧缓存接收窗口内的正确乱序帧
确认方式逐帧确认通常累计确认通常分别确认
典型超时后的处理重传当前帧从最早未确认帧起,重传后续已发送未确认帧重传对应的未确认帧
实现复杂度较低较高

例如,依次发送 0、1、2、3,其中帧 1 丢失:

  • GBN :接收方仍在等待 1,经典实现会丢弃后到的 2、3;发送方之后重传 1、2、3。
  • SR :接收方可以先缓存 2、3;发送方补发 1 后,接收方再按顺序交付这些数据。

采用 kk 位循环序号时,经典模型中的窗口限制是:

GBN:Ws2k1,Wr=1 \text{GBN:}\quad W_s\le2^k-1,\qquad W_r=1
SR:Ws+Wr2k \text{SR:}\quad W_s+W_r\le2^k

若 SR 的收发窗口大小相等,均为 WW

W2k1 W\le2^{k-1}

限制窗口大小,是为了避免序号循环使用后,旧帧被误认为新帧。

不同教材对 ACK 数字的约定可能不同:有的表示“已收到几号”,有的表示“下一个期待几号”。 看时序图前先确认约定。

9. 流量控制与拥塞控制别混淆

概念主要关注直观理解
流量控制接收方是否来得及接收和处理对方吃不下,发送方慢一点
拥塞控制网络中的链路、队列等资源是否过载路已经堵了,需要控制进入网络的流量

停止等待和滑动窗口可以参与流量控制。拥塞控制会在后续章节进一步学习,不能把“接收方忙”和“中间网络堵”当成同一件事。

10. 共享介质上,谁先发送

点对点链路只有两端,通信关系相对简单;共享介质可能同时连接多台设备,需要协调发送机会。

媒体接入控制通常简称 MAC,Medium Access Control 。这里的 MAC 是一类控制机制的名字;后面的 MAC 地址是这一层使用的地址,别把两个概念完全等同。

思路代表方式怎么分配机会
划分信道频分、时分、码分等预先或按规则划分资源
随机接入ALOHA、CSMA 等各节点按规则竞争,发生冲突后再处理
轮流接入轮询、令牌传递被选中或拿到令牌后发送

复用和多址接入都涉及共享资源,但观察角度不同:复用强调合并和分离多路信号,多址接入强调多个设备怎样使用共享信道。

CSMA 是“载波监听多路访问”: 先听一听介质上是否有人发送,再决定是否发送。 但先听并不能保证无冲突,因为信号传播需要时间。

11. 传统以太网的 CSMA/CD【重点】

CSMA/CD 是“载波监听多路访问 / 碰撞检测”,用于传统共享式、半双工以太网。

核心过程:

  1. 发送前监听介质。
  2. 介质忙就等待,空闲并满足协议规定的间隔后开始发送。
  3. 发送时继续检测是否发生碰撞。
  4. 检测到碰撞后发送强化碰撞的信号,并停止此次发送。
  5. 随机退避一段时间,再按规则重试。

为什么先听了,还是会撞

A ───────────────────────── B
       信号传播需要时间

A 开始发送时,信号尚未到达 B。B 此时监听到的仍可能是空闲,也开始发送,于是发生碰撞。

为什么和最短帧长有关

设网络两端的单向最大传播时延为 τ\tau。在简化模型中,发送方最坏可能在约 2τ2\tau 后才发现碰撞,因此发送时间需要满足:

LminR2τ \frac{L_{\min}}{R}\ge2\tau

即:

Lmin2τR L_{\min}\ge2\tau R

否则帧太短,发送方早已发完,碰撞影响才传回来,就不能按预期在发送期间检测它。

经典 10/100 Mbit/s 半双工以太网采用 512 比特时间的时隙,与 64 B 最小 MAC 帧长度相联系;不要把这一细节直接推广到所有以太网物理层。

二进制指数退避

碰撞次数增加时,扩大随机等待的选择范围,降低再次同时发送的概率。经典算法中,第 nn 次碰撞后,令 k=min(n,10)k=\min(n,10),从 002k12^k-1 中随机选整数,乘以时隙长度作为退避时间;同一帧连续发生 16 次碰撞后放弃此次发送。

常见的现代交换式全双工以太网不运行 CSMA/CD。 学习它主要是理解共享介质、传播时延和历史以太网的设计关系。

12. 无线局域网为什么采用 CSMA/CA

无线设备发送时,自身信号往往很强,不容易像有线共享以太网那样同时可靠地检测碰撞。此外,还存在 隐藏站问题

A 能听见 AP,C 也能听见 AP
但 A 和 C 互相听不见

A ───── AP ───── C

A 和 C 都可能认为信道空闲,却同时向 AP 发送,导致接收端受到干扰。

Wi-Fi 常见的竞争接入机制采用 CSMA/CA:载波监听多路访问 / 碰撞避免 ,结合监听、帧间间隔、随机退避等机制减少冲突,并对许多单播帧使用确认和重试。

可选的 RTS/CTS 交互可以帮助缓解隐藏站问题,但有额外开销,也不能消除所有冲突。

机制关注点常见场景
CSMA/CD发送时检测碰撞,发生后停止并退避传统共享式半双工以太网
CSMA/CA通过规则降低碰撞概率,并结合反馈判断是否成功无线局域网中的常见竞争接入

“碰撞避免”不是“保证绝不碰撞”,而且现代 Wi-Fi 还包含其他调度和接入机制,不能只用这四个字母概括全部行为。

13. MAC 地址与以太网帧【重点】

13.1 MAC 地址是什么

以太网中常见的 MAC 地址长 48 bit,也就是 6 B,通常写成六组十六进制数:

02:1A:2B:3C:4D:5E

它用于链路层通信中的接口标识。 MAC 地址不一定永远不变,也不能简单理解成“一台电脑一生只有一个身份证”。 设备可以有多个网络接口,地址也可能由软件配置或随机化。

类型含义
单播地址面向一个接收接口
组播地址面向一组接收者
广播地址面向当前广播域内的所有站点;以太网广播地址为 FF:FF:FF:FF:FF:FF

按通常的十六进制显示方式,首字节最低位为 0 表示单播,为 1 表示组地址;广播地址是特殊的组地址。先记住这些基本分类就够了。

13.2 常见的 Ethernet II 帧格式

未携带 VLAN 标签的常见 Ethernet II 帧 为例:

字段长度作用
目的 MAC 地址6 B指定接收者
源 MAC 地址6 B标识发送接口
类型 EtherType2 B指明载荷属于哪一种上层协议
数据与必要填充46~1,500 B携带上层数据,不足最小长度时填充
FCS4 B检测帧传输差错

由此计算:

最小帧长=6+6+2+46+4=64 B \text{最小帧长}=6+6+2+46+4=64\ \text{B}
通常的最大帧长=6+6+2+1,500+4=1,518 B \text{通常的最大帧长}=6+6+2+1{,}500+4=1{,}518\ \text{B}

这里从目的地址算到 FCS, 不包括前导码、帧开始定界符,也不包括帧间间隔 。带 VLAN 标签或使用其他扩展时,应按对应格式另算。

基本无标签帧的 64 B、1,518 B 边界,也可对照 IEEE 802.3 帧格式工作组资料中的基本帧尺寸表。

常见以太网 MTU 为 1,500 B,指这里可承载的上层分组大小上限,不能把它当成整个以太网帧长。关于 IP 在以太网中的承载与填充,可参见 RFC 894

另外,IEEE 802.3 中相应的两字节字段还存在长度解释方式;这里先掌握常见 Ethernet II 的类型字段即可。

14. 交换机如何转发帧【重点】

普通二层以太网交换机可以理解为多端口网桥。它维护一张 MAC 转发表,记录:

在某个 VLAN 内,要到达这个 MAC 地址,应从哪个端口转发。

例如:

MAC 地址端口
主机 A 的 MAC1
主机 B 的 MAC2
主机 C 的 MAC3

14.1 最关键的一句话

根据源地址学习,根据目的地址转发。

在端口处于允许学习、转发的状态,且没有额外过滤策略时,基本过程是:

  1. 从端口收到帧,读取源 MAC 地址,学习或更新“源 MAC → 入端口”的对应关系。
  2. 查询目的 MAC 地址。
  3. 若找到目的端口,且不是入端口,就向该端口转发。
  4. 若目的端口恰好是入端口,则不再把该帧从其他端口转发出去。
  5. 若是未知单播,则向同一 VLAN 内其他允许转发的端口泛洪。
  6. 广播帧通常也在同一 VLAN 内向其他允许转发的端口泛洪;组播可能结合专门的表项处理。

泛洪不等于所有通信永远广播,也不等于交换机修改了帧中的目的地址。 它只是暂时不知道位置时,向多个候选端口发送副本。

14.2 一个完整的小例子

A ── 端口 1 ┐
B ── 端口 2 ├── 交换机
C ── 端口 3 ┘

假设 A 已经知道 B 的 MAC 地址,但交换机的表最初为空:

  1. A 给 B 发帧,交换机先学到 A → 端口 1
  2. 交换机还不知道 B 在哪里,把该帧向端口 2、3 泛洪。
  3. B 接收该帧;C 的接口在通常接收模式下会过滤掉不是发给自己的单播帧。
  4. B 回复 A,交换机学到 B → 端口 2
  5. 因为已经知道 A 在端口 1,回复只从端口 1 转发。
  6. 后续 A、B 之间的已知单播,可以定向转发。

动态表项通常会老化,主机位置变化后也需要更新,所以这张表不是学一次就永久不变。

15. 冲突域、广播域与 VLAN

概念含义
冲突域在共享、半双工介质模型中,发送可能相互发生碰撞的范围
广播域二层广播能够传播到的范围

常见设备的区别:

设备或配置对冲突的影响对二层广播的影响
集线器多端口共享一个冲突域通常仍在同一广播域
二层交换机,单个 VLAN隔离各端口的共享冲突范围;全双工链路本身无碰撞广播仍可在该 VLAN 内传播
配置多个 VLAN 的交换机仍按各链路的方式工作将不同 VLAN 划成不同广播域
路由器各接口连接不同链路通常不直接转发收到的二层广播帧

VLAN,虚拟局域网 ,可以把同一套交换设备上的端口划入不同的逻辑局域网。

同一台交换机:
端口 1、2 → VLAN 10
端口 3、4 → VLAN 20

VLAN 10 的广播,不会仅靠普通二层转发跑进 VLAN 20。

跨 VLAN 通信通常需要路由器或三层交换机提供三层转发。交换机之间承载多个 VLAN 时,常使用 IEEE 802.1Q 标签区分流量;不能理解为每台终端发出的每一帧都必须带标签。

16. 多台交换机连接,为什么还要防环路

为了提高可用性,交换机之间可能铺设冗余链路。但普通二层以太网帧没有像 IP TTL 那样的逐跳寿命字段,如果形成转发环路,广播或泛洪的帧可能持续绕行。

可能出现:

  • 广播风暴 :大量广播副本占用链路资源。
  • 重复帧 :同一帧沿不同路径多次到达。
  • MAC 表不稳定 :同一源地址被反复学到不同端口上。

生成树协议 STP 的基本思路是:在存在冗余物理链路的网络中,通过让部分端口不参与正常数据转发,形成逻辑上无环的转发结构;拓扑变化时重新调整。

先记住“物理上可以有冗余,实际二层转发需要避免环路”,具体选根桥、计算路径等细节可以结合课堂继续补。

17. 点对点协议 PPP

PPP 用于点对点链路,可以承载不同网络层协议的数据。

入门时记住三部分:

  • 封装方式 :规定怎样把上层分组放进帧。
  • LCP,链路控制协议 :用于建立、配置和测试数据链路等。
  • NCP,网络控制协议族 :用于配置不同网络层协议所需的参数。

常见的未压缩基本格式可概括为:

标志 | 地址 | 控制 | 协议 | 信息及可能的填充 | FCS | 标志

PPP 使用 FCS 检错,并根据链路形式使用字节转义或比特填充。基本 PPP 数据传送本身不提供逐帧确认和重传,不能因为它能检错就认为它保证可靠交付。帧格式见 RFC 1662

与以太网相比,PPP 的点对点链路通信对象已经确定,不需要像共享局域网那样,通过源、目的 MAC 地址选择多台主机中的通信对象。它的格式里虽然有“地址”字段,也不能把这个字段直接当成以太网 MAC 地址。

18. 从一个收发过程把知识串起来

假设 A 和 B 在同一 VLAN,通过交换机通信,且 A 已经知道 B 的 MAC 地址:

① A 的网络层交下一份分组
② A 的链路层添加以太网首部与 FCS,形成帧
③ A 的物理层将比特转换成信号,发到链路上
④ 交换机接收帧,学习源 MAC,按目的 MAC 查表转发
⑤ B 的物理层从信号中恢复比特
⑥ B 的链路层识别帧,进行接收过滤与差错检查
⑦ 若帧被接受,去掉相应链路层封装,把分组交给网络层

为了方便理解,这里省略了缓存、具体转发方式和其他实现细节。B 如何处理分组,是后续网络层及更上层的事情。

同一条通信一旦经过路由器进入另一段链路,通常会换用新的链路层封装。因此, 不能想象成一个以太网帧从电脑出发,就原封不动地穿过整个互联网。