🌐 第五章 以太网与无线局域网
📄 一句话概括

以太网不是"一根网线",而是一套让许多台设备共用同一段介质的规矩(IEEE 802.3)。名字里的 Ether(以太)是 19 世纪物理学家假想的传播光的介质——后来证明根本没有这种东西,但名字留下来了,因为今天介质早就换成了双绞线和光纤,规矩却一点没变。它要解决的难题从头到尾只有一个:一段介质上挂着很多台设备,谁先说话? 这个难题它分三代解决——总线型(大家一起抢)、集线器(外观变星型,本质还是抢)、交换机(每口独占,不用抢了),于是 CSMA/CD 从"主力规矩"退成了"备用条款"。而它真正"焊死不变"的东西是那个帧格式:目的 MAC / 源 MAC / 类型 / 数据 / FCS,从 1980 年至今一个字段没动——MTU 1500 和"不足 46 字节要填充"的出处,全在这十几个字节里。

📝 本节和前面几节的关系

上一节 5.1 把"同网段走交换机、跨网段走路由器"这条分岔和两种介质认全了。本节把有线那一半(以太网)单独拿出来讲透,或者说:本节是"以太网"这个名字的正式履历。

  • 3.2 网络接口层与网际层:本节正式走进网络接口层,看它"只管一段"的具体做法
  • 3.6 数据的称谓:本节的主角"数据帧"就是那一层的数据的名字;"只有数据帧带帧尾校验"这句话,本节给出实物(FCS)
  • 3.4 数据打包与 MTU:当时说"MTU 1500 是这一层对上层数据的大小限制",本节把这个 1500 的来源指出来
  • 3.16 ARP 与 MAC 地址:ARP 名册里那些 MAC 地址,就在本节这个帧头里
  • 3.9 单播、广播、组播:广播帧长什么样,本节给地址(FF:FF:FF:FF:FF:FF)
  • 2.2 网络设备:集线器为什么被淘汰、交换机为什么能取代它,本节给出技术原因
  • 2.3 链路 / 5.1 介质共用:本节的"介质"就是链路里那一根线

一、以太网是什么:一套"共用介质"的规矩

以太网(Ethernet)= IEEE 802.3,是网络接口层里负责有线的那一半(无线那一半是 802.11,也就是 Wi-Fi)。

它的名字来源值得记一下:Ether(以太) 是 19 世纪物理学家假想的一种充满宇宙、传播光的介质。后来爱因斯坦那套理论证明它根本不存在,但 IEEE 定标准的时候这个名字已经叫开了,就留了下来。

这件事本身就说明了以太网的性格:它管的从来不是"哪种线",而是"线怎么被共用"。 今天你桌上那根 Cat6 网线、机房里那根光纤,物理材质和 1980 年的同轴电缆完全不同,可跑的还是同一套以太网。

那么这套规矩管的是什么?三个字——谁先说。

❗ MAC 这个名字的答案

你可能一直纳闷 MAC 到底是谁的缩写。答案就在本节:

MAC = Media Access Control,媒体访问控制。

  • Media(媒体) = 那段公用的介质(线、电波)
  • Access(访问) = 谁在什么时候可以用它
  • Control(控制) = 定这套先后秩序

所以"以太网"是整套规矩的名字,"MAC"是这套规矩里管"谁先用"的那部分;而 MAC 地址,就是这套秩序发给每张网卡的编号——有了号,规矩才能点名。

以太网能活到今天、把当年的竞争对手(令牌环、FDDI、ATM)全熬死,靠的是它把变的部分和不变的部分分得很干净:

变的部分 不变的部分
内容 速率(10M → 100M → 1G → 10G → 400G)、介质(同轴 → 双绞线 → 光纤)、形态(总线 → 集线器 → 交换机) 帧格式、MAC 地址、对上层提供的接口
意义 随硬件进步随时升级 上层完全不用改(收 1.6 分层的价值)

