当前位置: 首页 > news >正文

计算机网络-数据链路层

目录

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 这个字节怎么办?接收方会误以为帧提前结束了。

解决方案(“填充”):

    1. 再定义一个“转义字符” ESC
    2. 发送方: 扫描数据。如果数据中出现了 SOHEOT,就在它前面插入一个 ESC 字符。如果数据中出现了 ESC,那就在它前面也插入一个 ESC
    3. 接收方: 扫描数据。如果发现 ESC 后面跟着 SOHEOTESC,就把前面的 ESC 删除,只保留后面的数据。如果发现一个单独的 EOT,就知道这是真正的帧结尾。
    • 现状: 在一些面向字符的异步通信(如 PPP 协议)中使用。
比特填充法 (Bit Stuffing)

这是最常用、最重要的一种方法,用于像以太网、HDLC、SDLC 这样的协议。

  • 方法: 不使用特殊字节,而是使用一个特殊的比特模式作为帧的开始和结束标志。这个标志通常是 01111110 (一个 0,跟着六个 1,再一个 0)。
  • 示例:01111110 [ 帧头...数据...帧尾 ] 01111110
  • 遇到的问题: 如果我的数据本身包含了 01111110 怎么办?
  • 解决方案(“0比特填充”):
    1. 发送方: 扫描数据(不包括标志位)。只要连续检测到 5 个 1,就立即在后面强制插入(Stuffing)一个 0
    2. 接收方: 扫描数据。只要连续检测到 5 个 1
      • 如果第 6 个比特是 0:就知道这个 0 是被发送方填充进去的,直接把它删除,还原原始数据。
      • 如果第 6 个比特是 1:就去看第 7 个比特。
        • 如果是 0(凑成了 01111110),就知道这是真正的帧结束标志。
        • 如果是 1M(凑成了 01111111),这通常是一个错误/中止信号。
  • 优点: 这种方法保证了在数据中永远不会出现 01111110 这个模式,因此该模式可以被唯一地用作帧的边界,非常高效和健壮。

差错控制

发现并处理”数据在传输过程中(从发送方到接收方)因为物理干扰(如电磁噪声、信号衰减)而发生的错误(比如 0 变成了 1)。

差错控制通常在数据链路层传输层都会实现,但它们的侧重点和方法有所不同。

差错控制主要包含两大块内容:

  1. 差错检测 (Error Detection): 如何发现数据出错了?(这是基础)
  2. 差错纠正 (Error Correction): 发现了错误后,怎么办
差错检测 - 如何发现错误

这是最常用也是最基础的技术。发送方会根据要发送的数据,计算出一个简短的“校验码 (Checksum)”,并将其附加到数据后面一起发送。接收方收到数据后,用相同的方法重新计算,并对比校验码是否一致。

1. 奇偶校验
  • 原理: 约定好,在发送的数据(一组比特)后面附加 1 位“校验位”,使得这一整串比特中 1 的个数要么总是奇数(奇校验),要么总是偶数(偶校验)。
  • 举例(偶校验):
    • 要发送数据 1010001 (有 3 个 1)。
    • 为了使 1 的总数是偶数,必须在后面添加一个 1
    • 最终发送 10100011
    • 接收方收到后,数一下 1 的个数。如果是偶数,就认为没错;如果是奇数,就知道出错了。
  • 缺点:太弱了。如果同时有 2 个比特出错了(比如一个 01,一个 10),1 的总数还是偶数,它就检测不出来了。它只能检测出奇数个比特的错误。
2. 校验和 - TCP/IP 在用
  • 原理: 这是奇偶校验的升级版。它将数据分割成若干个固定长度的小块(比如 16 比特),然后将这些小块相加,最后对这个“总和 (Sum)”取反码,得到的就是“校验和”。
  • 应用:传输层的 TCP、UDP 和 网络层的 IP 协议头部校验,用的都是这种方法。
  • 优点: 比奇偶校验强得多,实现简单(用加法)。
  • 缺点: 依然有一定概率漏掉某些类型的错误(比如两个块中对应的位互换了)。
3. 循环冗余码 - 数据链路层在用

