有人把一台从仓库翻出来的旧集线器插进办公网本意是多接两台测试机结果整层楼的人同时感觉网页加载变慢、视频会议开始卡顿。拔掉之后一切恢复。这类事情在机房和实验室里反复上演根子不在设备坏没坏而在于很多人对集线器、交换机、路由器这三类设备的工作层次没有建立起清晰的物理直觉——知道它们不一样但说不清差在哪一层、差在哪个动作上。这篇东西就是把这层窗户纸捅破。我会从电气信号讲到 MAC 地址表再到路由表和最长前缀匹配把三种设备各自的动作清单摊开对比中间穿插冲突域、广播域、背板带宽、TTL、NAT 这些绕不开的概念最后落到一次跨网段访问到底经历了什么和选型时哪些说法是错的。适合刚接触网络、正在准备认证考试、或者被家里/公司网络折腾过几轮想搞明白原理的人。看完至少能做到拿到一个网络拓扑能判断哪台设备在干什么活、瓶颈可能卡在哪。1. 先把层这件事摆平三种设备站在不同的楼层干活网络设备的所有差异追到根上都是它工作在 OSI 模型的第几层和它能看见数据帧里的哪些字段。这个视角一旦建立后面所有行为都是推论不需要死记硬背。1.1 冲突域与广播域两个词解释了大半区别先给两个定义用大白话说。冲突域是指在同一时刻只能有一台设备发送数据的那片范围——两台机器同时开口说话就会撞车撞了就得退让重来。广播域是指一台设备发出广播帧能被送达的所有设备的集合——广播帧的特点是目的地址全 F任何收到它的设备都得拆开看一眼。这两个概念之所以关键是因为三种设备对它们的作用完全不同集线器的所有端口共享一个冲突域和一个广播域交换机的每个端口是一个独立的冲突域但默认情况下所有端口仍在同一个广播域里路由器则天然把两边隔成两个广播域。很多人背过交换机隔离冲突域、路由器隔离广播域这句话但未必想过它意味着什么。举个具体例子24 口集线器上接了 24 台主机任意两台同时发数据的概率就非常高重传、退避、再重传有效吞吐能掉到标称带宽的三四成换成 24 口交换机每台主机独占一条全双工链路收发互不干扰理论上可以同时 24 对通信。这不是性能好一点是量级差别。提示判断一台设备到底是哪一层有个笨但好用的办法——看它能识别什么地址。只认电平信号的是第一层认 MAC 地址的是第二层认 IP 地址的是第三层。1.2 用OSI七层把三台设备对号入座把三台设备摆到 OSI 模型里位置非常清楚设备工作层次识别的地址转发依据冲突域广播域集线器物理层L1无无纯信号放大转发全部端口共享 1 个全部端口 1 个交换机数据链路层L2MAC 地址MAC 地址表每端口 1 个默认全部端口 1 个VLAN 可切分路由器网络层L3IP 地址路由表每接口 1 个每接口 1 个天然隔离这张表建议抄在本子上。它解释了三件事为什么集线器换成交换机能立刻解决人多就卡为什么交换机接再多台设备广播包还是会传到每一个口为什么跨网段通信必须经过路由器交换机再贵也办不到。再补一句容易被忽略的集线器是半双工的因为它本质上就是一根共享的导线同一时刻只能有一个方向有信号交换机端口可以全双工收发各走一对线互不冲突所以不需要 CSMA/CD 那套碰撞检测机制。这一点在排查为什么老设备接新交换机后丢包时特别有用——有些老网卡或者工业设备只支持半双工接上去就得手动协商否则双工不匹配会产生大量 CRC 错误和冲突计数。2. 集线器物理层的信号复读机为什么它天然不适合多台主机集线器Hub几乎是网络设备里的活化石但它恰恰是理解为什么需要交换机的最佳教材。把它彻底搞懂交换机的价值就不用解释了。2.1 端口之间只是导线相连电气层面发生了什么拆开一台集线器你会看到非常朴素的结构所有端口的收线在内部被连在一起可能中间串了一级信号整形和放大电路。它的工作方式是这样——端口 A 上的网卡发出一个电平跳变这个电信号经过集线器内部的共享总线被复制到除 A 之外的所有端口上。没有任何解析不检查目的地址不看帧头甚至不知道这一串 0 和 1 是不是一个合法的以太网帧。这带来几个直接后果。第一带宽是共享的标称 100Mbps 的集线器接 10 台设备不是每台 100Mbps而是大家抢这 100Mbps。第二任何一台设备的信号都会抵达所有其他端口包括那些根本不该收到它的设备——安全上这叫被动嗅探的温床早期抓包工具接在集线器任意一个口上就能看到全网流量正是因为这一点。第三某个端口出现电气故障、持续发出噪声整个网段都会被拖垮因为噪声会被放大转发到所有端口。注意现在市面上还在流通的所谓集线器一部分其实是低端交换机内部有 MAC 表购买或替换时必须确认清楚否则按集线器的思路去规划网络会出问题。2.2 用概率算一下10台主机共享一个冲突域有多糟CSMA/CD 的核心是先听后说边说边听冲突就退避。它的效率随站点数增加而下降这个下降可以粗略算出来。假设冲突域内有 N 个站点每个站点在某个时隙内以概率 p 尝试发送。一个时隙能成功传输的条件是恰好只有一个站点发送其概率为P(成功) N × p × (1-p)^(N-1)取最理想的 p 1/N代入看看站点数 N最优发送概率 p单时隙成功概率20.50.50050.20.410100.10.387200.050.377数据摆在这10 台主机挤在一个冲突域里即使每个站点都用最优策略也只有不到 39% 的时隙能成功传一帧其余时间要么空转要么在冲突和退避。实际网络中还要叠加传播时延、退避算法的随机性、帧长差异真实效率比这更低。这就是为什么当年一个教研室十几台机器挂在一个集线器上实际下载速度只有标称值的零头。换成交换机之后每端口独享全双工链路这个公式直接失效——因为不再存在冲突。**“把共享介质变成点对点链路”**是交换机最本质的贡献其余特性都是从这一点衍生出来的。2.3 半双工、带宽共享与一台设备咳嗽全网跟着喘集线器还有一个隐蔽的坑它无法做速率协商的翻译。一个 10Mbps 的老设备和一个 100Mbps 的设备接在同一台 100M 集线器上集线器本身只能整体工作在较低速率或者干脆不兼容实际部署中经常出现某台老机器一上线全网降速的现象。另外集线器对广播帧和未知单播帧的处理是同一种——照单全收地复制到所有端口。这意味着广播风暴在集线器上会以最快速度扩散没有任何抑制手段。而交换机至少还有广播风暴抑制、端口隔离、VLAN 切分这些工具可以做边界。今天集线器还活着的地方基本只剩三类极低成本的临时测试环境某些老旧工业控制现场设备固定、帧率极低、电磁环境特殊以及作为教学道具。真要在生产网络里看到它第一反应应该是这里是不是有个坑。3. 交换机MAC地址表是怎么长出来的交换机做的事情说起来一句话根据目的 MAC 地址把帧从正确的端口送出去。但怎么知道哪个 MAC 在哪个端口这个问题答案里藏着整个二层转发的精髓。3.1 上电那一刻转发表是空的交换机刚上电时MAC 地址表是空表。它没有任何先验知识不知道 1 号口后面挂着什么设备。学习过程是这样的当一帧从某个端口进入交换机会读取源 MAC 地址然后在这个表里记一条这个 MAC 对应这个端口同时打上时间戳。注意学习用的是源地址转发用的是目的地址这两个动作是分开的很多人在这里混淆。举个完整例子。假设 1 号口接主机 AMAC 为 AA3 号口接主机 BMAC 为 BB。A 发一帧给 B。交换机从 1 号口收到先学AA → 端口 1。查目的 MAC BB表里没有。未知单播帧执行泛洪——从除 1 号口之外的所有端口发出去。B 收到并回复。交换机从 3 号口收到学BB → 端口 3。查目的 MAC AA表里有命中端口 1从 1 号口转发出去不再泛洪。从这一来一回之后A 和 B 之间的通信就变成点对点了。这个过程叫自学习交换机的智能全部来源于此没有任何中心控制器参与。3.2 一帧进来后的三条岔路任何一帧进入交换机处理逻辑只有三种结果把它们列清楚排障时就能快速定位目的 MAC 情况处理动作典型场景表中有记录且端口 ≠ 入端口转发Forward只从记录端口发出正常通信绝大多数帧表中无记录泛洪Flood从除入端口外所有端口发出新设备上线、表项老化、扫描行为目的 MAC 就在入端口上丢弃Filter不转发同端口下的设备互访或环路导致目的 MAC 为全 F 广播泛洪到所有端口同 VLAN 内ARP 请求、DHCP 发现目的 MAC 为组播且未开启侦听泛洪到所有端口视频流、组播发现协议这里有个值得注意的点泛洪不是错误是机制。很多人在抓包时看到大量泛洪帧就以为交换机坏了其实更可能是 MAC 表项老化或者网络里有扫描行为在不断触碰不存在的地址。3.3 老化、泛洪抑制与广播风暴的边界MAC 表项不是永久的默认老化时间通常是300 秒5 分钟。超过这个时间没有新的流量刷新表项就被删除。这样设计是因为设备可能换端口、下线、或者 MAC 地址本身就被虚拟化环境动态分配。老化时间带来的一个典型现象是一台设备静默十几分钟后突然发包交换机可能已经不记得它在哪个口于是第一帧又被泛洪一次。这在抓包里表现为间歇性的泛洪抖动属于正常行为。真正需要警惕的是广播风暴和MAC 地址漂移。前者是环路的典型症状——两个交换机之间接了两条线却没有启用生成树广播帧在环里无限循环端口指示灯疯狂闪烁CPU 打满后者表现为同一个 MAC 在极短时间内出现在多个端口上日志里会刷MAC flapping通常也是环路或者错误的双网卡绑定造成的。提示交换机上排查环路先看端口流量是否呈异常对称的双向拉满再看 MAC 地址表里同一地址是否在两个口之间反复跳。这两个特征同时出现基本可以确诊。3.4 交换机的几种转发模式与背板带宽怎么算交换机内部转发不是只有一种方式存储转发Store-and-Forward收完整帧、校验 FCS、再转发。延迟稍大但能丢弃错帧是主流方式。直通Cut-Through只读到目的 MAC前 6 字节之后就开始转发。延迟极低但会把错帧也转出去。无碎片Fragment-Free读满 64 字节再转发过滤掉冲突碎片是折中方案。选型时经常被问这台交换机性能够不够判断依据是背板带宽和包转发率。以一台 24 口千兆交换机为例背板带宽需求 24 × 1Gbps × 2全双工双向48Gbps包转发率需求 24 × 1.488Mpps 35.7Mpps1.488Mpps 是千兆线速下按最小帧 64 字节 前导 8 字节 帧间隙 12 字节 84 字节折算出来的每秒包数。如果标称参数明显低于这两个数说明这台设备在满负载时会出现线速跑不满的情况也就是常说的阻塞型交换机。买便宜货时这个参数最容易被含糊带过值得盯一眼。4. 路由器跨网段这件事交换机真的干不了交换机再强它的世界只有 MAC 地址。一旦目的 IP 不在本网段它就完全无从下手——因为跨网段转发需要根据 IP 查路由这是第三层的事。4.1 路由表与最长前缀匹配它凭什么决定往哪个口发路由器收到一个 IP 包做的是这样一件事拿目的 IP 去路由表里逐条比对找出所有匹配的表项然后选前缀最长的那一条。假设路由表里有三条10.0.0.0/8 → 下一跳 192.168.1.1 10.1.0.0/16 → 下一跳 192.168.1.2 10.1.2.0/24 → 下一跳 192.168.1.3目的地址是 10.1.2.55三条都能匹配上但 /24 最长所以走 192.168.1.3。这就是最长前缀匹配。为什么不直接按先来后到或者第一条命中就停因为路由表是分层的/8 可能是运营商汇总路由/16 是区域路由/24 是具体子网。如果第一条命中就停具体路由永远用不上流量会被错误地送到汇总出口。最长前缀匹配保证了越精确的路由优先级越高。还有一条默认路由 0.0.0.0/0前缀长度为 0任何地址都能匹配但优先级最低只有在没有更精确匹配时才会用到。这就是网关的本质。4.2 逐跳转发过程中被改写的字段一个 IP 包穿过路由器时有几个字段会被改动这直接关系到排障时的现象判断TTL 减一。每经过一台路由器TTL 减 1减到 0 就丢弃并回一个 ICMP 超时报文。这个机制最初是为了防止包在环路里永远转下去后来被 traceroute 用来探测路径——连续发 TTL 为 1、2、3 的包看每一跳返回的源地址。所以如果发现 ping 不通但 traceroute 能到某一跳通常说明问题出在那一跳之后。源和目的 MAC 被重写。这一条最容易搞混。IP 地址在整条路径上保持不变除非有 NAT但MAC 地址是逐跳改变的。包从 A 发往路由器 R帧头的目的 MAC 是 R 的接口 MACR 转发给下一跳 R2 时会重新封装成目的 MAC 为 R2 的帧。所以抓包看到MAC 地址和 IP 地址对不上是正常的不要以为是欺骗。校验和重算。因为 TTL 变了IP 头校验和必须重新计算。可能触发分片。如果出接口的 MTU 小于包长且设置了 DF 标志会返回 ICMP 需要分片的错误。这是很多能 ping 通小包、大包不通问题的根源。4.3 NAT、DHCP、防火墙家用路由器为什么是个套装市面上的家用无线路由器名字里虽然带路由器但它其实是一个多功能合体设备路由模块做 NAT、DHCP 服务、PPPoE 拨号交换模块内置 4 口左右的交换机负责 LAN 侧接入无线 AP 模块把无线客户端桥接到 LAN防火墙模块状态检测、端口映射其中 **NAT网络地址转换**是家用场景的核心。内部所有设备用私有地址出口时统一换成公网地址并用端口号区分不同会话这叫 NAPT 或 PAT。这就解释了为什么家里只有一个宽带账号却能让手机、电脑、电视同时上网——它们共用同一个公网 IP靠源端口号区分。NAT 带来的副作用也很实际外部主动发起的连接进不来所以需要做端口映射才能从外网访问内网服务某些点对点通信、语音协议会因为地址改写而失效需要专门的穿透手段。这些都是 NAT 省 IP 地址的代价。注意区分路由器和三层交换机时看它是否支持 NAT、是否支持广域网接口类型如拨号、专线、是否具备完整的 ACL 和会话跟踪。很多三层交换机只做纯三层转发不做地址转换。5. 一次跨网段访问的全程复盘谁在第几毫秒做了什么把前面所有零件拼起来看一次完整的通信过程是最有效的巩固方式。分两个场景。5.1 同网段场景交换机独自完成主机 A192.168.1.10访问主机 B192.168.1.20掩码 255.255.255.0。A 计算后发现目的地址和自己同网段于是决定直接发 ARP 请求问谁是 192.168.1.20。这个 ARP 请求是广播帧目的 MAC 全 F。交换机会把它泛洪到所有端口同 VLAN 内。B 收到后回一个单播 ARP 应答。交换机在这个过程中学习到 A 和 B 的 MAC 与端口对应关系。之后 A 和 B 之间的所有数据帧都是单播点对点交换机只做查表转发。整个过程中路由器完全没有参与甚至连它存不存在都不知道。这一条可以用来快速判断故障范围如果同网段内两台机器不通先怀疑交换机、VLAN 划分、网卡或者 IP 配置别去动路由器。5.2 跨网段场景ARP、网关与MAC重写主机 A192.168.1.10访问 10.0.0.5掩码 255.255.255.0。A 发现目的地址不在本网段于是决定把包发给网关假设网关是 192.168.1.1。关键点来了A 需要的是网关的 MAC 地址不是目的主机的 MAC 地址。所以它发 ARP 请求问谁是 192.168.1.1。路由器接口回应A 拿到网关 MAC。然后 A 构造 IP 包源 IP 192.168.1.10目的 IP 10.0.0.5封装成帧源 MAC 是 A 的目的 MAC 是网关的。这个帧被交换机转发到路由器接口。路由器收到拆掉帧头查路由表发现 10.0.0.0/24 从另一个接口出去TTL 减 1重新封装成新的帧——源 MAC 换成自己出接口的目的 MAC 换成一个网段内的下一跳或者目的主机同样要先 ARP。包就这样一跳一跳走到目的地。整个链路上IP 地址始终是 192.168.1.10 → 10.0.0.5而 MAC 地址换了好几轮。理解了这一点为什么跨网段抓包看到的 MAC 和预期不一样就不再是疑问了。5.3 怎么自己验证抓包与命令行观察点想亲眼确认上面的流程可以按这个顺序做在 A 上先arp -aWindows或ip neighLinux看网关的 MAC 是否已缓存。如果没有ping一次网关再看表里是否多了一条。清空 ARP 缓存后再访问跨网段目标同时抓包抓包工具挂在 A 的网卡上。会先看到 ARP 请求广播然后是发往网关 MAC 的单播帧。在路由器上查看路由表route print、ip route、或者设备的管理界面确认去往目的网段的最优条目是哪一条下一跳是什么。用tracert/traceroute看路径结合 TTL 超时返回的地址判断流量实际走了哪条路。实测下来最常见的排查误区是只看 IP 不看 MAC。比如两台机器 IP 都配对了却互 ping 不通很多时候是 ARP 表里缓存了错误的 MAC比如换过网卡、做过双机热备切换清一下缓存立刻恢复。6. 选型与踩坑三层交换机能不能替代路由器这是被问得最多的问题之一。答案不是简单的能或不能取决于边界在哪。6.1 三层的边界与三层交换机的定位三层交换机确实能做路由转发而且转发性能通常远高于同价位路由器——因为它用 ASIC 硬件转发第一次查路由后会把结果写进硬件转发表后续同一条流的包直接硬件转发俗称一次路由多次交换。但它和路由器有几处本质差异对比项三层交换机路由器转发方式ASIC 硬件转发吞吐高、延迟低通用 CPU 转发吞吐相对低端口类型以以太网口为主支持多种广域网接口、串口、光口NAT部分型号支持能力有限完整支持会话数管理成熟广域网特性基本不具备拨号、专线、策略路由、流量整形齐全典型位置园区网核心、数据中心汇聚网络出口、跨地域互联结论很清楚内部网段之间的高速互访用三层交换机连接外部网络、做地址转换和出口策略用路由器。把三层交换机直接怼在出口做 NAT短时间可能没事流量一上来会话表就打满了或者某些协议根本转换不了。反过来在几十台服务器的机房里用一台家用路由器当核心网关也是常见错误——路由器的交换模块通常只有几个口且转发能力有限内网互访会全部压在 CPU 上。6.2 几个反复被问错的点交换机不是能隔离广播吗不能除非划了 VLAN。默认所有端口在同一个广播域一个 ARP 广播会传到每一个端口。VLAN 的逻辑是把一台物理交换机切成多台虚拟交换机每个 VLAN 是一个独立广播域VLAN 之间通信必须经过三层路由器或三层交换机。这是交换机不能替代路由器的核心原因之一。路由器是不是也隔离冲突域是而且每个接口一个比交换机更彻底。但因为路由器的接口通常不多这个特性在实际中不太被提起。集线器和交换机能不能混用技术上能把集线器接在交换机某个口上那一片仍然共享带宽和冲突域。实际中除非临时应急否则没必要——一台百元级的交换机就能解决的问题用集线器等于给自己埋雷。为什么我的交换机明明是千兆实际只有百兆先看端口协商状态。双工不匹配、线序问题用了只有两对芯的网线、或者对端设备只支持百兆都会导致降速。命令行里看接口速率和双工模式是最快的确诊方式。“MAC 地址表满了会怎样”交换机的表容量有限低端设备可能只有几 K 条。表满了之后新 MAC 学不进去所有未知单播全部泛洪网络性能急剧下降同时可能伴随 CPU 升高。虚拟化环境里大量虚拟机频繁迁移、或者遭遇到源 MAC 伪造的扫描都可能触发这个问题。我个人在实际操作中的体会是排障时先问这一层谁该负责比上来就抓包高效得多。同网段不通查二层跨网段不通查三层和网关能通但慢查带宽、双工和广播量。把三种设备的能力边界刻在脑子里大部分网络问题在十分钟内就能定位到该动哪台设备而不是在三台设备之间来回试。