这就是为什么换个网线、换个交换机、换个网速,你的 IP、TCP、HTTP 一个字都不用动。

二、以太网的三代形态:从抢线到不撞

同样是"以太网",在不同年代长得完全不一样。判断它要不要"抢线",看的不是外观,而是逻辑上介质是不是共用。

第一代 · 总线型 第二代 · 集线器 第三代 · 交换机
长什么样 一根同轴电缆串起所有机器 外观成了星型,都连到 HUB 每台设备独占一个端口
介质属性 共享(一条线大家用) 还是共享(HUB 会把信号复制给所有口) 独占(每口一条独立通道)
双工 半双工(说的时候不能听) 半双工 全双工(能同时收发)
要不要抢线 要,靠 CSMA/CD 要,靠 CSMA/CD 不用了,物理上不可能撞
一句话 一条线上一群人抢话筒 换了形状,还是同一个话筒 每人一个话筒,互不干扰
📝 集线器为什么会被淘汰(收 2.2)

集线器(HUB)是物理层设备——它不懂地址、不做判断,收到信号放大一下就从所有其他口送出去。后果有两个:

  1. 被迫收听:A 和 B 在通话,C、D 也被迫收到每一帧(只能靠网卡自己过滤丢掉),带宽被白白占掉
  2. 不能同时说:整个 HUB 就是一个冲突域,任何时刻只能有一台机器发言

而交换机是链路层设备——它认得帧里的目的 MAC,只从"该去的那个口"送出去。于是每一口都成了一个独立的冲突域:你和交换机之间那段线,就是你一个人专用的。这就是"喊话被淘汰、认门牌的上位"的技术原因。

三、CSMA/CD:撞了怎么办

上一节 5.1 提过它的名字,这里正式拆开。CSMA/CD = Carrier Sense Multiple Access with Collision Detection,拆成三段读正好就是它的三步动作:

缩写 全称 干什么
CS Carrier Sense 先听:听线上有没有人在说话,有就等
MA Multiple Access 多人访问:这段介质是大家共用的,谁都能发
CD Collision Detection 边说边听:一边发一边听,撞上了立刻停

撞上之后的三步收尾:

  1. 立刻停,别把整帧废话发完
  2. 发一个堵塞信号(Jam),让所有人知道刚才那一下撞了,大家都别当真
  3. 各自随机等一段时间再重试——注意是"随机",不是固定值。如果大家都等一样长,下一轮会再撞一次
💡 为什么说"随机等"是这个规矩的精髓

抢线的本质是分散。所有机器都用同一个规则,唯一能打破对称的就是随机数。这也是 Wi-Fi 那套 CSMA/CA 里"随机退避"的同一个思路(收 5.1)。

那今天还用得上它吗? 用不上,但得懂。

一句话收:有线当年是"撞了再补救",无线是"尽力别撞";而现在常见的有线网络,连补救都不需要了。

四、以太网帧:十几个字节里的全部信息

这是以太网最不变、也最该记住的部分。

字段 长度 装什么 谁在看
前导码 + SFD 8 字节 一串交替的 0/1,让接收方把时钟对上 网卡的物理部分
目的 MAC 6 字节 送给谁 交换机看这个
源 MAC 6 字节 谁发的 交换机(顺便记进 MAC 地址表)
类型 2 字节 里面装的是什么 接收方的网卡(决定交给谁处理)
数据 46~1500 字节 上一层交下来的东西(通常是 IP 数据包) 上层
FCS 4 字节 帧尾校验(CRC),用来发现传输错误 接收方的网卡

几个要单独讲的点:

① 前导码不算帧。 严格来说"以太网帧"是从目的 MAC 开始的,前导码只是"预备动作"——这 8 个字节不参与长度计算,抓包软件里有时能看到、有时直接被网卡吃掉。

② 类型字段是"交接单"。 这就是 3.6 说的"上一层怎么知道里面装的是什么"的答案:

类型值 里面装的是
0x0800 IPv4 数据包
0x0806 ARP(收 3.16)
0x86DD IPv6 数据包
0x8100 VLAN 标签(带标签的帧)

③ FCS 是帧尾唯一的检查。 这就是 3.6 那句"只有数据帧带帧尾校验"的实物。它只做发现(发现错了就丢帧),不做补救——补不补是上层(TCP)的事(收 3.18)。

④ 帧头 14 字节。 目的 6 + 源 6 + 类型 2 = 14。抓包时经常看到这个数字,记住它。

⑤ 里面的地址只在"这一段路"有效。 帧头里的两个 MAC,每经过一个路由器就换一套:从你电脑到网关是一组,从网关到下一跳是另一组。而同一份数据里的 IP 地址自始至终不变(收 3.2 的"双层门牌")。

五、帧长的两条硬线:64 和 1518

以太网帧不能太长,也不能太短:

数值 怎么算出来的
最小帧 64 字节 帧头 14 + 数据最少 46 + FCS 4 = 64
最大帧 1518 字节 帧头 14 + 数据最多 1500 + FCS 4 = 1518

由此推出两件事:

❗ 广播帧长什么样(收 3.9 / 3.16)

目的 MAC 全是 F,即 FF:FF:FF:FF:FF:FF,这就是广播帧。交换机收到它,会从除来源口之外的所有口送出去。

ARP 请求用的正是它——3.16 里你 arp -a 看到的那本名册,最初的来源就是一次"用广播问、用单播答"。

六、最小帧为什么是 64 字节

这是本节最值得琢磨的一个"为什么",因为它是一个倒推出来的数字。

回头看 CSMA/CD 的要求:发送方必须"边说边听"——一边发,一边听着线上有没有撞车。这就带来一个隐藏条件:

在帧发完之前,撞车必须已经传回来了。 否则发送方已经收工散场,撞车才到,谁也发现不了。

而信号在线上跑是要花时间的(哪怕只有几百米,也有延迟)。算一下最坏情况:A 在线的这头,B 在线的那头。A 刚发出的信号要跑到 B 那里,B 才可能开始发(它此时没听到有人说话);B 的信号再跑回来,A 才知道撞了。

所以:一帧的发送时间 ≥ 信号跑完最长往返路线的时间。

按当年的 10 Mbps、最长 2500 米的同轴电缆网络一算,最少得发 64 字节(512 位),才能保证"撞车一定听得见"。

💡 这个数字今天还有意义吗

物理上的理由已经消失了——全双工交换机下根本不会撞。但规矩留着,因为改规矩比留规矩贵得多:全世界几亿张网卡、几十年的软硬件都按 64 字节写死了。所以哪怕只发一个字节的 ping,也要填充成 64 字节的帧送出去。

这正好回答了一个常见困惑:"我明明只发了一个字节,为什么抓包看到 60 多字节?" ——其中一大半是填充和帧头。

七、今天你用的以太网:交换式 + 全双工

把上面几条拼起来,就是你家/公司里那套有线网的样子:

一台交换机 + 一堆双绞线(收 1.3 星型拓扑)= 最常见的交换式以太网。

"用不用抢线"这件事,已经被硬件消灭了。 但以太网并没有因此变简单——它只是把复杂度换了个地方:从"怎么抢"变成了"交换机怎么转发"(下一节的事)。

八、动手:Demo51 把以太网拆开看

🧪 目标

亲眼看到四件事:我的 MAC 长什么样、帧里到底有几个字段、MTU 1500 的边界在哪、一个帧的地址长什么样。

第 1 步|看本机所有网卡的 MAC。

getmac /v

一次列出所有网络适配器的物理地址和连接的名称。有线、无线、虚拟网卡各有一个——这正好印证了"MAC 属于网卡,不属于机器"(收 3.16)。

第 2 步|认出 MAC 地址里的厂商。