这是目前数据链路层(L2)使用最广泛、最强大的检错技术。

  • 原理: 它不再使用加法,而是使用一种“模 2 除法”(本质是异或 XOR 运算)。
    1. 约定: 发送方和接收方事先约定一个“生成多项式”,它对应一个二进制数(比如 1011)。
    2. 发送方:
      • 在要发送的数据 D 后面补上 k0k 是生成多项式的位数减 1)。
      • 用这个新数据(D...000)模 2 除以约定的“生成多项式”。
      • 得到的“余数”(这个余数一定是 k 位)就是 CRC 校验码。
      • 发送方将这个“余数”替换掉数据末尾的 k0,然后发送出去。
    1. 接收方:
      • 收到完整的数据(数据 + CRC 余数)后。
      • 用它模 2 除以同一个“生成多项式”。
    1. 判断:
      • 如果余数为 0:恭喜,数据没有出错。
      • 如果余数不为 0:数据在传输中一定出错了。
  • 优点:检错能力极强。它能 100% 检测出所有奇数个比特错误、所有双比特错误以及(只要生成多项式选得好)绝大多数的突发错误。
  • 应用:以太网 (Ethernet) 帧尾的 FCS (帧校验序列)、Wi-Fi、SATA、PCIe 等,几乎所有 L2 协议都在用 CRC。
  • 举例:
    • 要发送的数据 (D): 11010 (5个比特),约定的生成多项式 (G):1011 (4个比特)
    • 第 1 步:确定 k 值并补 0
      • 生成多项式 G 的长度是 4 位。k = G 的长度 - 1 = 4 - 1 = 3
      • 因此,我们要在数据 D 的末尾补 k 个(即 3 个)0。补 0 后的数据为:11010000
    • 执行“模 2 除法”
      • 计算 11010000 % 1011, 计算得到的余数是 011。 这个 011 (k=3 位) 就是我们要求的 CRC 校验码,也叫 FCS (帧校验序列)
      • 发送方将数据末尾的 k0 替换成这个余数 011。 最终发送的数据帧 (T):11010011
    • 接收方的校验过程,接收方用收到的完整数据 11010011,除以同一个生成多项式 1011。 最终余数为 000, 数据没有出错,接收此数据。 假设数据在传输时,第 3 位发生了错误(0 变成了 1),接收方收到的错误数据是:11110011,最终余数为 110(不为 0)。接收方将丢弃这个数据帧。
差错纠正 - 怎么办

当接收方检测到错误后,有两种处理策略:

1. 自动重传请求 (ARQ - Automatic Repeat reQuest)

这是最常见的策略,也称为“向后纠错”。

  • 原理: 接收方只检测错误,不试图纠正错误。
  • 流程:
    1. 接收方通过 CRC/Checksum 发现数据包(帧)N 出错了。
    2. 接收方直接丢弃这个错误的数据包。
    3. 接收方不发送对 N 的“确认”(ACK)。
    4. 发送方在等待一段时间后,发现没有收到对 N 的 ACK(即超时 Timeout),就自动重新发送数据包 N
  • 举例:
    • 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)的流量控制,在控制范围和实现机制上有着本质的区别。

核心区别

  1. 控制范围不同:
  • 数据链路层(L2): 是节点到节点(Node-to-Node)或称“逐跳”(Hop-by-Hop)的控制。
  • 传输层(L4): 是端到端(End-to-End)的控制。
  1. 控制对象不同:
  • L2:控制的是两个直接相连的设备(如 电脑<->交换机,或 交换机<->路由器)之间的数据流。
  • L4:控制的是最初的发送主机(如你的电脑)和最终的接收主机(如谷歌服务器)之间的数据流。
  1. 目的不同:
  • L2:旨在防止中间设备(如交换机)的硬件缓存溢出。
  • L4:旨在防止最终接收主机(如服务器)的应用程序接收缓冲区溢出。
  1. 实现机制不同:
  • L2:在以太网中依赖 PAUSE 帧(802.3x);在 Wi-Fi 中依赖基于 ACK 的信道访问机制。
  • L4:TCP 协议使用滑动窗口机制,通过 ACK 报文中携带的“接收窗口大小 (rwnd)”字段来动态告知发送方自己还能接收多少数据。
