计算机网络-数据链路层
目录
1 核心功能
成帧(Frame)
字符填充法:
比特填充法 (Bit Stuffing)
差错控制
差错检测 - 如何发现错误
1. 奇偶校验
2. 校验和 - TCP/IP 在用
3. 循环冗余码 - 数据链路层在用
差错纠正 - 怎么办
1. 自动重传请求 (ARQ - Automatic Repeat reQuest)
2. 前向纠错 (FEC - Forward Error Correction)
流量控制(与传输层流量控制的区别)
详细举例
场景 1:数据链路层 (L2) 流量控制
场景 2:传输层 (L4) 流量控制
2 介质访问控制 (MAC)
信道划分(FDM, TDM, WDM, CDM)- 静态划分
随机访问协议
1. ALOHA 协议(“莽夫”阶段)
2. CSMA 协议(“文明人”阶段)
3. CSMA/CD(以太网的“交通规则”)
4. CSMA/CA(Wi-Fi 的“交通规则”)
3 局域网
以太网 (Ethernet) 与 IEEE 802.3
MAC 地址 (物理地址)
MAC 帧格式(以太网 II 型)
4 数据链路层设备
网桥(Bridge)
交换机(Switch)
交换机的工作原理(自学习、转发/过滤、消除回路)
1. 自学习
2. 转发/过滤
3. 消除回路
5 协议
ARP (Address Resolution Protocol) (地址解析协议)
RARP(逆地址解析协议)
PPP (Point-to-Point Protocol) - 点对点协议
6 VLAN(虚拟局域网)
一、 为什么要用 VLAN?(解决的问题)
场景:一个没有VLAN的“扁平”网络
二、 VLAN 是什么?(解决方案)
VLAN 带来的好处:
三、 VLAN 是如何工作的?(技术实现)
1. Access Port (接入端口)
2. Trunk Port (中继端口)
四、 VLAN 间的通信(如何“穿墙”?)
1 核心功能
成帧(Frame)
什么是成帧?
成帧是数据链路层最基本的功能。物理层(第 1 层)只关心传输原始的 010101... 比特流,它并不知道这些比特流的“意义”,也不知道“一段话”从哪里开始,到哪里结束。
成帧就是在来自网络层的数据包(IP Packet)前后添加“帧头 (Header)”和“帧尾 (Trailer)”,将其“包装”成一个帧的过程。
为什么需要成帧?
- 标记起止: 帧头和帧尾就像一句话的“开始符”和“句号”**。它告诉接收方:“嘿,一个数据包从这里开始”,以及“到这里结束了”。
- 承载控制信息: 它提供了一个“信封”,可以在上面写明“收件人地址”、“发件人地址”以及“邮票”(差错校验码)。
为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU (Maximum Transfer Unit)。下图给出了帧的首部和尾部的位置,以及帧的数据部分与MTU的关系。
字符填充法:
定义两个特殊的控制字符(字节),一个叫 SOH (Start of Header) 作为帧开始符,一个叫 EOT (End of Transmission) 作为帧结束符。
示例:SOH [ 帧头...数据...帧尾 ] EOT
遇到的问题: 如果我的数据(Payload)本身(比如一个文本文件)也包含了 EOT 这个字节怎么办?接收方会误以为帧提前结束了。
解决方案(“填充”):
-
- 再定义一个“转义字符”
ESC。 - 发送方: 扫描数据。如果数据中出现了
SOH或EOT,就在它前面插入一个ESC字符。如果数据中出现了ESC,那就在它前面也插入一个ESC。 - 接收方: 扫描数据。如果发现
ESC后面跟着SOH或EOT或ESC,就把前面的ESC删除,只保留后面的数据。如果发现一个单独的EOT,就知道这是真正的帧结尾。
- 再定义一个“转义字符”
-
- 现状: 在一些面向字符的异步通信(如 PPP 协议)中使用。
比特填充法 (Bit Stuffing)
这是最常用、最重要的一种方法,用于像以太网、HDLC、SDLC 这样的协议。
- 方法: 不使用特殊字节,而是使用一个特殊的比特模式作为帧的开始和结束标志。这个标志通常是
01111110(一个0,跟着六个1,再一个0)。 - 示例:
01111110 [ 帧头...数据...帧尾 ] 01111110 - 遇到的问题: 如果我的数据本身包含了
01111110怎么办? - 解决方案(“0比特填充”):
-
- 发送方: 扫描数据(不包括标志位)。只要连续检测到 5 个
1,就立即在后面强制插入(Stuffing)一个0。 - 接收方: 扫描数据。只要连续检测到 5 个
1:
- 发送方: 扫描数据(不包括标志位)。只要连续检测到 5 个
-
-
- 如果第 6 个比特是
0:就知道这个0是被发送方填充进去的,直接把它删除,还原原始数据。 - 如果第 6 个比特是
1:就去看第 7 个比特。
- 如果第 6 个比特是
-
-
-
-
- 如果是
0(凑成了01111110),就知道这是真正的帧结束标志。 - 如果是
1M(凑成了01111111),这通常是一个错误/中止信号。
- 如果是
-
-
- 优点: 这种方法保证了在数据中永远不会出现
01111110这个模式,因此该模式可以被唯一地用作帧的边界,非常高效和健壮。

