网络(5):数据链路层、以太网帧与交换机

0 阅读6分钟

5. 数据链路层(Data Link Layer)

1. 核心定位:它在做什么?

image.png相邻节点之间建立逻辑链路,把网络层交下来的 IP 数据报封装成帧,在链路上传送,并尽量保证无差错(或至少能发现差错)。

对比物理层数据链路层
比喻“路”——电缆、光纤、调制方式、比特流“车”——成帧、寻址(MAC)、差错控制
关心什么0/1 如何在介质上传输一帧从哪到哪、是否损坏、多机如何共用信道

与上层的关系:网络层负责端到端、跨网段;链路层负责一跳(hop)——本机到下一跳路由器或同一局域网内的另一台主机。

MAC 地址:链路层的“设备身份证”

  • 长度与形式:以太网 MAC 为 48 位,常写作 AA:BB:CC:DD:EE:FF 六组十六进制。
  • 作用:在同一链路 / 同一广播域内标识网卡;交换机查表转发时看的是 目的 MAC

为什么已有 IP 还要 MAC?

如果说 IP 是收件地址(北京路 1 号),MAC 是身份证号(这台设备是谁)。在局域网内传送数据包时,仅有 IP 是不够的,因为网卡只认 MAC 地址

跨网段通信时:主机仍用 ARP下一跳 IP 解析成 MAC,把帧交给网关或下一跳;IP Header 里的目的 IP 始终不变(源路由除外),而每跳的以太网帧头里的目的 MAC 会变


2. 三大支柱

2.1 封装成帧(Framing)

image.png 物理层只提供连续比特流,链路层必须划出帧的边界

字段名称字节大小 (Bytes)作用
前导码 (Preamble)8告诉接收方网卡:“注意,数据要来了!”用于时钟同步。
目的 MAC 地址6本跳接收者的物理地址。
源 MAC 地址6本跳发送者的物理地址。
类型 (Type)2标识里面装的是什么协议(通常是 0x0800 代表 IP 协议)。
数据部分 (Payload)46 - 1500真正传输的内容(IP 数据报)。
帧校验序列 (FCS)4“防伪防撞”。利用 CRC 算法确保数据在传输中没被干扰。
  • 帧定界:用起始标志、长度字段或特殊比特模式标明一帧从哪里开始、到哪里结束。
  • 透明传输:若数据里恰好出现与定界符相同的比特/字节序列,要通过比特填充字节填充等方法,使接收端仍能正确还原载荷,对上层“透明”。

常见实现里,以太网用前导码 + 帧起始定界;PPP 等则用标志字节与转义规则。

2.2 差错检测(Error Detection)

image.png 信道噪声、干扰会导致比特翻转。链路层普遍在帧尾加检错码,接收端计算后与帧内携带的值比对;不一致则丢弃该帧(通常不负责纠错,纠错多在上层或物理层编码里做)。

  • CRC(循环冗余校验):工业界事实标准(如以太网 FCS 常用 CRC-32)。数学上不能证明“一定没错”,但碰撞概率极低,硬件实现便宜。

2.3 可靠传输(Reliable Delivery)——并非所有链路都需要

  • 检错 + 丢弃:以太网等多数局域网链路不重传,由 TCP 等上层保证可靠。
  • 确认与重传:在误码率高或需要本地可靠性的场景,使用 ACK超时重传;经典机制包括停止等待回退 N选择重传等滑动窗口思想。

3. 两类信道与介质访问控制

image.png

3.1 点对点信道

一对一链路,没有“别人抢信道”的问题,协议相对简单。

  • 代表PPP(拨号、部分广域网接入)。负责成帧、链路建立/认证、可选的简单差错检测等。

3.2 广播信道(共享介质)

多台主机共用同一传输介质,核心问题是:同时发送会冲突(碰撞)

  • 有线以太网(经典半双工)CSMA/CD——载波监听多路访问 / 冲突检测。现代交换机端口多为全双工点对点,碰撞域被缩小到几乎不存在,CSMA/CD 在日常交换式以太网中已很少遇到。
  • 无线(WLAN):无法像有线那样可靠地“边发边听”,常用 CSMA/CA(冲突避免)配合退避、RTS/CTS 等减少隐藏终端问题。

4. 链路层设备:交换机(Switch)

image.png

Hub

Hub 是交换机出现之前的产物,它工作在物理层。可以把它看作一根折叠起来的总线。

当 A 电脑给 B 电脑发数据时,Hub 根本不看数据包里的 MAC 地址。它会把信号增强后,直接转发给除了 A 以外的所有接口。

核心缺陷

  • 共享带宽:如果这是一个 100M 的 Hub,连了 10 台电脑,每台电脑平均只能分到 10M。
  • 冲突域(Collision Domain):因为它本质上是一根导线,如果 A 和 C 同时说话,信号就会在电缆里“撞车”变成噪音。
  • 安全性极差:D 电脑只要想听,就能通过抓包工具看到 A 发给 B 的所有内容。

Switch

为了解决 Hub 的问题,我们发明了交换机(Switch)。

交换机通过 MAC 地址表实现了点对点通信,隔离了“冲突域”。A 给 B 说话,C 不会听到,也不会撞车。

学习:收到帧时看源 MAC + 入端口,写入/刷新 MAC 地址表;可顺带提老化时间 转发:看目的 MAC → 表里有端口则单播到该端口;没有则泛洪;目的端口与入端口相同则丢弃等。

但是,交换机无法隔离“广播域”:

  1. 在局域网中,有些协议(比如 ARP 寻找 MAC 地址、DHCP 获取 IP)必须通过“广播”来完成。
  2. 如果一个交换机连接了 1000 台电脑,其中一台发一个 ARP 广播,交换机会把这个包转发给剩下的 999 台。
  3. 当网络规模大到一定程度,这种“广播风暴”会占用大量 CPU 和带宽,导致网络瘫痪。

VLAN

VLAN (Virtual Local Area Network) 的出现,就是为了在不增加物理路由器的情况下,把一个大的广播域切分成多个小的、逻辑上的广播域。

它在标准的以太网帧头里加了一个“标签”(802.1Q Tag),里面写着这个数据包属于哪个 VLAN。

它的核心作用

  • 隔离广播域:即使大家连在同一个物理交换机上,VLAN 10 的广播包也绝对传不到 VLAN 20。这就像在同一个大办公室里建了几间“隔音房”。
  • 安全性:财务部的电脑(VLAN 10)和宿舍区的电脑(VLAN 20)在二层是完全隔离的。如果宿舍区有人中了木马企图扫描局域网,他根本找不到财务部的机器。

与集线器(Hub)、路由器对比

特性集线器 (Hub)交换机 (Switch)路由器 (Router)
工作层次物理层(再生比特)数据链路层(按 MAC 转发)网络层(按 IP 转发)
碰撞域所有端口同一碰撞域每个端口独立碰撞域(全双工下几乎无碰撞)各接口多为独立网段,二层上自然分隔冲突域
转发方式广播式复制到所有端口按 MAC 表定向转发(未知则泛洪)查路由表按 IP 转发;未知单播走路由/默认路由,不做二层泛洪
广播域不隔离默认不隔离(整台交换机同一广播域;VLAN 可划分)隔离(不将本子网广播转发到其他三层接口)