详细举例

假设你的电脑(A)要给谷歌服务器(Z)发送大量数据。路径如下:

你(A) <--> 路由器R1 <--> 骨干网R2 <--> 谷歌服务器(Z)

场景 1:数据链路层 (L2) 流量控制
  • 发生地点:AR1 之间。
  • 触发条件: 你(A)的网卡是万兆网卡,但你的家庭路由器 R1 是个千兆老设备,处理能力较差。你(A)向 R1 发送数据帧(Frame)的速度太快了。
  • 发生过程:
    1. R1 的硬件接收缓存即将被填满。
    2. R1(作为接收方)立刻向 A(作为发送方)发送一个特殊的以太网帧,称为 PAUSE 帧。
    3. 你(A)的网卡收到 PAUSE 帧后,会立即暂停发送所有数据帧一小段时间(比如几毫秒)。
  • 关键点:
    • 这是一次本地对话。R2 和谷歌服务器 Z完全不知道AR1 之间发生了这次“暂停”。
    • 它控制的是物理链路上的数据流。
    • (注:现代有线以太网在家庭/办公环境中很少开启 L2 流量控制,因为 TCP (L4) 的控制更精细。但在数据中心等高性能环境中,它仍然很重要。)
场景 2:传输层 (L4) 流量控制
  • 发生地点:AZ 之间。
  • 触发条件: 你(A)的发送程序(比如百度网盘)疯狂发送数据,但谷歌服务器 Z 上的接收应用程序(比如 Web 服务器)因为 CPU 繁忙、在写磁盘等原因,来不及从系统缓冲区中读取数据。
  • 发生过程:
    1. 数据包(TCP Segment)到达 Z 的操作系统,被放入 TCP 接收缓冲区。
    2. Z 上的应用程序处理缓慢,导致这个缓冲区即将被填满。
    3. Z 的 TCP 协议栈在回复 ACK 确认包时,会更新其头部的 Window Size (rwnd) 字段,比如设置为 0 (称为“零窗口”)。
    4. 这个 ACK 包跨越 R2R1,原路返回到你(A)的电脑。
    5. 你(A)的操作系统(TCP 协议栈)收到这个 rwnd=0 的 ACK 后,理解了:“对方缓冲区满了”。
    6. 操作系统会立即停止发送新的数据(但会定期发送“零窗口探测”包,询问对方是否空闲了)。
  • 关键点:
    • 这是一次端到端的对话。中间的 R1R2 只是透传了这个 ACK 包,它们不关心rwnd 的值是多少。
    • 它控制的是逻辑连接上的数据流。

2 介质访问控制 (MAC)

信道划分(FDM, TDM, WDM, CDM)- 静态划分

预先就把整条马路(信道资源)强行分割成多个互不干扰的子车道(子信道),分配给每个用户。

  • 优点: 一旦分配,用户就独占自己的子车道,绝不会发生冲突。
  • 缺点:资源浪费。如果你被分配了车道,但你没有数据要发(比如在看网页发呆),你的车道就空着,别人再忙也不能用。
  1. FDM (Frequency Division Multiplexing) - 频分多路复用
    • 原理: 按频率划分。
    • 类比:收音机。整片空域(介质)被划分为 FM 91.5, FM 101.7 等不同频段(子信道)。每个电台(用户)使用自己的频段广播,互不干扰。
    • 应用: 早期电话干线、有线电视 (CATV)。
  1. 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)。
  1. WDM (Wavelength Division Multiplexing) - 波分多路复用
    • 原理: 这是光纤专用的 FDM。
    • 类比: 在一根光纤里,同时传输不同颜色(波长) 的光信号。每种颜色的光都是一个独立的子信道。
    • 应用:光纤骨干网(这是实现超高带宽的基石)。
  1. 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-坚持的改进,用于时隙信道)
      1. 监听。 2. 如果空闲,以 概率 p 发送;以 概率 1-p 延迟到下一个时隙再监听。 3. 如果忙碌,持续监听,一旦空闲,执行第 2 步。
    • 优点:折中方案。通过概率 p 来平衡贪婪和效率。