差错控制
发现并处理”数据在传输过程中(从发送方到接收方)因为物理干扰(如电磁噪声、信号衰减)而发生的错误(比如 0 变成了 1)。
差错控制通常在数据链路层和传输层都会实现,但它们的侧重点和方法有所不同。
差错控制主要包含两大块内容:
- 差错检测 (Error Detection): 如何发现数据出错了?(这是基础)
- 差错纠正 (Error Correction): 发现了错误后,怎么办?
差错检测 - 如何发现错误
这是最常用也是最基础的技术。发送方会根据要发送的数据,计算出一个简短的“校验码 (Checksum)”,并将其附加到数据后面一起发送。接收方收到数据后,用相同的方法重新计算,并对比校验码是否一致。
1. 奇偶校验
- 原理: 约定好,在发送的数据(一组比特)后面附加 1 位“校验位”,使得这一整串比特中
1的个数要么总是奇数(奇校验),要么总是偶数(偶校验)。 - 举例(偶校验):
-
- 要发送数据
1010001(有 3 个1)。 - 为了使
1的总数是偶数,必须在后面添加一个1。 - 最终发送
10100011。 - 接收方收到后,数一下
1的个数。如果是偶数,就认为没错;如果是奇数,就知道出错了。
- 要发送数据
- 缺点:太弱了。如果同时有 2 个比特出错了(比如一个
0变1,一个1变0),1的总数还是偶数,它就检测不出来了。它只能检测出奇数个比特的错误。
2. 校验和 - TCP/IP 在用
- 原理: 这是奇偶校验的升级版。它将数据分割成若干个固定长度的小块(比如 16 比特),然后将这些小块相加,最后对这个“总和 (Sum)”取反码,得到的就是“校验和”。
- 应用:传输层的 TCP、UDP 和 网络层的 IP 协议头部校验,用的都是这种方法。
- 优点: 比奇偶校验强得多,实现简单(用加法)。
- 缺点: 依然有一定概率漏掉某些类型的错误(比如两个块中对应的位互换了)。
3. 循环冗余码 - 数据链路层在用
这是目前数据链路层(L2)使用最广泛、最强大的检错技术。
- 原理: 它不再使用加法,而是使用一种“模 2 除法”(本质是异或 XOR 运算)。
-
- 约定: 发送方和接收方事先约定一个“生成多项式”,它对应一个二进制数(比如
1011)。 - 发送方:
- 约定: 发送方和接收方事先约定一个“生成多项式”,它对应一个二进制数(比如
-
-
- 在要发送的数据
D后面补上k个0(k是生成多项式的位数减 1)。 - 用这个新数据(
D...000)模 2 除以约定的“生成多项式”。 - 得到的“余数”(这个余数一定是
k位)就是 CRC 校验码。 - 发送方将这个“余数”替换掉数据末尾的
k个0,然后发送出去。
- 在要发送的数据
-
-
- 接收方:
-
-
- 收到完整的数据(数据 + CRC 余数)后。
- 用它模 2 除以同一个“生成多项式”。
-
-
- 判断:
-
-
- 如果余数为 0:恭喜,数据没有出错。
- 如果余数不为 0:数据在传输中一定出错了。
-
- 优点:检错能力极强。它能 100% 检测出所有奇数个比特错误、所有双比特错误以及(只要生成多项式选得好)绝大多数的突发错误。
- 应用:以太网 (Ethernet) 帧尾的 FCS (帧校验序列)、Wi-Fi、SATA、PCIe 等,几乎所有 L2 协议都在用 CRC。
- 举例:
-
- 要发送的数据 (D): 11010 (5个比特),约定的生成多项式 (G):
1011(4个比特) - 第 1 步:确定 k 值并补 0
- 要发送的数据 (D): 11010 (5个比特),约定的生成多项式 (G):
-
-
- 生成多项式
G的长度是 4 位。k = G的长度 - 1 = 4 - 1 = 3。 - 因此,我们要在数据
D的末尾补k个(即 3 个)0。补 0 后的数据为:11010000
- 生成多项式
-
-
- 执行“模 2 除法”
-
-
- 计算
11010000 % 1011, 计算得到的余数是011。 这个011(k=3 位) 就是我们要求的 CRC 校验码,也叫 FCS (帧校验序列) - 发送方将数据末尾的
k个0替换成这个余数011。 最终发送的数据帧 (T):11010011
- 计算
-
-
- 接收方的校验过程,接收方用收到的完整数据
11010011,除以同一个生成多项式1011。 最终余数为000, 数据没有出错,接收此数据。 假设数据在传输时,第 3 位发生了错误(0变成了1),接收方收到的错误数据是:11110011,最终余数为110(不为 0)。接收方将丢弃这个数据帧。
- 接收方的校验过程,接收方用收到的完整数据
差错纠正 - 怎么办
当接收方检测到错误后,有两种处理策略:
1. 自动重传请求 (ARQ - Automatic Repeat reQuest)
这是最常见的策略,也称为“向后纠错”。
- 原理: 接收方只检测错误,不试图纠正错误。
- 流程:
-
- 接收方通过 CRC/Checksum 发现数据包(帧)
N出错了。 - 接收方直接丢弃这个错误的数据包。
- 接收方不发送对
N的“确认”(ACK)。 - 发送方在等待一段时间后,发现没有收到对
N的 ACK(即超时 Timeout),就自动重新发送数据包N。
- 接收方通过 CRC/Checksum 发现数据包(帧)
- 举例:
-
- TCP (传输层): TCP 就是一个典型的 ARQ 系统。它使用 Checksum 检错,使用 Seq/Ack 号和超时重传来纠错。
- Wi-Fi (数据链路层): Wi-Fi 的 L2 也实现了 ARQ (称为 Stop-and-Wait ARQ)。因为无线信道太容易出错了,如果等 L4 的 TCP 来重传,效率太低。
2. 前向纠错 (FEC - Forward Error Correction)
这种策略更高级,它允许接收方直接纠正错误,而不需要发送方重传。
- 原理: 发送方在发送原始数据
D时,会额外计算并附加一些冗余的“纠错码”。 - 类比:
-
- 简单重复: 你想发送
1,但怕出错,于是你发送111。
- 简单重复: 你想发送
-
-
- 接收方收到
110-> 它猜测大多数是对的,纠正为1。 - 接收方收到
010-> 它猜测……失败了。
- 接收方收到
-
-
- 高级冗余(海明码 Hamming Code):
-
-
- 这是一种精妙的编码方式,它通过在数据的特定位置插入“校验位”,使得当某 1 个比特出错时,校验位的值组合会“指向”出错比特的位置。
- 接收方通过计算校验位,就能定位并翻转(纠正)那个出错的比特。
-
- 优点:实时性高。非常适合那些对延迟极其敏感(如实时音视频、卫星通信),或者无法重传(如深空探测器)的场景。
- 缺点:开销大。需要发送大量额外的冗余数据(纠错码),占用了带宽。
- 应用: 5G 通信、卫星通信、DVD/CD 刻录(光盘有划痕也能读)、QR 二维码(遮挡一部分也能扫)。
流量控制(与传输层流量控制的区别)
流量控制的目的是相同的:防止发送方发送数据过快,导致接收方来不及处理而“淹没”接收方。
但数据链路层(L2)和传输层(L4)的流量控制,在控制范围和实现机制上有着本质的区别。
核心区别
- 控制范围不同:
- 数据链路层(L2): 是节点到节点(Node-to-Node)或称“逐跳”(Hop-by-Hop)的控制。
- 传输层(L4): 是端到端(End-to-End)的控制。
- 控制对象不同:
- L2:控制的是两个直接相连的设备(如 电脑<->交换机,或 交换机<->路由器)之间的数据流。
- L4:控制的是最初的发送主机(如你的电脑)和最终的接收主机(如谷歌服务器)之间的数据流。
- 目的不同:
- L2:旨在防止中间设备(如交换机)的硬件缓存溢出。
- L4:旨在防止最终接收主机(如服务器)的应用程序接收缓冲区溢出。
- 实现机制不同:
- L2:在以太网中依赖
PAUSE帧(802.3x);在 Wi-Fi 中依赖基于 ACK 的信道访问机制。 - L4:TCP 协议使用滑动窗口机制,通过 ACK 报文中携带的“接收窗口大小 (rwnd)”字段来动态告知发送方自己还能接收多少数据。
详细举例
假设你的电脑(A)要给谷歌服务器(Z)发送大量数据。路径如下:
你(A) <--> 路由器R1 <--> 骨干网R2 <--> 谷歌服务器(Z)
场景 1:数据链路层 (L2) 流量控制
- 发生地点:
A和R1之间。 - 触发条件: 你(A)的网卡是万兆网卡,但你的家庭路由器
R1是个千兆老设备,处理能力较差。你(A)向R1发送数据帧(Frame)的速度太快了。 - 发生过程:
-
R1的硬件接收缓存即将被填满。R1(作为接收方)立刻向A(作为发送方)发送一个特殊的以太网帧,称为PAUSE帧。- 你(A)的网卡收到
PAUSE帧后,会立即暂停发送所有数据帧一小段时间(比如几毫秒)。
- 关键点:
-
- 这是一次本地对话。
R2和谷歌服务器Z完全不知道A和R1之间发生了这次“暂停”。 - 它控制的是物理链路上的数据流。
- (注:现代有线以太网在家庭/办公环境中很少开启 L2 流量控制,因为 TCP (L4) 的控制更精细。但在数据中心等高性能环境中,它仍然很重要。)
- 这是一次本地对话。
场景 2:传输层 (L4) 流量控制
- 发生地点:
A和Z之间。 - 触发条件: 你(A)的发送程序(比如百度网盘)疯狂发送数据,但谷歌服务器
Z上的接收应用程序(比如 Web 服务器)因为 CPU 繁忙、在写磁盘等原因,来不及从系统缓冲区中读取数据。 - 发生过程:
-
- 数据包(TCP Segment)到达
Z的操作系统,被放入 TCP 接收缓冲区。 Z上的应用程序处理缓慢,导致这个缓冲区即将被填满。Z的 TCP 协议栈在回复 ACK 确认包时,会更新其头部的Window Size(rwnd) 字段,比如设置为 0 (称为“零窗口”)。- 这个 ACK 包跨越
R2和R1,原路返回到你(A)的电脑。 - 你(A)的操作系统(TCP 协议栈)收到这个
rwnd=0的 ACK 后,理解了:“对方缓冲区满了”。 - 操作系统会立即停止发送新的数据(但会定期发送“零窗口探测”包,询问对方是否空闲了)。
- 数据包(TCP Segment)到达
- 关键点:
-
- 这是一次端到端的对话。中间的
R1和R2只是透传了这个 ACK 包,它们不关心rwnd的值是多少。 - 它控制的是逻辑连接上的数据流。
- 这是一次端到端的对话。中间的
2 介质访问控制 (MAC)
信道划分(FDM, TDM, WDM, CDM)- 静态划分
预先就把整条马路(信道资源)强行分割成多个互不干扰的子车道(子信道),分配给每个用户。
- 优点: 一旦分配,用户就独占自己的子车道,绝不会发生冲突。
- 缺点:资源浪费。如果你被分配了车道,但你没有数据要发(比如在看网页发呆),你的车道就空着,别人再忙也不能用。
- FDM (Frequency Division Multiplexing) - 频分多路复用
-
- 原理: 按频率划分。
- 类比:收音机。整片空域(介质)被划分为
FM 91.5,FM 101.7等不同频段(子信道)。每个电台(用户)使用自己的频段广播,互不干扰。 - 应用: 早期电话干线、有线电视 (CATV)。
- TDM (Time Division Multiplexing) - 时分多路复用
-
- 原理: 按时间划分。
- 类比:轮流发言。信道被划分为一个个“时间片”(Time Slot)。比如 1 秒钟:
-
-
0.0 - 0.2秒:用户 A 发言0.2 - 0.4秒:用户 B 发言0.4 - 0.6秒:用户 C 发言- ...如此循环。
-
-
- 应用: 传统数字电话(PCM)、2G 移动通信(GSM)。
- WDM (Wavelength Division Multiplexing) - 波分多路复用
-
- 原理: 这是光纤专用的 FDM。
- 类比: 在一根光纤里,同时传输不同颜色(波长) 的光信号。每种颜色的光都是一个独立的子信道。
- 应用:光纤骨干网(这是实现超高带宽的基石)。
- CDM (Code Division Multiplexing) - 码分多路复用
-
- 原理: 最高级的一种。所有用户在同一时间、同一频率上发送数据,但每个用户使用一个唯一的“密码本”(正交码片序列) 来对数据进行编码。
- 类比:在一个嘈杂的鸡尾酒会里,有很多人在同时说话(共享信道)。但你只懂中文(你的“密码本”),所以你只能听懂那个也在说中文的人(目标用户)在说什么,而其他所有语言(英语、法语)对你来说都是背景噪音(被过滤掉)。
- 应用:3G/4G 移动通信、GPS。
随机访问协议
这是以太网(Ethernet)和 Wi-Fi 的核心思想。它不预先划分资源,而是采用**“先到先得、发生冲突再解决”**的策略。
- 优点:资源利用率高。谁有数据,谁就尝试使用全部信道。
- 缺点:必须有一套机制来处理“冲突”。
1. ALOHA 协议(“莽夫”阶段)
这是最古老的随机访问协议,思想非常简单。
- 纯 ALOHA (Pure ALOHA)
-
- 规则:“想发就发”。
- 流程: 1. 发送数据 -> 2. 如果没收到确认(说明冲突了) -> 3. 等待一个随机时间 -> 4. 回到第 1 步。
- 缺点: 极其容易冲突,信道利用率极低(理论最高 18.4%)。
- 时隙 ALOHA (Slotted ALOHA)
-
- 规则: 对纯 ALOHA 的一个改进。把时间划分为“时隙”(Slot)。
- 流程: 1. 必须等到下一个时隙的开头才能发送 -> 2. 后续同上。
- 优点: 避免了“帧中间”的冲突,只会在“时隙开头”冲突。信道利用率翻倍(理论最高 36.8%)。
2. CSMA 协议(“文明人”阶段)
ALOHA 太“莽”了,CSMA(载波侦听多路访问)引入了一个关键思想:“Listen Before Talk”(先听后说)。
- CS (Carrier Sense):载波侦听。在发送数据前,先监听一下信道(马路)上有没有人(信号)?
- MA (Multiple Access):多路访问。这条马路是大家共享的。
根据“监听到信道忙碌时”该怎么办,CSMA 分为三种:
- 1-坚持 (1-Persistent) CSMA
-
- 规则: 1. 监听。 2. 如果空闲,立即(100% 概率)发送。 3. 如果忙碌,持续监听,一旦变为空闲,立即发送。
- 缺点:贪婪。如果 A 和 B 都在等 C 发完,C 一停,A 和 B 会立即同时发送,导致 100% 冲突。
- 非坚持 (Non-Persistent) CSMA
-
- 规则: 1. 监听。 2. 如果空闲,立即发送。 3. 如果忙碌,放弃监听,等待一个随机时间后,回头执行第 1 步。
- 优点: 没那么贪婪,冲突概率降低。
- 缺点:效率低。在“随机等待”的这段时间里,信道可能已经空闲了,造成资源浪费。
- p-坚持 (p-Persistent) CSMA
-
- 规则: (这是对 1-坚持的改进,用于时隙信道)
-
-
- 监听。 2. 如果空闲,以 概率
p发送;以 概率1-p延迟到下一个时隙再监听。 3. 如果忙碌,持续监听,一旦空闲,执行第 2 步。
- 监听。 2. 如果空闲,以 概率
-
-
- 优点:折中方案。通过概率
p来平衡贪婪和效率。
- 优点:折中方案。通过概率
3. CSMA/CD(以太网的“交通规则”)
CSMA 解决了“发送前”的问题,但没解决“发送中”的问题:万一 A 和 B 同时监听到空闲,同时决定发送,怎么办?
CSMA/CD(碰撞检测)解决了这个问题。
- CD (Collision Detection):“边说边听”(Listen While Talk)。
- 适用:有线以太网 (Ethernet)。(特别是早期使用集线器 Hub 的网络)
- 完整流程(经典面试题):
-
- 先听 (CS): 监听到信道空闲。
- 开说 (Send): 开始发送数据帧。
- 边说边听 (CD): 在发送数据的同时,持续监听信道。
-
-
- 如果没监听到异常(回来的信号和发出去的一样):说明没冲突,发送成功。
- 如果监听到异常(回来的信号和发出去的不一样):说明发生冲突!
-
-
- 冲突处理:
-
-
- a. 立即停止发送数据。
- b. 发送“冲突信号” (Jam Signal): 立即向信道发送一段“堵塞信号”,确保局域网内所有设备都知道“刚起冲突了!”
- c. 随机退避 (Backoff): 采用**“二进制指数退避算法”。
-
-
-
-
- 第 1 次冲突:在 0 和 1 之间随机选个时间等待。
- 第 2 次冲突:在 0, 1, 2, 3 之间随机选个时间等待。
- 第 N 次冲突:在 0 到
2^n-1之间随机选个时间等待(有上限)。
-
-
-
-
- d. 重试: 等待结束后,返回第 1 步。
-
- 注意: 现代的交换式以太网(Switched Ethernet)中,如果使用全双工 (Full-duplex) 模式(即网线同时可收可发),已经不再需要 CSMA/CD 了,因为交换机确保了点对点的连接,根本不会发生冲突。
4. CSMA/CA(Wi-Fi 的“交通规则”)
在无线 (Wi-Fi) 环境下,CSMA/CD 失效了。
- 为什么失效?
-
- 无法“边说边听”: 无线信号是向四面八方传播的。发送时,自己的信号功率太强,会彻底“淹没”掉(听不到)别人微弱的信号。
- “隐蔽站”问题 (Hidden Station):
-
-
- A 和 C 都在 AP (B) 的覆盖范围内。
- A 和 C 互相听不见对方(因为距离太远或有障碍物)。
- A 监听信道,空闲(听不到 C),开始发送。
- C 监听信道,空闲(听不到 A),也开始发送。
- A 和 C 的信号在 AP (B) 那里发生冲突,但 A 和 C 自己却不知道。
-
因此,Wi-Fi 采用了 CSMA/CA(碰撞避免)。
- CA (Collision Avoidance): 核心思想是“我不是去检测冲突,我是要尽一切努力去 避免 冲突”。
- 主要机制:
-
- 先听 (CS): 监听到信道空闲。
- 随机等待 (关键): 即使信道空闲,也不能马上发。必须再等待一个随机的“退避时间”(DIFS, EIFS)。如果等待期间监听到别人开始发了,就冻结自己的计时器,等别人发完再说。
- RTS/CTS (可选):
-
-
- 在发送大数据帧之前,先发送一个极短的 RTS (Request to Send) 帧:“(AP),我想发个包,可以吗?”
- AP (Access Point) 收到后,会广播一个极短的 CTS (Clear to Send) 帧:“(所有人),都闭嘴,A 要发包了!”
- 作用: 那个“隐蔽站”C 虽然听不到 A 的 RTS,但它能听到 AP 的 CTS,于是 C 就会保持安静,从而避免了冲突。
-
-
- ACK (必须):
-
-
- 由于无线信道极其不可靠(干扰多),每一个数据帧在被正确接收后,接收方都必须回复一个 ACK 确认帧。
- 如果发送方在规定时间内没收到 ACK,它就认为数据丢失了(可能被干扰,也可能是冲突了),立即重传。
-
3 局域网
局域网(LAN)是在一个有限地理范围内(如一栋建筑、一个家庭、一个校园)的网络。
而“以太网”就是当今世界用来构建有线局域网的绝对主流技术标准。你家里和办公室里用来插网线的那个系统,就是以太网。
以太网 (Ethernet) 与 IEEE 802.3
- 什么是以太网?
-
- 以太网(Ethernet)是一套技术规范,它定义了如何在局域网(LAN)中构建物理网络、使用什么线缆、如何发送和接收数据帧(Frame)。
- 它是目前应用最广泛的局域网技术,没有之一。
- 什么是 IEEE 802.3?
-
- IEEE(电气与电子工程师协会)是制定标准的老大。
- 802 委员会是 IEEE 内部专门负责局域网和城域网标准的。
- 802.3 就是以太网的正式标准代号。
- (顺便一提,IEEE 802.11 就是 Wi-Fi 的标准代号)。
- 所以,以太网 和 IEEE 802.3 基本可以互换使用,后者是前者的“学名”。
- 以太网的演进:
-
- 早期(已淘汰): 使用总线型拓扑和同轴电缆,所有设备共享一根总线,必须使用 CSMA/CD(碰撞检测) 来“抢”信道。
- 现代(主流): 使用星型拓扑和双绞线(网线),所有设备都连接到交换机 (Switch)。交换机的使用使得冲突(Collision) 几乎消失了,因为交换机为每个端口提供了点对点的全双工通信。
MAC 地址 (物理地址)
1. 什么是 MAC 地址?
- MAC 地址(Media Access Control Address,介质访问控制地址)是一个全球唯一的、固化在网络硬件(如网卡 NIC、Wi-Fi 芯片)上的物理地址。
- 类比: 如果说 IP 地址是你的“家庭住址”(可以改变,L3),那么 MAC 地址就是你的“身份证号”(出厂时就定了,L2)。
2. 为什么需要 MAC 地址?
- 在一个局域网(LAN)中,数据帧(Frame)是靠交换机 (Switch) 来转发的。
- 交换机是一个 L2 设备,它只认识 MAC 地址,不认识 IP 地址。
- ARP 协议(用 IP 换 MAC)就是为了让电脑知道“下一跳”(如路由器)的 MAC 地址,这样交换机才能把数据帧正确地转发过去。
3. MAC 地址的格式:
- 长度:48 位 (bits),通常写作 6 字节 (Bytes)。
- 表示: 通常用 12 个十六进制数表示,中间用冒号(
:)或短横线(-)分隔。 - 示例:
00:1A:2B:3C:4D:5E或00-1A-2B-3C-4D-5E
4. MAC 地址的结构:
这 6 个字节分为两部分:
- 前 3 字节 (24 位):OUI (Organizationally Unique Identifier),组织唯一标识符。
-
- 这是由 IEEE 分配给硬件制造商(如 Intel, Apple, Cisco, 华为)的。
- 看到
00:1A:2B就能查到这是哪家公司生产的网卡。
- 后 3 字节 (24 位):序列号。
-
- 由制造商自行分配,确保其生产的每块网卡都有唯一的后 3 字节。
- OUI + 序列号 = 全球唯一。
5. 特殊的 MAC 地址:
- 广播地址:
FF:FF:FF:FF:FF:FF(全部为 1)。
-
- 发送到这个地址的帧,会被局域网内所有设备无条件接收。
- ARP 请求就是发送到这个广播地址的(“广播放“谁是 192.168.1.1?”)。
MAC 帧格式(以太网 II 型)
这是数据链路层如何“封装” IP 包的“信封”样式。目前 TCP/IP 协议栈主要使用以太网 II 型 (Ethernet II) 帧格式。
一个标准的以太网 II 型帧(Frame)结构如下(不包括物理层的前同步码):
| 字段 | 目的 MAC 地址 | 源 MAC 地址 | 类型 | 数据 (Payload) | FCS (帧校验序列) |
| 长度 (字节) | 6 字节 | 6 字节 | 2 字节 | 46 ~ 1500 字节 | 4 字节 |
1. 目的 MAC 地址 (Destination MAC)
- 6 字节。接收方(下一跳)的 MAC 地址。
- 如果是
FF:FF:FF:FF:FF:FF,就是广播帧。
2. 源 MAC 地址 (Source MAC)
- 6 字节。发送方的 MAC 地址。
3. 类型 (Type / EtherType)
- 2 字节。这个字段极其重要!
- 它用来标识这个帧的“数据 (Payload)”部分装的是哪一种上层(网络层)的协议包。
- 接收方的数据链路层(L2)就是靠这个字段,来决定把“拆开”的数据包交给谁(L3 的哪个协议)去处理。
- 常见值:
-
0x0800:数据是 IPv4 包。0x0806:数据是 ARP 请求/响应包。0x86DD:数据是 IPv6 包。
4. 数据 (Payload)
- 这是帧的核心内容,也就是它所承载的上层数据包(如 IP 包)。
- 长度范围:46 ~ 1500 字节。
-
- 最大 1500 字节: 这就是MTU (Maximum Transmission Unit)。一个 IP 包如果大于 1500 字节,就必须在网络层(L3)进行“分片”(Fragmented)。
- 最小 46 字节: 这是为了配合 CSMA/CD 的最小帧长要求(64 字节)。如果上层(如 IP)传来的数据包太小(比如只有 20 字节),L2 就必须在数据后面填充(Padding) 一些垃圾数据,凑够 46 字节,然后再封装。
5. FCS (Frame Check Sequence) - 帧校验序列
- 4 字节。放在帧尾。
- 它使用 CRC (循环冗余码) 算法,对除 FCS 外的整个帧(从目的 MAC 到数据)进行计算,得出一个校验值。
- 作用:差错检测。接收方收到帧后,用同样的 CRC 算法计算一遍,如果算出的值和 FCS 字段的值不一致,说明数据在传输中出错了,接收方会直接丢弃这个帧(不会通知发送方,依赖 L4 的 TCP 去重传)。
4 数据链路层设备
该层设备工作在数据链路层,看得懂MAC地址,看不懂IP地址。核心功能是根据MAC地址,智能地转发数据帧,以隔离冲突域。
网桥(Bridge)
- 是什么? 网桥是“交换机”的前身,你可以把它理解为一个“只有两个端口的、比较慢的”交换机。
- 历史背景: 在早期(比如总线型网络),一个局ARPA网(LAN)就是一个巨大的冲突域(所有人抢一根线)。
- 功能: 网桥被发明出来,用于连接两个物理上独立的局域网段(Segments),并过滤它们之间的流量。
- 工作原理:
-
- 网桥有两个端口,Port A 和 Port B,分别连接两个网段。
- 它会监听两个网段的流量,学习每个网段上有哪些 MAC 地址,并建立一个 MAC 地址表。
- 决策(过滤): 当一个数据帧从 Port A 进来:
-
-
- 网桥检查目的 MAC 地址。
- 如果在 MAC 表中,这个目的地址也位于 Port A,网桥就“过滤”(丢弃)这个帧,不会让它跑到 Port B 去,从而避免了不必要的流量。
- 如果目的地址在 Port B,网桥就“转发”(Forward)这个帧。
-
- 缺点: 端口少(通常只有 2-4 个)、主要靠软件转发(慢)、性能低。
- 现状:已被交换机完全取代。
交换机(Switch)
- 是什么? 交换机(也叫“交换式集线器”)就是“多端口网桥”。
- 功能: 它是现代星型拓扑局域网的核心。它连接局域网内的所有设备(电脑、服务器、路由器、打印机)。 并确保数据(帧) 能够高效、准确地从“发送方”到达“接收方”。
- 与集线器 (Hub, L1) 的天壤之别:
- 集线器 (Hub): 物理层设备。一个帧从 Port 1 进来,它会无脑地广播给所有其他端口。连接到 Hub 的所有设备共享一个冲突域,效率极低。
- 交换机 (Switch): 数据链路层设备。一个帧从 Port 1 进来(发给
BBBB),它会精确地只从 Port 5(BBBB所在的位置)发出去。交换机的每一个端口都是一个独立的冲突域。 - 优点: 极大地减少了网络冲突(在全双工模式下冲突为 0),极大地提高了局域网性能,允许多对设备同时通信。
交换机的工作原理(自学习、转发/过滤、消除回路)
- 交换机之所以智能,全靠它内部的一张动态维护的“MAC 地址表”。它主要依赖以下三个核心动作:
1. 自学习
- 目的: 自动构建和维护 MAC 地址表。
- 原理: 交换机“偷看”所有进入它的数据帧的“源 MAC 地址”。
- 过程:
-
- 交换机刚开机时,MAC 地址表是空的。
- 主机 A(MAC
AAAA)通过 Port 1 发送了一个数据帧(比如一个 ARP 请求)。 - 交换机收到这个帧,它立即检查帧的源 MAC 地址(
AAAA)和入口端口(Port 1)。 - 交换机在 MAC 地址表中创建一条新条目:
{ "MAC": "AAAA", "Port": 1 }。 - 同理,主机 B(MAC
BBBB)通过 Port 2 回复了主机 A。 - 交换机收到这个回复,创建新条目:
{ "MAC": "BBBB", "Port": 2 }。
- 老化 (Aging): 这个表项不是永久的。如果交换机在一段时间内(默认 5 分钟)没有再从 Port 1 收到
AAAA的帧,它会认为主机 A 可能关机或拔线了,就会删除这条表项,以保持表的时效性。
2. 转发/过滤
- 目的: 根据 MAC 地址表,决定数据帧的去向。
- 原理: 交换机检查数据帧的“目的 MAC 地址”。
- 过程:
-
- 一个帧从 Port 1 进来,其目的 MAC 是
BBBB。 - 交换机查询 MAC 地址表,寻找
BBBB。 - 决策(三种情况):
- 一个帧从 Port 1 进来,其目的 MAC 是
-
-
- 情况 A:精确转发
-
-
-
-
- 交换机在表中找到了! 表项显示
BBBB位于 Port 2。 - 动作:交换机将该帧仅从 Port 2 发送出去。
- 交换机在表中找到了! 表项显示
-
-
-
-
- 情况 B:未知单播(泛洪/广播)
-
-
-
-
- 交换机在表中找不到
BBBB的记录(可能主机 B 还没发过言)。 - 动作:交换机没辙,只能将该帧“泛洪”——即广播到除 Port 1(入口)之外的所有其他端口。
- (局域网内其他主机收到后,发现 MAC 不匹配会丢弃;主机 B 收到后会处理,并且当 B 回复时,交换机就能“自学习”到 B 的位置了。)
- 交换机在表中找不到
-
-
-
-
- 情况 C:过滤
-
-
-
-
- 交换机在表中找到了! 但表项显示
BBBB位于 Port 1。 - 动作: 交换机知道“发送方和接收方在同一个端口上”(比如连着同一个老式 Hub)。
- 它会直接丢弃这个帧,因为没必要再把它发回去了。
- 交换机在表中找到了! 但表项显示
-
-
3. 消除回路
- 问题: 为了提高网络的可靠性,管理员可能会在两台交换机之间连接两条或多条物理线路(冗余备份)。这会形成一个物理环路。
- 环路的灾难:
-
- 一个广播帧(如 ARP)进入环路。
- 交换机 A 会把这个帧从所有端口(包括两条链路)发给 B。
- 交换机 B 收到两份广播帧,它又会把这两份帧从所有端口(包括两条链路)发回给 A。
- A 收到四份,再发回给 B……
- 这个过程无限循环,帧被指数级放大,在 1 秒钟内就会塞满所有带宽,导致网络瘫痪。这就是“广播风暴”。
- 解决方案:STP (Spanning Tree Protocol) - 生成树协议 (IEEE 802.1D)。
- STP 原理(简化版):
-
- 交换机们开机后,会互相发送一种叫 BPDU 的“配置消息”。
- 它们通过“选举”,在全网选出一个“老大”(根桥 Root Bridge)。
- 所有其他交换机计算出一条到达“老大”的“最短路径”。
- 如果存在多条路径(即环路),STP 会逻辑上“阻塞”那些多余的(非最短) 路径上的端口。
- 这个端口的物理线缆还插着,灯也可能亮着,但交换机不允许任何数据帧(BPDU 除外)通过这个端口。
- 这样,网络在逻辑上就形成了一个没有环路的“树状结构”。
- 容错: 如果“最短路径”上的那根线断了,STP 会在几十秒内检测到,并自动“解封”那个之前被阻塞的备份端口,网络恢复通畅。
5 协议
ARP (Address Resolution Protocol) (地址解析协议)
核心功能: 在同一个局域网内,通过一个已知的 IP 地址,查询(广播)得到该 IP 对应的物理 MAC 地址。
工作流程:
- 场景: 主机 A (IP:
1.1) 想给主机 B (IP:1.2) 发数据,但只知道 B 的 IP。 - 检查缓存: A 先检查自己的“ARP 缓存表”里有没有
1.2的记录。 - 广播询问: 缓存中没有。A 向局域网内所有人(广播 MAC:
FF:FF:FF:FF:FF:FF)发送一个请求:“你好!请问谁的 IP 是1.2?请告诉我你的 MAC 地址。” - 单播响应 (ARP Response):
-
- 局域网内所有其他主机(C, D...)收到广播,发现 IP 不匹配,丢弃该请求。
- 主机 B 收到广播,发现 IP 匹配,立即单独(单播)向 A 回复一个响应:“你好 A!我就是
1.2,我的 MAC 地址是[B的MAC地址]。”
- 更新缓存: A 收到 B 的响应,将
(1.2 = [B的MAC地址])这条记录存入自己的 ARP 缓存表,然后开始发送数据。
- 应用场景:所有基于以太网(和 Wi-Fi)的局域网通信都必须依赖 ARP。它是 IP (L3) 和 MAC (L2) 之间的核心粘合剂。
RARP(逆地址解析协议)
核心功能: (与 ARP 完全相反)一个设备在只知道自己物理 MAC 地址的情况下,广播询问网络,希望有服务器能告诉它“你应该使用哪个 IP 地址”。
工作流程:
- 场景: 一台没有硬盘的“无盘工作站”开机。
- 广播询问 (RARP Request): 该工作站向局域网广播:“你好!我的 MAC 地址是
[我的MAC地址],谁能给我分配一个 IP 地址?” - 单播响应 (RARP Response): 网络上的 RARP 服务器收到请求后,在自己的配置表里查找这个 MAC,然后回复:“OK,你应该使用 IP
1.2。”
应用场景:
- 已淘汰 (Obsolete)。
- 被谁取代: 被 DHCP (动态主机配置协议) 完美取代。
- 为什么: RARP 只能分配一个 IP。而 DHCP 功能强大得多,它在分配 IP 的同时,还能提供子网掩码、网关地址、DNS 服务器地址等所有上网必需的信息。
PPP (Point-to-Point Protocol) - 点对点协议
核心功能: 在两个设备(“点对点”)之间建立一个专用的、直接的数据链路连接。
关键特性:
- 身份验证: 这是它与以太网最大的不同。PPP 可以在链路建立时,要求对方提供用户名和密码(使用 PAP 或 CHAP 协议进行验证)。
- 链路协商 (LCP): 双方可以协商链路参数,如“最大帧大小 (MRU)”。
- 网络层协商 (NCP): 协商如何配置网络层,最常见的就是分配 IP 地址(例如,ISP 的服务器通过 NCP 告诉你的路由器:“认证通过,分配给你这个公网 IP...”)。
应用场景:
- (历史) 电话线拨号上网 (ADSL): 你家的电脑通过“猫”(Modem) 呼叫 ISP,建立的就是 PPP 连接。
- (现代) PPPoE (PPP over Ethernet): 你的家庭光纤路由器需要设置宽带账号和密码才能上网。这个过程就是你的路由器(点 A)在以太网上运行 PPP,与 ISP 的服务器(点 B)进行身份验证和 IP 分配。
6 VLAN(虚拟局域网)
VLAN 的核心功能就是:在同一个物理局域网(LAN)内部,通过软件配置,强行划分出多个逻辑上隔离的“虚拟”局域网。
一、 为什么要用 VLAN?(解决的问题)
要理解 VLAN,我们必须先知道没有 VLAN的网络有什么问题。
场景:一个没有VLAN的“扁平”网络
- 物理布局: 假设你有一栋 3 层的办公楼,每层楼都有一台交换机 (Switch)。所有交换机都连在一起。公司有 3 个部门:财务部、技术部、市场部,员工分布在各个楼层。
- 网络状态: 这是一个单一的、巨大的局域网(也是一个广播域)。
(所有交换机互连,PC A/B/C 分别代表不同部门,都插在交换机上)
这会带来三个严重问题:
- 广播风暴 (Broadcast Storm):
-
- 任何一台电脑(比如财务部的 A)发送一个广播包(如 ARP 请求:“谁是网关?”)。
- 这个广播包会被所有交换机无条件地泛洪 (Flooding) 到所有端口。
- 结果:全公司所有电脑(无论你是财务、技术还是市场部)都会收到并处理这个广播。
- 后果: 电脑数量一多,网络中会充斥着巨量的广播流量,严重消耗网络带宽和 CPU 资源,导致网络卡顿。
- 网络安全 (Security):
-
- 由于所有人在同一个局域网,技术部员工(B)可以轻易地使用“抓包”工具(如 Wireshark)来嗅探网络流量。
- 后果: 尽管交换机能阻止单播嗅探,但 B 还是能轻易截获到所有广播流量,甚至能通过“ARP 欺骗”等手段,窃听到财务部 A 的敏感数据。
- 管理困难 (Management & Flexibility):
-
- 场景: 市场部的一个员工(C),要从 1 楼搬到 2 楼(技术部旁边)的空工位。
- 后果: 为了让他还能连上市场部的网络(或者出于安全考虑不让他连上技术部的网络),网络管理员必须跑到 2 楼的机柜,重新跳线(把 C 的网线从“技术部交换机”上拔下来,插到“市场部交换机”上,如果有的话)。这非常繁琐。
二、 VLAN 是什么?(解决方案)
VLAN 就是用来解决上述所有问题的。
VLAN 就像是在你那个“大平层”的物理局域网里,建起了“虚拟的、看不见的墙”。
它在交换机内部,通过逻辑配置,把物理端口划分到不同的“组”里。每个组就是一个 VLAN。
- VLAN 10: 命名为“财务部”
- VLAN 20: 命名为“技术部”
- VLAN 30: 命名为“市场部”
(同样的物理布局,但在交换机内部,端口被逻辑划分为 VLAN 10, 20, 30)
VLAN 带来的好处:
- 隔离广播域 (解决广播风暴):
-
- 现在,财务部(VLAN 10)的 A 发送一个广播包。
- 交换机只会将这个包转发给其他同属于 VLAN 10 的端口。
- VLAN 20 和 30 的端口(技术部和市场部)根本看不见这个包。
- 结果: 广播被“墙”挡住了,被限制在了各自的 VLAN 内部。一个大的广播域被切分成了 3 个小的广播域。
- 增强安全性 (解决安全问题):
-
- VLAN 之间是默认“老死不相往来”的。
- 技术部(VLAN 20)的 B,无法直接访问或嗅探到财务部(VLAN 10)的 A。它们在逻辑上根本就不在一个网络里。
- 这种隔离是在交换机(L2)层面实现的,非常安全。
- 提高灵活性 (解决管理问题):
-
- 场景: 市场部(VLAN 30)的 C,搬到了 2 楼,物理上插到了 2 楼交换机的 5 号口(这个口原本是 VLAN 20 的)。
- 管理员操作: 登录 2 楼的交换机,敲一行命令,将 5 号口的配置从
vlan 20改成vlan 30。 - 结果: 电脑 C 立即“穿墙”回到了市场部的虚拟网络中。无需任何物理跳线。
三、 VLAN 是如何工作的?(技术实现)
交换机是如何知道一个数据帧(Frame)是属于哪个 VLAN 的?这需要两种类型的端口:
1. Access Port (接入端口)
- 功能: 用于连接终端设备(如 PC、打印机、服务器)。
- 特点:
-
- 一个 Access 口只能属于一个 VLAN(比如,配置为
vlan 10)。 - 它从 PC 收到的是普通的以太网帧(不带 VLAN 信息)。
- 当交换机准备将这个帧转发出去时,它会在内部“标记”这个帧属于
vlan 10。 - 当它向另一个 Access 口(同属
vlan 10)发送时,会移除这个标记,PC 收到的还是普通帧。
- 一个 Access 口只能属于一个 VLAN(比如,配置为
- 总结: Access 口是 PC 与 VLAN 之间的“大门”,PC 自己不知道 VLAN 的存在。
2. Trunk Port (中继端口)
- 功能: 用于交换机与交换机之间的连接。
- 特点:
-
- 一个 Trunk 口可以承载(Trunk)多个 VLAN 的流量。
- 问题: 如果 VLAN 10 和 VLAN 20 的帧都从这个口发给对面的交换机,对面的交换机怎么区分哪个是哪个?
- 解决方案:IEEE 802.1Q (VLAN 标签)
-
- 当一个帧(来自 VLAN 10)要通过 Trunk 口发送时,交换机 A 会修改这个以太网帧,在“源 MAC”和“类型”字段之间,插入一个 4 字节的“VLAN 标签 (Tag)”。
- 这个 Tag 里写着:
VLAN ID = 10。 - 交换机 B 收到这个“带标签的帧”,一看 Tag,就知道“哦,这是 VLAN 10 的”,于是它移除 (Untag) 标签,然后只转发给它上面属于 VLAN 10 的 Access 端口。
- 总结: Trunk 口就像是 VLAN 之间的“高速公路”,802.1Q 标签就是给不同 VLAN 车辆贴上的“通行证颜色”。
四、 VLAN 间的通信(如何“穿墙”?)
VLAN 默认是隔离的。那如果财务部(VLAN 10)需要访问技术部(VLAN 20)的某台服务器,怎么办?
- 答案: 靠路由器 (Router) 或 三层交换机 (L3 Switch)。
- 流程(三层路由):
-
- 财务部 A (
192.168.10.5) 要访问技术部服务器 B (192.168.20.10)。 - A 发现 B 和自己不在同一个网段,于是 A 把数据包发给自己的网关(比如
192.168.10.1)。 - 这个“网关”其实就是路由器(或三层交换机) 上为 VLAN 10 创建的一个虚拟接口 (SVI)。
- 路由器(L3) 收到了这个包。它同时认识 VLAN 10(财务部)和 VLAN 20(技术部)。
- 路由器检查自己的路由表,发现
192.168.20.10位于 VLAN 20。 - 路由器再把这个包转发(路由)到 VLAN 20,最终 B 收到了数据。
- 财务部 A (
- 总结:
-
- VLAN 内(同VLAN) 通信,靠交换机(L2)。
- VLAN 间(跨VLAN) 通信,必须靠路由器(L3)。VLAN 让你能在这个L3设备上设置安全策略(ACL),比如“允许财务部访问技术部,但禁止市场部访问”。
