做网络的人迟早会碰上这么一档子事明明交换机端口灯亮着主机也拿到了IP可就是ping不通另一台机器。查来查去最后发现是脑子里对交换机、路由器的数据传输流程想岔了。今天把这个老话题重新掰开揉碎讲一遍从二层交换的MAC转发到三层路由的逐跳选路再到一次端到端通信的完整链路一次性说清楚。无论你是刚入门的学生还是日常要处理网络故障的运维这篇文章都可以当作一份数据包旅行手册来用。我尽量用大白话加关键命令来讲不堆术语也不省略细节。毕竟网络排障最怕的就是脑子里的流程不对设备配置再多数据流走向想不明白出了问题照样抓瞎。1. 先建立整体框架二层转发与三层转发到底差在哪1.1 四个关键角色先记牢MAC、IP、MAC表、路由表要理解交换机和路由器是怎么传数据的得先把四个角色盘清楚MAC地址设备的物理身份出厂烧录在网卡上相当于收件人的门牌号。IP地址设备的逻辑位置相当于哪个城市哪个街道会随网络环境变化。MAC地址表交换机维护的一张表记录哪个MAC从哪个端口学来的相当于小区门卫手里的住户登记本。路由表路由器维护的一张表记录去哪个网段该从哪个口出去下一跳是谁相当于物流公司的分拣路线图。很多人一开始容易混MAC是拿来寻这个设备在哪的IP是拿来定这个设备属于哪个网络的。同一台设备在同一个广播域内靠MAC就能找到一旦跨了网段就必须靠IP来决定该往哪个方向送。1.2 交换机和路由器的本质分工交换机工作在二层转发依据是MAC地址表。它收到一个帧查目的MAC表里有记录就从对应端口送出去没记录就群发给所有端口泛洪。整个过程不关心IP地址长什么样也不需要改帧里的源MAC和目的MAC。路由器工作在三层转发依据是路由表。它收到一个IP数据包提取目的IP去路由表里找最匹配的条目决定出接口和下一跳然后把帧头重写一遍再送出去。源IP和目的IP全程不变NAT场景除外但MAC地址每一跳都会换。用一句话概括交换机负责同小区内精准投递路由器负责跨城市线路规划。三层交换机虽然名字里带三层本质还是先二层查表不行再三层查路由别被名字带偏。1.3 排障第一步先判断故障在二层还是三层这个框架最大的价值是排障。内网不通先问一句两个IP在不在同一网段在问题大概率在二层交换机端口、VLAN、MAC表、ARP不在问题大概率在三层路由表、网关、回程路由、NAT。判断对了方向排查效率立刻翻倍。我见过不少同事一上来就抓包看IP折腾半天其实只是交换机的某个端口没放行VLAN二层就断了。2. 交换机的数据传输流程从MAC表学习到泛洪2.1 MAC地址表是怎么学出来的交换机的MAC表不是预先配置的而是学出来的。工作逻辑很简单收到一个帧先看源MAC。如果MAC表里没有这个源MAC就把源MAC 入端口 所属VLAN记一条。如果表里已有这个MAC但入端口和原来记录的不一样就更新端口信息同时可能报MAC漂移flapping。注意一个关键点交换机只学习源MAC不学习目的MAC。所以一张空的MAC表必须等设备主动发数据交换机才知道它挂在哪个端口下。这就是为什么新接一台设备后往往要先ping一下才能通——ping的过程就是让交换机认识你的MAC。MAC表条目不是永久的。默认老化时间一般是300秒可以调整。如果设备下线了老化条目会被清除。有些场景下比如双网卡做主备两块网卡共用同一个MAC虚拟MAC切换时交换机会看到同一个MAC从不同端口出现这就是典型的MAC漂移告警不代表环路但会引起转发震荡。2.2 单播转发、未知单播泛洪与广播泛洪交换机收到帧后查目的MAC表里有对应条目只从记录的那个端口转发其他端口不受影响。这是最常见的单播精准转发。表里没有对应条目把帧从同一VLAN内所有端口除了收到帧的那个入端口复制一份发出去这叫未知单播泛洪。目的MAC是广播地址FF-FF-FF-FF-FF-FF直接泛洪因为广播本来就是发给所有人的。这里有个常见误解很多人以为交换机只泛洪广播帧。其实未知单播也会泛洪。如果一个网络里大量单播流量目的MAC都不在MAC表里整个二层网络都会被打满表现就是交换机CPU高、端口流量异常。现实中很多莫名其妙的卡顿源头就是MAC表老化过快或者表容量不足导致大量未知单播泛洪。2.3 一个具体例子的转发细节假设PC A的MAC是00:11:22:33:44:55连在交换机1口PC B的MAC是66:77:88:99:aa:bb连在交换机2口。两台都在VLAN 10里。PC A发一个帧给PC B交换机收到后先学习源MAC把00:11:22:33:44:55 → 端口1VLAN 10记进表。然后查目的MAC发现66:77:88:99:aa:bb已经学在端口2下就把帧从端口2发出去全程不碰IP。PC B收到后回帧交换机同样学习PC B的源MAC并查目的MAC PC A此时PC A的MAC表项刚刚已经学过了直接单播从端口1送回。一来一回两张表项都齐了之后通信就走精准转发。2.4 VLAN对二层转发的影响VLAN的引入把一台物理交换机变成了多个逻辑交换机。二层转发只能在同一个VLAN内进行广播帧也只在同VLAN内泛洪。不同VLAN之间的帧单靠交换机是转不过去的必须交给三层设备处理。这就是广播域和冲突域的区别。冲突域在交换机每个端口就已经被切断了广播域要靠VLAN或者路由器来隔离。很多人说交换机隔离广播域严格来说不对普通的二层交换机不隔离广播域它只是把广播限制在端口所属于的那个VLAN里。真要隔离广播得上三层设备或配置VLAN间路由。实操中一个特别容易踩的坑给端口配了access VLAN但交换机上没创建这个VLAN或者端口没放行终端就会一直网线已连接但无法上网。查这个问题的命令很简单去交换机的端口下看VLAN状态再查VLAN是否创建基本立刻定位。2.5 交换机转发的注意事项与防环意识不要乱接冗余链路两台交换机之间用两根线直连而不启用STP就是广播风暴的温床。MAC表会在两个端口间反复横跳广播帧无限循环最终全网瘫痪。端口安全要控制一个接入端口最多绑几个MAC可以限制防止有人私接小路由器或者伪造MAC。关注老化时间在一些特殊业务里比如虚拟化迁移MAC频繁变化适当调短老化时间反而更合理但普通办公网不要乱调太短会导致大量未知单播泛洪。3. 路由器的数据传输流程逐跳转发与路由决策3.1 路由表是怎么来的路由表可以理解为路由器手里的地图。条目来源主要有三类直连路由路由器自己接口上配了IP和掩码所在的网段天然出现在路由表里优先级最高。静态路由管理员手工指定的路径适合拓扑简单、路径固定的小网络。动态路由路由器之间通过OSPF、BGP这类协议互相交换路由信息自动生成适合大网络或者路径会变化的场景。多条路由指向同一个目的地时路由器先比优先级/管理距离再比度量值。不同厂商叫法不同但逻辑一致越可靠的路由越优先度量值越小的路径越好用。默认路由0.0.0.0/0是最后兜底任何没匹配到具体路由的包都走它。3.2 最长前缀匹配路由器选路的铁律查路由表不是差不多能到就行而是必须最长前缀匹配。什么意思目标IP是10.1.2.5路由表里同时有10.0.0.0/810.1.0.0/1610.1.2.0/24路由器会选10.1.2.0/24因为它的掩码最长匹配最精确。哪怕默认路由0.0.0.0/0也在表里只要存在一条更精确的匹配就一定优先精确的。这个机制保证了数据包能沿着最具体、最合理的路径走而不是模棱两可地乱钻。这个规则平时不容易出问题但一旦路由表里有汇总路由和明细路由共存或者出现了掩码错误的静态路由就会看到奇怪的丢包现象。比如某个网段明明存在包却被默认路由丢到了错误的方向。3.3 每一跳都做了什么路由器从接口收到一个以太网帧先看目的MAC。如果目的MAC是路由器自己某个接口的MAC或者广播、组播帧才把帧头拆开取出IP包继续处理如果目的MAC不是自己直接丢弃绝不做跨接口转发。拿到IP包后流程是目的IP查路由表最长前缀匹配确定出接口和下一跳。TTL减1。如果TTL减到0丢弃该包并向源IP回一个ICMP超时报文。重新封装为新的以太网帧源MAC改成出接口的MAC目的MAC改成下一跳设备的MAC通过查ARP表获得源IP和目的IP保持不变。把新帧从出接口送出去。整个处理过程中IP层的源和目的地址就像快递单上的寄件人和收件人从头到尾不换而MAC地址就像每一段运输车上贴的跟车标签每换一辆车就要换一次。这也解释了为什么tracert可以一级一级显示路径——每一跳的IP和时延都暴露在了ICMP超时消息里。3.4 默认网关主机的最后一根救命稻草主机要发数据给别的网段它不会自己去学路由它的逻辑很简单目标IP和自己不在同一网段就把包交给默认网关让网关去想办法。所以网关IP必须和主机的IP在同一网段而且网关的MAC必须可通过ARP学到。我见过太多新手把网关IP填成别的网段的地址或者子网掩码配错导致主机判断失误。这些都不会有任何报错但就是不通。排查时先看一眼Windows的route print或者ipconfig确认网关填对了再谈后面的排障。4. 端到端流程数据包的一次完整旅行4.1 同网段通信ARP加上交换机的精准投递PC A要给同一网段的PC B发数据。PC A第一步不是直接发数据而是先判断目标IP是否和自己同网段判断依据就是本机的子网掩码。判定同网段后PC A查自己的ARP缓存看有没有PC B的IP对应的MAC。没有就发一个ARP广播谁的IP是192.168.1.20请把你的MAC告诉我。PC B收到广播发现问的是自己就单播回自己的MAC。PC A拿到后把数据封装成帧源MAC是A目的MAC是B交给交换机。交换机按MAC表精准转发到PC B所在端口。整条链路上IP层不参与任何决策纯粹的二层通信。这里有个细节ARP广播的源MAC是PC A的目的MAC是全FF交换机收到后泛洪同一广播域内的所有主机都会收到但只有IP匹配的那台会回包。所以ARP广播风暴一旦出现整个VLAN所有主机都会被波及CPU被拉高网络响应变慢。4.2 跨网段通信每跳都在换MACIP一路不变现在PC A 192.168.1.10要访问PC B 192.168.2.20两个网段。PC A发现目标不在同一网段于是把帧的目的MAC填成默认网关R1的MAC源MAC是自己的IP包的目的IP仍然是192.168.2.20。交换机收到帧一看目的MAC是网关直接转给R1。R1收到帧目的MAC是自己解封装查路由表。发现192.168.2.0/24在R2那头下一跳是10.0.0.2于是查ARP拿到R2的MAC重新封装源IP还是192.168.1.10目的IP还是192.168.2.20但源MAC变成了R1出接口的MAC目的MAC变成了R2的MAC。R2收到后如法炮制最后发现目标网段直连在自己某个接口下于是把目的MAC改成PC B的MAC从对应端口发出去。PC B收到后回包过程完全反过来。这张表可以帮你记忆每一步的变化经过点源MAC目的MAC源IP目的IPTTLPC A出发A的MACR1的MAC192.168.1.10192.168.2.2064R1转出R1出接口MACR2入接口MAC192.168.1.10192.168.2.2063R2转出R2出接口MACPC B的MAC192.168.1.10192.168.2.2062看了这张表你就明白为什么抓包时老是看到MAC地址在变却看不到IP变——这是正常现象。要是某一跳设备的MAC不对或者ARP缓存里的MAC过期了包就卡在那里了。4.3 封装与解封装从应用层到帧的完整链条数据从PC A的应用层发出来一路往下封装TCP/UDP头加上端口号IP头加上源目IP以太网头加上源目MAC和帧校验序列。每一层路由器只拆到IP层就停手不会去看TCP载荷所以路由器对TCP状态一无所知。这就是为什么防火墙能拦应用层流量普通路由器拦不了——层级不同能力边界不同。MTU问题也在这里爆发。以太网帧默认MTU 1500字节如果IP包超过1500字节出接口就会分片。如果路径上某个链路MTU更小比如PPPoE拨号是1492大包就会被丢弃表现就是ping小包通、ping大包不通、网页打不开但微信能发。遇到这种诡异现象优先查路径MTU别一上来就怀疑防火墙。4.4 NAT场景源地址被换掉了怎么办边界设备通常要做NAT把内网私有IP转换成公网IP。以最常见的源NAT为例PC A访问外网经过路由器时源IP被替换成公网IP同时会话表记录内网IP端口 ↔ 公网IP端口的映射关系。外网回包的目的IP是公网IP路由器查会话表把目的IP换成内网IP再转给PC A。NAT带来的典型问题是外网主动访问内网很困难。因为会话表里没有对应记录回包根本不知道要往哪送。这也是为什么自建服务总要配端口映射。排查NAT故障时重点看会话表有没有建立以及内外网IP的映射是否正确。4.5 完整链路沙盘推演把整个环境固定下来一步步走一遍PC A192.168.1.10/24→ Switch1 → R1LAN 192.168.1.1/24WAN 10.0.0.1/30→ R2LAN 192.168.2.1/24→ Switch2 → PC B192.168.2.20/24。PC A发起ping PC B。判断出目标不在本网段ARP查询网关192.168.1.1的MAC得到后封装帧交给Switch1。Switch1查MAC表发现R1连在某个端口精准转发。R1解封装看到目的IP 192.168.2.20路由表显示通过10.0.0.0/30出接口去往10.0.0.2于是查ARP得到R2的MAC重写帧头发出去。R2收到后看目的IP是自己的直连网段查ARP得到PC B的MAC从对应接口发出。Switch2再按MAC表转给PC B。PC B回包路径完全相反R2和R1各自重写MAC最后回到PC A。整个流程走下来你会发现路由器只关心下一跳是谁交换机只关心目的MAC在哪个端口而真正保证从哪来到哪去的是IP层那个贯穿始终的源目IP。搞清这三层各自的职责排障时就能一条一条排除。5. 常见问题与排查技巧实录5.1 二层不通时先查什么症状是同一交换机下两台设备ping不通。优先顺序确认两台设备的IP、掩码、VLAN对不对。最经常的翻车现场是掩码配错导致主机以为对方不在同一网段。查交换机的MAC地址表看设备MAC是否学习到以及学习在哪个端口。命令一般是display mac-address。看端口状态。注意端口灯亮不代表VLAN放行正确要用display interface查看端口的实际VLAN属性。如果MAC表里设备的MAC反复在两个端口出现那基本可以断定有环路或MAC伪造往STP和接线上查。5.2 路由黑洞有路由却不通现象是PC A能ping通自己的网关但ping对端内网不通。先别急着怀疑对端按顺序查在R1上看有没有到对端网段的路由。有路由再看下一跳IP能不能通ARP缓存里有没有下一跳的MAC。都通重点查对端的回程路由。这是最阴险的坑去程路由通了回程路由缺失或指错包照样回不来。很多网络故障的根本原因就是缺少一条静态路由或者回程路由的下一跳指向了一个不可达地址。路由查错时的常用命令display ip routing-table查看路由表ping -a指定源地址来测试特定路径tracert定位ICMP在哪一跳断掉。tracert断在某一跳重点查那一跳设备。5.3 广播风暴与环路最怕的故障类型广播风暴的典型症状是整网变卡所有端口流量打满设备CPU持续高位。环路是最常见的诱因比如有人为了增加带宽把交换机用两根线连起来没开STP。广播帧会在环里无限循环MAC表疯狂抖动最后全网瘫痪。处理思路很明确先拔线破除环路再让STP收敛最后排查有没有端口开着BPDU保护、环路保护。千万不要在环路状态下反复重启交换机治标不治本。日常维护中凡是接入关键设备的端口建议开启STP边缘端口和BPDU保护避免有人私接小交换机导致全网震荡。5.4 ARP类问题网关被偷了症状是所有终端突然上不了网但内网互访正常。查一下本机ARP缓存发现网关IP对应的MAC变成了一个陌生地址。这就是典型的ARP欺骗攻击者伪造网关MAC把所有本该发往网关的流量都骗到了自己机器上。简单应对在关键设备上做静态ARP绑定把网关IP和真实网关MAC绑死。交换机侧可以开DHCP Snooping配合DAI、IP Source Guard过滤伪造的ARP报文。这些功能平时不起眼一旦中了ARP攻击就是救命稻草。5.5 故障速查表现象可能原因优先检查项同VLAN内ping不通VLAN放行错误、MAC表未学习、端口down端口VLAN状态、MAC地址表跨网段ping不通路由缺失、网关配错、回程路由错误路由表、默认网关配置、回程路由大包不通小包通路径MTU小于包长出接口分片丢弃两端MTU、PPPoE/VXLAN链路MTU整网变卡端口流量异常二层环路、广播风暴、未知单播泛洪STP状态、MAC漂移、端口流量能上内网不能上外网缺默认路由、NAT未配置、运营商侧问题默认路由、NAT会话表、公网出口状态时通时断ARP缓存老化、双链路负载不均ARP表项、链路聚合状态、端口错误统计6. 实操心得用最小实验环境验证转发逻辑6.1 搭一个能复现所有问题的实验环境你不需要真机用模拟器搭三台设备就能完全复现上面的流程一台三层交换机、一台路由器或者直接用三层交换机的VLANIF做网关也行、两台PC。拓扑固定成PC A接交换机端口1PC B接交换机端口2路由器接交换机端口3路由器WAN口再接一台模拟外网的设备。给PC A配192.168.1.10/24网关指到路由器的LAN口192.168.1.1/24给PC B配192.168.2.10/24路由器对应接口配192.168.2.1/24。这样就有了两个网段可以完整走一遍跨网段通信。配置命令各家厂商略有差异但核心逻辑都一样。给个通用示例# 交换机上创建VLAN并放行端口 vlan 10 vlan 20 interface GigabitEthernet 0/0/1 port link-type access port default vlan 10 interface GigabitEthernet 0/0/2 port link-type access port default vlan 20 interface GigabitEthernet 0/0/3 port link-type trunk port trunk allow-pass vlan 10 20# 路由器上配置两个接口的IP作为网关 interface GigabitEthernet 0/0/0 ip address 192.168.1.1 255.255.255.0 interface GigabitEthernet 0/0/1 ip address 192.168.2.1 255.255.255.0配置完成后验证命令最关键# 交换机上看MAC表是否学习到两张表项 display mac-address # 路由器上看ARP表和路由表 display arp display ip routing-table # 从PC A那边tracert到PC B tracert 192.168.2.10如果tracert显示走了两跳第一跳是网关第二跳直接到PC B说明整个链路完全正常。如果第一跳就超时问题在网关或ARP如果第二跳超时问题在对端网段或回程路由。6.2 我踩过的几个坑第一个坑是VLAN配置后端口忘了放行。PC A和PC B明明在不同VLAN交换机上trunk端口没把两个VLAN都放行结果跨网段包到了路由器接口却被交换机拒收。查了半天路由表最后才发现是trunk放行列表不全。第二个坑是默认网关的掩码写错。PC A配网关192.168.1.1时子网掩码写成了255.255.255.240导致主机以为192.168.2.10和自己同一个网段直接发ARP广播找PC B的MAC。PC B当然不回数据包就一直卡在二层。这种问题只看IP配置根本想不通但你把掩码一换就通了。第三个坑是交换机MAC表项老化导致单播变泛洪。某次业务间歇性卡顿查下来是因为交换机老化时间设成了60秒而业务本身是低频长连接中间空闲超60秒后MAC表项被清掉下一次通信变成未知单播泛洪流量被广播到所有端口把接入交换机上联口打满了。把老化时间调回默认值后问题消失。第四个坑是回程路由缺失。给某分公司配置了去往总部的静态路由总部回程时走了默认路由默认路由的下一跳却在另一个防火墙上导致回包被防火墙丢弃。最后在总部防火墙上补了一条明细静态路由才解决。从那次以后我每次配置静态路由都习惯性检查两个方向。6.3 一个比较隐蔽的MTU问题还有一次内网访问某个服务小文件都正常一传大文件就断。抓包发现TCP三次握手没问题但数据阶段有大量ICMP fragmentation needed报文。查了两端网卡MTU都是1500后来才发现中间有一段VXLAN隧道真实承载MTU只有1400。链路MTU变小后大包无法分片只能丢弃。解决办法是在交换机上调整出接口MTU或者在服务器上把TCP MSS钳制一下。这类问题不常见但一碰就是疑难杂症。6.4 带新人的习惯先在纸上走数据流我带新人时总会提一个要求动手改配置之前先把数据流在纸上走一遍。从源到目的经过哪台交换机、哪个VLAN、哪个路由器接口下一跳是谁去程怎么走回程怎么走把每一跳的MAC和IP变化都标出来。这个习惯养成了很多故障光靠推演就能找到答案根本不用抓包。比如有人反馈手机连Wi-Fi能上内网但上不了外网。你先在纸上过一遍手机 → AP → 接入交换机 → 核心 → 出口路由器。内网通说明二层和三层的内部路径没问题上不了外网只可能是缺默认路由、NAT没生效或者运营商侧出问题。按这个顺序查五分钟就能定位。要是没这个思路可能先在交换机上翻半天没用的配置。结尾就是这些。交换机负责精确投递到人路由器负责规划跨城路线中间的网关是每个主机出门的第一道关口。数据包每一次旅行都是IP规划路线、MAC完成交接、交换机做末端配送的过程。你只要把每一步的变化记熟了以后再碰到网络不通心里自然有了一张完整的地图照着图一步步查问题跑不掉。
阅读完成 · 觉得有帮助?