3. CSMA/CD(以太网的“交通规则”)

CSMA 解决了“发送前”的问题,但没解决“发送中”的问题:万一 A 和 B 同时监听到空闲,同时决定发送,怎么办?

CSMA/CD(碰撞检测)解决了这个问题。

  • CD (Collision Detection):“边说边听”(Listen While Talk)。
  • 适用:有线以太网 (Ethernet)。(特别是早期使用集线器 Hub 的网络)
  • 完整流程(经典面试题):
    1. 先听 (CS): 监听到信道空闲。
    2. 开说 (Send): 开始发送数据帧。
    3. 边说边听 (CD): 在发送数据的同时,持续监听信道。
      • 如果没监听到异常(回来的信号和发出去的一样):说明没冲突,发送成功。
      • 如果监听到异常(回来的信号和发出去的不一样):说明发生冲突!
    1. 冲突处理:
      • 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 失效了。

  • 为什么失效?
    1. 无法“边说边听”: 无线信号是向四面八方传播的。发送时,自己的信号功率太强,会彻底“淹没”掉(听不到)别人微弱的信号。
    2. “隐蔽站”问题 (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): 核心思想是“我不是去检测冲突,我是要尽一切努力去 避免 冲突”。
  • 主要机制:
    1. 先听 (CS): 监听到信道空闲。
    2. 随机等待 (关键): 即使信道空闲,也不能马上发。必须再等待一个随机的“退避时间”(DIFS, EIFS)。如果等待期间监听到别人开始发了,就冻结自己的计时器,等别人发完再说。
    3. RTS/CTS (可选):
      • 在发送大数据帧之前,先发送一个极短的 RTS (Request to Send) 帧:“(AP),我想发个包,可以吗?”
      • AP (Access Point) 收到后,会广播一个极短的 CTS (Clear to Send) 帧:“(所有人),都闭嘴,A 要发包了!”
      • 作用: 那个“隐蔽站”C 虽然听不到 A 的 RTS,但它能听到 AP 的 CTS,于是 C 就会保持安静,从而避免了冲突。
    1. ACK (必须):
      • 由于无线信道极其不可靠(干扰多),每一个数据帧在被正确接收后,接收方都必须回复一个 ACK 确认帧。
      • 如果发送方在规定时间内没收到 ACK,它就认为数据丢失了(可能被干扰,也可能是冲突了),立即重传。

3 局域网

局域网(LAN)是在一个有限地理范围内(如一栋建筑、一个家庭、一个校园)的网络。

而“以太网”就是当今世界用来构建有线局域网的绝对主流技术标准。你家里和办公室里用来插网线的那个系统,就是以太网。

以太网 (Ethernet) 与 IEEE 802.3

  1. 什么是以太网?
    • 以太网(Ethernet)是一套技术规范,它定义了如何在局域网(LAN)中构建物理网络、使用什么线缆、如何发送和接收数据帧(Frame)。
    • 它是目前应用最广泛的局域网技术,没有之一。
  1. 什么是 IEEE 802.3?
    • IEEE(电气与电子工程师协会)是制定标准的老大。
    • 802 委员会是 IEEE 内部专门负责局域网和城域网标准的。
    • 802.3 就是以太网的正式标准代号。
    • (顺便一提,IEEE 802.11 就是 Wi-Fi 的标准代号)。
    • 所以,以太网 和 IEEE 802.3 基本可以互换使用,后者是前者的“学名”。
  1. 以太网的演进:
    • 早期(已淘汰): 使用总线型拓扑和同轴电缆,所有设备共享一根总线,必须使用 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:5E00-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),并过滤它们之间的流量。
  • 工作原理:
    1. 网桥有两个端口,Port A 和 Port B,分别连接两个网段。
    2. 它会监听两个网段的流量,学习每个网段上有哪些 MAC 地址,并建立一个 MAC 地址表。
    3. 决策(过滤): 当一个数据帧从 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 地址”。
  • 过程:
    1. 交换机刚开机时,MAC 地址表是空的。
    2. 主机 A(MAC AAAA)通过 Port 1 发送了一个数据帧(比如一个 ARP 请求)。
    3. 交换机收到这个帧,它立即检查帧的源 MAC 地址(AAAA)和入口端口(Port 1)。
    4. 交换机在 MAC 地址表中创建一条新条目:{ "MAC": "AAAA", "Port": 1 }
    5. 同理,主机 B(MAC BBBB)通过 Port 2 回复了主机 A。
    6. 交换机收到这个回复,创建新条目:{ "MAC": "BBBB", "Port": 2 }
  • 老化 (Aging): 这个表项不是永久的。如果交换机在一段时间内(默认 5 分钟)没有再从 Port 1 收到 AAAA 的帧,它会认为主机 A 可能关机或拔线了,就会删除这条表项,以保持表的时效性。