随意拿一个 MAC,看前 3 个字节(比如 00-1A-2B),去网上搜 IEEE OUI 00-1A-2B。

这就是厂商编号 OUI:IEEE 分配给每个厂商一段前缀,后 3 字节由厂商自己编号。所以同一个牌子的网卡,MAC 前三字节常常一样——家里几台同品牌设备的路由器列表里能直接看出来。

第 3 步|抓一个帧,把字段一个个对上。

装 Wireshark,选你的网卡,随便打开一个网页,停掉抓包,在列表里挑一个包,展开最上面的 Ethernet II 那一节:

抓包里的名字 对应本节表格
Destination 目的 MAC
Source 源 MAC
Type: IPv4 (0x0800) 类型字段

对照第四节那张表读一遍,十几个字节就不再是抽象名词了。

第 4 步|抓一个 ARP,看广播帧。

过滤栏输入 arp,回车。挑一个 Request 包展开看:

arp

它的 Destination 是 ff:ff:ff:ff:ff:ff——这就是广播帧的实物,类型是 0x0806(收 3.9 / 3.16)。

第 5 步|看 MTU 实际值。

netsh interface ipv4 show subinterfaces

看 MTU 那一列的 1500——这就是第五节那个数字,在你的机器上是活的。如果是 VPN 或者拨号连接的虚拟网卡,这一列往往更小(常见 1400 上下),这就是"连了 VPN 有些网站打不开"的一类原因。

第 6 步|亲手撞一次 MTU 的边界(收 3.4)。

先查自己的网关 IP(ipconfig 里看默认网关),然后:

ping -f -l 1472 192.168.1.1
ping -f -l 1473 192.168.1.1

第一条应该通,第二条报"需要拆分数据包但已设置 DF 标志"。

账要算清:-l 1472 是 IP 层的负载长度,再加上 IP 头 20 + ICMP 头 8 = 28,正好 1500。所以 1472 是这条路上能塞的极限,1473 就超了。这个 1500 就是本节第五节的"最大帧"倒推上来的。

第 7 步|看帧的地址是不是"每跳都换"。

在 Wireshark 里抓一个你自己发出的包(比如重新打开一个网页),看它的:

这就是"帧的地址只管一段"的第一个现场——你发给百度的帧,目的 MAC 写的是你家路由器(收 3.2 的双层门牌)。

第 8 步|30 秒实验:看类型字段切换。

在 Wireshark 里敲 ip.addr == <你的IP>,同时干两件事:打开一个网页、ping 一下网关。看类型字段:

这个 2 字节的字段,就是以太网把"接下来该交给谁处理"写清楚的地方。

九、常见误区

  1. "以太网就是网线。" —— 以太网是一套规矩(IEEE 802.3),网线只是它今天常跑的介质之一,光纤上跑的照样是以太网。
  2. "以太网和 Wi-Fi 是两个不同的网络。" —— 是同一层(网络接口层)的两副肉身(收 5.1)。两边都用 MAC 地址、都传数据帧、都承载 IP,所以换个网络环境应用完全不用改。
  3. "CSMA/CD 淘汰了,这部分可以整个跳过。" —— 概念要懂。它解释了三件事:为什么帧最小 64 字节、为什么早期网络慢、为什么网卡还有个"半双工"选项。
  4. "集线器只是老一点的交换机。" —— 是不同层的设备。HUB 是物理层,只复制信号(共享、半双工、要抢线);交换机是链路层,按 MAC 转发(独占、全双工、不撞)。
  5. "交换机得看 IP 才知道往哪送。" —— 只看目的 MAC(收 3.6)。它是"只看门牌的传达室",不是"要看地图的司机"——看地图那是路由器的事。
  6. "1500 只是个建议,超了也没事。" —— 是硬上限。超了要么被 IP 分片(收 3.4),要么被丢弃(设了 DF 标志时),没有"商量"的余地。
  7. "最小帧 64 字节是随便定的。" —— 是从"撞车必须听得见"倒推出来的(第六节)。这个数字背后是一道物理题。
  8. "帧里的 MAC 和 IP 数据包里的地址是一路走的。" —— MAC 每跳都换,IP 全程不变(收 3.2)。这是最容易搞错、也最能体现分层的一处。
  9. "速度快了,以太网的规矩也跟着变了。" —— 帧格式和 MAC 地址从 1980 年至今一个字段没动。变的只有速率和介质——这正是它熬死所有竞争对手的原因。
  10. "前导码也是帧的一部分。" —— 它是"预备动作",不算帧、不参与长度计算。以太网帧是从目的 MAC 开始、到 FCS 结束的。