2. 转发/过滤
  • 目的: 根据 MAC 地址表,决定数据帧的去向。
  • 原理: 交换机检查数据帧的“目的 MAC 地址”。
  • 过程:
    1. 一个帧从 Port 1 进来,其目的 MAC 是 BBBB
    2. 交换机查询 MAC 地址表,寻找 BBBB
    3. 决策(三种情况):
      • 情况 A:精确转发
        • 交换机在表中找到了! 表项显示 BBBB 位于 Port 2。
        • 动作:交换机将该帧仅从 Port 2 发送出去。
      • 情况 B:未知单播(泛洪/广播)
        • 交换机在表中找不到BBBB 的记录(可能主机 B 还没发过言)。
        • 动作:交换机没辙,只能将该帧“泛洪”——即广播到除 Port 1(入口)之外的所有其他端口。
        • (局域网内其他主机收到后,发现 MAC 不匹配会丢弃;主机 B 收到后会处理,并且当 B 回复时,交换机就能“自学习”到 B 的位置了。)
      • 情况 C:过滤
        • 交换机在表中找到了! 但表项显示 BBBB 位于 Port 1。
        • 动作: 交换机知道“发送方和接收方在同一个端口上”(比如连着同一个老式 Hub)。
        • 它会直接丢弃这个帧,因为没必要再把它发回去了。
3. 消除回路
  • 问题: 为了提高网络的可靠性,管理员可能会在两台交换机之间连接两条或多条物理线路(冗余备份)。这会形成一个物理环路。
  • 环路的灾难:
    1. 一个广播帧(如 ARP)进入环路。
    2. 交换机 A 会把这个帧从所有端口(包括两条链路)发给 B。
    3. 交换机 B 收到两份广播帧,它又会把这两份帧从所有端口(包括两条链路)发回给 A。
    4. A 收到四份,再发回给 B……
    5. 这个过程无限循环,帧被指数级放大,在 1 秒钟内就会塞满所有带宽,导致网络瘫痪。这就是“广播风暴”。
  • 解决方案:STP (Spanning Tree Protocol) - 生成树协议 (IEEE 802.1D)。
  • STP 原理(简化版):
    1. 交换机们开机后,会互相发送一种叫 BPDU 的“配置消息”。
    2. 它们通过“选举”,在全网选出一个“老大”(根桥 Root Bridge)。
    3. 所有其他交换机计算出一条到达“老大”的“最短路径”。
    4. 如果存在多条路径(即环路),STP 会逻辑上“阻塞”那些多余的(非最短) 路径上的端口。
    5. 这个端口的物理线缆还插着,灯也可能亮着,但交换机不允许任何数据帧(BPDU 除外)通过这个端口。
    6. 这样,网络在逻辑上就形成了一个没有环路的“树状结构”。
    7. 容错: 如果“最短路径”上的那根线断了,STP 会在几十秒内检测到,并自动“解封”那个之前被阻塞的备份端口,网络恢复通畅。

5 协议

ARP (Address Resolution Protocol) (地址解析协议)

核心功能: 在同一个局域网内,通过一个已知的 IP 地址,查询(广播)得到该 IP 对应的物理 MAC 地址。

工作流程:

  1. 场景: 主机 A (IP: 1.1) 想给主机 B (IP: 1.2) 发数据,但只知道 B 的 IP。
  2. 检查缓存: A 先检查自己的“ARP 缓存表”里有没有 1.2 的记录。
  3. 广播询问: 缓存中没有。A 向局域网内所有人(广播 MAC: FF:FF:FF:FF:FF:FF)发送一个请求:“你好!请问谁的 IP 是 1.2?请告诉我你的 MAC 地址。”
  4. 单播响应 (ARP Response):
    • 局域网内所有其他主机(C, D...)收到广播,发现 IP 不匹配,丢弃该请求。
    • 主机 B 收到广播,发现 IP 匹配,立即单独(单播)向 A 回复一个响应:“你好 A!我就是 1.2,我的 MAC 地址是 [B的MAC地址]。”
  1. 更新缓存: A 收到 B 的响应,将 (1.2 = [B的MAC地址]) 这条记录存入自己的 ARP 缓存表,然后开始发送数据。
  • 应用场景:所有基于以太网(和 Wi-Fi)的局域网通信都必须依赖 ARP。它是 IP (L3) 和 MAC (L2) 之间的核心粘合剂。

RARP(逆地址解析协议)

核心功能: (与 ARP 完全相反)一个设备在只知道自己物理 MAC 地址的情况下,广播询问网络,希望有服务器能告诉它“你应该使用哪个 IP 地址”。

工作流程:

  1. 场景: 一台没有硬盘的“无盘工作站”开机。
  2. 广播询问 (RARP Request): 该工作站向局域网广播:“你好!我的 MAC 地址是 [我的MAC地址],谁能给我分配一个 IP 地址?”
  3. 单播响应 (RARP Response): 网络上的 RARP 服务器收到请求后,在自己的配置表里查找这个 MAC,然后回复:“OK,你应该使用 IP 1.2。”

应用场景:

  • 已淘汰 (Obsolete)。
  • 被谁取代: 被 DHCP (动态主机配置协议) 完美取代。
  • 为什么: RARP 只能分配一个 IP。而 DHCP 功能强大得多,它在分配 IP 的同时,还能提供子网掩码、网关地址、DNS 服务器地址等所有上网必需的信息。

PPP (Point-to-Point Protocol) - 点对点协议

核心功能: 在两个设备(“点对点”)之间建立一个专用的、直接的数据链路连接。

关键特性:

  1. 身份验证: 这是它与以太网最大的不同。PPP 可以在链路建立时,要求对方提供用户名和密码(使用 PAP 或 CHAP 协议进行验证)。
  2. 链路协商 (LCP): 双方可以协商链路参数,如“最大帧大小 (MRU)”。
  3. 网络层协商 (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 分别代表不同部门,都插在交换机上)

这会带来三个严重问题:

  1. 广播风暴 (Broadcast Storm):
    • 任何一台电脑(比如财务部的 A)发送一个广播包(如 ARP 请求:“谁是网关?”)。
    • 这个广播包会被所有交换机无条件地泛洪 (Flooding)所有端口
    • 结果:全公司所有电脑(无论你是财务、技术还是市场部)都会收到并处理这个广播。
    • 后果: 电脑数量一多,网络中会充斥着巨量的广播流量,严重消耗网络带宽和 CPU 资源,导致网络卡顿。
  1. 网络安全 (Security):
    • 由于所有人在同一个局域网,技术部员工(B)可以轻易地使用“抓包”工具(如 Wireshark)来嗅探网络流量。
    • 后果: 尽管交换机能阻止单播嗅探,但 B 还是能轻易截获到所有广播流量,甚至能通过“ARP 欺骗”等手段,窃听到财务部 A 的敏感数据。
  1. 管理困难 (Management & Flexibility):
    • 场景: 市场部的一个员工(C),要从 1 楼搬到 2 楼(技术部旁边)的空工位。
    • 后果: 为了让他还能连上市场部的网络(或者出于安全考虑不让他连上技术部的网络),网络管理员必须跑到 2 楼的机柜,重新跳线(把 C 的网线从“技术部交换机”上拔下来,插到“市场部交换机”上,如果有的话)。这非常繁琐。

二、 VLAN 是什么?(解决方案)

VLAN 就是用来解决上述所有问题的。

VLAN 就像是在你那个“大平层”的物理局域网里,建起了“虚拟的、看不见的墙”。