十、动手自测

❓ 自测一下
  1. 以太网的标准号是多少?它属于哪一层?
  2. "Ether" 这个名字是怎么来的?为什么证明它不存在之后名字还留着?
  3. MAC 三个字母分别是什么?为什么说"MAC 地址"这个名字本身就解释了以太网要干什么?
  4. 以太网三代形态里,"要不要抢线"取决于什么?为什么集线器和总线型是一回事?
  5. CSMA/CD 三个字母各是什么?撞了之后要做什么,为什么必须"随机"等?
  6. 以太网帧一共几个字段?帧头多少字节?前后各是多少?
  7. 类型字段里 0x0800、0x0806 分别是什么?
  8. 最大帧 1518 和 MTU 1500 是什么关系?超了 MTU 由谁来处理?
  9. 最小帧为什么是 64 字节?这个数字是从什么倒推出来的?
  10. 为什么你只发 1 个字节的 ping,抓包却看到 60 多字节?

答案: ① IEEE 802.3,属于网络接口层(有线的那一半,无线那一半是 802.11)。 ② 来自 19 世纪物理学家假想的传播光的介质 Ether(以太)。后来证明这种介质不存在,但 IEEE 定标准时名字已经叫开,就留下来了——它也正好说明以太网管的不是"线",而是"线怎么共用"。 ③ Media Access Control,媒体访问控制。拆开读就是以太网的全部任务:Media 那段公用的介质 / Access 谁什么时候能用 / Control 定这套先后秩序。所以 MAC 地址就是这套秩序发给每张网卡的编号。 ④ 取决于逻辑上介质是不是共用,不看外观。集线器外观是星型,但它收到信号就复制给所有口——逻辑上还是同一条总线,所以还是要抢线。 ⑤ CS = 先听、MA = 多人共用、CD = 边说边听。撞了之后:立刻停 → 发堵塞信号通知大家 → 各自随机等一段时间重试。必须随机,是因为如果大家都等一样长,下一轮会再撞一次。 ⑥ 六个:前导码 8、目的 MAC 6、源 MAC 6、类型 2、数据 46~1500、FCS 4。帧头 14 字节(目的 6 + 源 6 + 类型 2),前面有 8 字节前导码(不算帧),后面有 4 字节 FCS。 ⑦ 0x0800 = IPv4 数据包,0x0806 = ARP。 ⑧ 1518 = 帧头 14 + 数据 1500 + FCS 4——那个 1500 就是 MTU。超了 MTU 由网际层的 IP 负责分片(收 3.4),不是以太网负责切。 ⑨ 因为 CSMA/CD 要求"发送方在帧发完之前必须能听到撞车"。一帧的发送时间必须 ≥ 信号跑完最长往返路线的时间,按当年 10 Mbps、2500 米的网络一算,就是 64 字节(第六节)。 ⑩ 因为 以太网帧最小 64 字节,其中数据字段最少 46 字节——不足 46 的部分由网卡用填充补 0,再加上 14 字节帧头和 4 字节 FCS。所以哪怕只有 1 个字节的有效内容,也要凑成一个 64 字节的帧。

十一、下一步学什么

相关笔记