在交换机内部,通过逻辑配置,把物理端口划分到不同的“”里。每个组就是一个 VLAN。

  • VLAN 10: 命名为“财务部”
  • VLAN 20: 命名为“技术部”
  • VLAN 30: 命名为“市场部”

(同样的物理布局,但在交换机内部,端口被逻辑划分为 VLAN 10, 20, 30)

VLAN 带来的好处:
  1. 隔离广播域 (解决广播风暴):
    • 现在,财务部(VLAN 10)的 A 发送一个广播包。
    • 交换机只会将这个包转发给其他同属于 VLAN 10 的端口
    • VLAN 20 和 30 的端口(技术部和市场部)根本看不见这个包
    • 结果: 广播被“墙”挡住了,被限制在了各自的 VLAN 内部。一个大的广播域被切分成了 3 个小的广播域。
  1. 增强安全性 (解决安全问题):
    • VLAN 之间是默认“老死不相往来”的
    • 技术部(VLAN 20)的 B,无法直接访问或嗅探到财务部(VLAN 10)的 A。它们在逻辑上根本就不在一个网络里
    • 这种隔离是在交换机(L2)层面实现的,非常安全。
  1. 提高灵活性 (解决管理问题):
    • 场景: 市场部(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 口是 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)
  • 流程(三层路由):
    1. 财务部 A (192.168.10.5) 要访问技术部服务器 B (192.168.20.10)。
    2. A 发现 B 和自己不在同一个网段,于是 A 把数据包发给自己的网关(比如 192.168.10.1)。
    3. 这个“网关”其实就是路由器(或三层交换机) 上为 VLAN 10 创建的一个虚拟接口 (SVI)
    4. 路由器(L3) 收到了这个包。它同时认识 VLAN 10(财务部)和 VLAN 20(技术部)。
    5. 路由器检查自己的路由表,发现 192.168.20.10 位于 VLAN 20。
    6. 路由器再把这个包转发(路由)到 VLAN 20,最终 B 收到了数据。
  • 总结:
    • VLAN 内(同VLAN) 通信,靠交换机(L2)
    • VLAN 间(跨VLAN) 通信,必须靠路由器(L3)。VLAN 让你能在这个L3设备上设置安全策略(ACL),比如“允许财务部访问技术部,但禁止市场部访问”。

http://www.dtcms.com/a/554798.html

相关文章:

  • 网站开发中网页之间的链接形式asp 制作网站开发
  • 最近用的Android常用调试log
  • 深入理解C语言标准库:<stdbool.h>和<stdint.h>
  • 建站技术服务百度网页无法访问如何解决
  • 从零开始学习Redis(四):分布式缓存(Redis集群)
  • oj进制的回文数(存在些许疑惑
  • 为什么不推荐免费建站网站怎么申请微信认证
  • 2025.10.31写题
  • 兰州酒店网站建设招聘网58同城求职信息
  • 如何找招标信息
  • 北京盛赛车网站开发嘉定php网站开发培训
  • 爬虫数据去重:BloomFilter算法实现指南
  • 怎样自己做一个网站学校网站建设市场
  • 网站地图开发一站式做网站开发
  • JavaScript基础提升【三】
  • 百度网盘 做网站图床美区能和国区家庭共享吗
  • 基于3DGIS+BIM的智慧园区运维平台价值分享
  • atsec出席2025 PCI社区会议
  • 白云区建材网站建设推广wordpress换了ip
  • 旌阳区黄河开发建设网站建设工程施工司法解释
  • 外包网站设计哪家好怎样建立网站平台
  • 海南省工程建设定额网站网站建设的SOWT分析
  • 第1讲:彻底解决C++中资源泄露
  • CentOS 7上运行C程序
  • 网站建设有什么证.net程序员网站开发工程师
  • 安信可(Ai-Thinker)WiFi系列模块全解析:选型指南与应用洞察
  • 科技建站网站源码黄金网站app视频播放画质选择
  • 品牌网站设计图片企业软件管家
  • NetSuite 如何删除未生成的Memorized Transaction?
  • 秦皇岛优化网站排名邹城网站建设