1. 先弄明白Packet Tracer模拟的是什么,再动手敲命令
刚接触网络实验的人几乎都会遇到同一个场景:拓扑拉好了,线连上了,设备指示灯一片绿,PC的IP也配了,结果一ping全红。有人开始怀疑自己VLAN划错了,有人怀疑模拟器坏了,还有人反复重启设备折腾半小时。我见过太多这样的排查过程,最后发现问题往往出在对这个模拟器本身的预期上——它不是真机,它模拟的是配置逻辑和协议行为,而不是芯片级的转发时序。把这一层想清楚,后面VLAN、生成树、路由的配置才不会被"假故障"带偏。
1.1 模拟器只实现了IOS的一个子集,别拿真机手册硬套
Packet Tracer里的交换机和路由器,命令行结构高度还原了真实设备的IOS,enable、configure terminal、interface、vlan这些命令的层级和提示符几乎一模一样,这也是它适合入门的原因。但它对命令的支持是有选择的:常用的VLAN、Trunk、STP、静态路由、RIP、OSPF基础配置基本都有,而一些高级特性比如私有VLAN、复杂的策略路由、部分QoS队列机制,要么没有,要么实现得不完整。你在真机上习惯的某条命令,在这里敲下去可能直接报% Invalid input detected,这不是你敲错了,是设备镜像里压根没编译进去。
更值得注意的是转发面的简化。真机上一个数据帧从进入端口到出端口,要经过CAM表查找、ACL匹配、队列调度,延迟是微秒级但真实存在的;模拟器采用的是事件驱动的离散仿真,数据包在"时间步"里跳转。这就导致一个现象:你在模拟器里看到ping通了,只能说明三层可达逻辑成立,不能说明真机上线一定没问题。比如生成树的收敛时间,模拟器默认的转发延迟和真机PVST+的30秒(监听15秒+学习15秒)并不完全对应,有时候你敲完配置马上ping是通的,重启链路后又要等一会儿,这中间的差异就是模拟精度带来的。
我的建议是把它当成"配置语法训练场"和"协议行为观察窗",而不是性能测试平台。你要验证的是"这条命令下去,端口的角色变没变、VLAN表里有没有这个条目、路由表里有没有这条路由",而不是"吞吐能到多少、收敛用了多少毫秒"。
1.2 一个不臃肿但足够覆盖全部知识点的实验骨架
很多人一上来就拉十几台设备,线连得跟蜘蛛网一样,结果自己都理不清哪个口接哪个口。我习惯用下面这个最小骨架,五到六台设备就能把VLAN、Trunk、STP、VLAN间路由、静态路由全部串起来:
| 设备角色 | 数量 | 典型型号选择 | 承担的实验点 |
|---|---|---|---|
| 接入交换机 | 2台 | 2960系列 | VLAN划分、Access端口、PortFast |
| 核心/三层设备 | 1台 | 3560系列或2911路由器 | SVI或单臂路由、静态路由 |
| 终端PC | 4台 | 通用PC | 跨VLAN连通性验证 |
| 边缘路由器 | 1台 | 2911 | 默认路由、模拟外网出口 |
两台接入交换机之间拉两条线,故意形成环路,这样生成树的根桥选举、阻塞端口才会真实出现,否则你配了半天STP,show spanning-tree里连个阻塞口都看不到,等于白配。两台交换机各挂两个PC,分别划到VLAN 10和VLAN 20,核心设备负责这两个VLAN之间的三层互通。再加一台边缘路由器接在核心上,用来练默认路由和回程路由。
这个拓扑的好处是每一层职责清晰:接入层管二层隔离,核心层管三层转发,边缘层管出口。出问题的时候能快速定位是哪一层的事,不至于从头到尾重配一遍。
1.3 三种"看起来像配置错误"的假故障
第一种是设备还没启动完就急着测试。Packet Tracer里设备上电后有个启动过程,端口灯从橙色变绿色需要时间,命令行提示符也可能还在初始化。这时候你敲ping,大概率超时,但配置其实是对的。养成习惯:等所有链路灯变绿、show ip interface brief里状态显示up/up再开始测。
第二种是端口默认处于shutdown状态。真实交换机的Access端口出厂一般是开启的,但模拟器里部分型号的接口初始状态需要手动no shutdown。尤其是路由器的物理接口,interface gi0/0敲完不no shutdown,show ip interface brief里永远是administratively down,新手经常在这里卡住。
第三种是实时模式与仿真模式的混淆。切到仿真模式后,数据包会停在某个设备上等你点"继续",这时候ping当然不会通。这个不算故障,但确实有人被自己坑过。
提示:每做完一段配置就保存一次,
write memory或者copy running-config startup-config。模拟器崩溃或者误关窗口的情况我遇到过不止一次,重配一遍的滋味不好受。
2. VLAN划的不是标签,是广播域的边界
很多人背得出一句"VLAN用于隔离广播域",但真到配置的时候,脑子里想的还是"给端口打个标记"。这个理解偏差会直接影响后面的排错思路。VLAN的本质是把一台物理交换机在逻辑上切成多台独立的虚拟交换机,每台虚拟交换机有自己独立的MAC地址表和广播域。VLAN 10里的广播帧,物理上不会从VLAN 20的端口发出去,哪怕它们在同一块芯片上。理解了这一层,你才会明白为什么VLAN间通信必须靠三层设备,为什么Trunk口要打标签。
2.1 不划VLAN会付出什么代价
假设一个24口的接入交换机全在默认VLAN 1里,接了20台机器。任何一台机器发一个ARP广播("谁是192.168.1.100?"),这个帧会被复制到其余19个端口。ARP还算轻的,DHCP发现报文、NetBIOS名称解析、生成树的BPDU,都是广播或者组播性质。设备少的时候感觉不出来,设备一多,广播帧占用的带宽和CPU周期就会变成实打实的负担,这就是常说的广播风暴的温床。
更现实的问题是安全和管理的边界。财务的机器和访客的机器在同一个广播域里,一台机器中毒或者中了ARP欺骗,整个域内的通信都可能被污染。划分VLAN之后,二层被物理隔断,跨VLAN的流量必须经过三层设备,那里可以做ACL、可以做流量统计,管控点就出来了。所以VLAN不只是技术手段,它是网络规划里"分权"思想的落地。
2.2 建VLAN、划端口:命令背后其实做了三件事
配置本身很短,但每一步都有它的用意:
Switch> enable Switch# configure terminal Switch(config)# vlan 10 Switch(config-vlan)# name Sales Switch(config-vlan)# exit Switch(config)# interface fastEthernet 0/1 Switch(config-if)# switchport mode access Switch(config-if)# switchport access vlan 10 Switch(config-if)# no shutdown第一件事,vlan 10在VLAN数据库里创建了一条记录,同时让这台交换机在转发时能够识别VLAN 10这个标识。注意,VLAN不创建,端口是无法划进去的,虽然某些IOS版本会自动创建,但依赖这个行为是坏习惯。
第二件事,switchport mode access把端口的工作模式固定为接入模式。这一步经常被省略,因为2960的端口默认就是access模式。但省略的代价是:万一对面接的是一台想协商Trunk的设备,端口可能被动态协商成Trunk(取决于DTP状态),VLAN就乱了。显式指定模式,是给端口上一个"锁"。
第三件事,switchport access vlan 10把这个端口加入VLAN 10的成员列表。从这一刻起,从这个口进来的无标签帧,都会被交换机打上VLAN 10的内部标记,在VLAN 10的MAC地址表里学习源MAC。
顺带说一个容易忽略的细节:交换机的管理地址。如果你想让这台交换机被远程管理,需要给VLAN接口配IP:
Switch(config)# interface vlan 1 Switch(config-if)# ip address 192.168.1.254 255.255.255.0 Switch(config-if)# no shutdown这个interface vlan 1就是SVI(交换虚拟接口),它代表"交换机自己在VLAN 1里的那个身份"。PC要能ping通它,PC的网关或者同网段地址必须能到达这个VLAN。
2.3 Trunk:一根线上跑多个VLAN的标签机制
两台交换机之间如果每个VLAN都拉一根线,24个VLAN就要24根线,端口根本不够用。Trunk解决的就是这个问题:一根链路承载多个VLAN的流量,靠802.1Q标签区分。
标签是在以太网帧头里插4个字节,里面有个12位的VLAN ID字段,理论上支持4094个VLAN。帧从Trunk口出去时打上标签,进入对端Trunk口后根据标签转发到对应的VLAN,出Access口时再剥掉标签,终端看到的就是普通以太网帧,完全感知不到标签的存在。这就是所谓的"标签只在交换机之间有意义"。
配置写法:
Switch(config)# interface gigabitEthernet 0/1 Switch(config-if)# switchport trunk encapsulation dot1q Switch(config-if)# switchport mode trunk Switch(config-if)# switchport trunk allowed vlan 10,20,30 Switch(config-if)# switchport trunk native vlan 99switchport trunk encapsulation dot1q这条命令只在支持多种封装(ISL和802.1Q)的型号上才需要,比如3560。2960只支持dot1q,敲这条会报错,别慌,跳过就行。
switchport trunk allowed vlan是白名单机制。默认情况下Trunk允许所有VLAN通过,但生产环境里我强烈建议显式指定。原因很简单:默认全通过意味着任何人新建一个VLAN,流量自动就能穿过所有Trunk,这在安全和排错上都是隐患。
2.4 划完VLAN必须立刻做的四项验证
配置敲完不等于生效,尤其是模拟器里有些状态需要时间刷新。我会固定做这四项检查:
show vlan brief show interfaces trunk show interfaces switchport show mac address-tableshow vlan brief看VLAN有没有建成功、哪些端口在哪个VLAN里。这个表最直观,端口列在哪个VLAN下面一目了然。
show interfaces trunk看Trunk有没有起来、封装方式、native vlan、允许的VLAN列表。如果这个命令输出为空,说明Trunk没协商成功,八成是模式或者封装的问题。
show interfaces switchport看单个端口的详细属性,包括管理状态、工作模式、access vlan、trunk allowed vlan。排错的时候这个命令信息量最大。
show mac address-table看MAC地址学习情况。如果同一个VLAN内的两台PC互相ping不通,但VLAN和端口都配对了,八成是MAC没学到,可能是链路问题或者PC的网卡没启用。
3. Trunk链路上三个高频翻车点,我全踩过
VLAN和Trunk的配置命令就那么几条,但真正让人抓狂的是"配置看起来都对,就是不通"。下面这三个坑,我在带新人的时候见过无数次,每一个都能让人耗掉一整个下午。
3.1 native vlan两端不一致:丢包丢得无声无息
802.1Q规定有一个VLAN的帧在Trunk上传输时不打标签,这个VLAN叫Native VLAN,默认是VLAN 1。设计初衷是兼容不支持标签的老设备,但它在实际使用中是个大麻烦。
问题出在两端配置不一致的时候。假设A端native vlan是1,B端native vlan是99。A端从VLAN 1发出的帧不带标签,到了B端,B端会把所有不带标签的帧都归到VLAN 99里。结果就是VLAN 1的流量莫名其妙跑到了VLAN 99,两个VLAN的MAC表都学乱了,通信自然不通。
更坑的是这种现象不会报错,接口状态是up的,Trunk也是up的,只有业务不通。我第一次遇到的时候查了两个小时,最后靠show interfaces trunk对比两端输出才发现native vlan对不上。
解决办法有两个:一是两端显式配置成同一个native vlan,且这个VLAN不要承载业务流量,专门留作管理或者干脆不用;二是把native vlan改成一个没人用的VLAN号,同时两端保持一致。我倾向于后者,用一个不承载业务的VLAN 999做native,业务VLAN全部走标签,边界清晰。
Switch(config)# interface gigabitEthernet 0/1 Switch(config-if)# switchport trunk native vlan 999改完之后记得两端都改,并且用show interfaces trunk确认。
3.2 allowed vlan白名单漏写,VLAN建了但过不了线
这个坑的典型症状是:两台交换机上都建了VLAN 10,两边的端口也都划进了VLAN 10,PC的IP在同一网段,但就是ping不通。你一查show vlan brief,两边都正常;再查show interfaces trunk,发现允许列表里只有VLAN 1。
原因就是switchport trunk allowed vlan是一条覆盖式命令。你敲switchport trunk allowed vlan 10,它会把列表设成只有10;过两天你要加VLAN 20,如果敲的是switchport trunk allowed vlan 20,那么VLAN 10就被踢出去了。正确的写法有两种:
Switch(config-if)# switchport trunk allowed vlan add 20用add关键字追加,这是最不容易出错的方式。或者一次性写全:
Switch(config-if)# switchport trunk allowed vlan 10,20,30另外提醒一句,VLAN的创建和Trunk的允许列表是两个独立的概念。VLAN建了不代表Trunk会放行,Trunk放行了不代表端口划进去了,这三个环节任何一个断了,流量都过不去。
3.3 端口模式协商:access接trunk的死循环
DTP(动态Trunk协议)会让端口尝试协商对端的工作模式。理论上很方便,实际上经常帮倒忙。典型场景是一个配置成trunk的端口接到了另一台交换机的access端口上,两边谁也不让步,最后端口状态可能卡在notconnect或者协商成半吊子状态。
我的做法是:所有面向终端的端口强制access,所有交换机互联的端口强制trunk,全部关闭DTP协商。
Switch(config-if)# switchport mode access Switch(config-if)# switchport nonegotiateSwitch(config-if)# switchport mode trunk Switch(config-if)# switchport nonegotiatenonegotiate让端口不再发送DTP帧,避免不必要的协商。这样配置虽然死板,但可预期性极高,出了问题也容易定位。网络配置里"确定性"比"灵活性"值钱得多。
4. 生成树:网络里为什么要故意留环又主动断环
交换网络里有个反直觉的设计:物理上你必须留环路做冗余,逻辑上你又必须把环路阻塞掉。这两个要求看起来矛盾,生成树协议就是用来调和它们的。我在实验拓扑里特意拉两条线,就是为了让这个机制真实地跑起来,否则你永远只能背概念。
4.1 二层环路的破坏力,比想象中严重
二层帧的头里没有TTL字段。三层IP包每经过一个路由器TTL减1,减到0就丢弃,所以三层环路会自己终止。二层不会,一个广播帧进入环路后会被无限复制,交换机CPU和链路带宽瞬间被打满,整个广播域瘫痪。
具体的传播过程是这样的:PC发一个广播帧,交换机A从端口1收到,从端口2转发出去;交换机B从端口1收到,从端口2转发回交换机A;交换机A又从端口1收到同一个帧(此时MAC表里可能还没有记录,或者记录被覆盖了),再转发一次。帧在两端之间来回弹,每一次复制都占用带宽,几十毫秒内链路就满了。
这个问题不是理论推演,早期没有生成树的交换网络确实因此大面积瘫痪过。所以STP不是一个可选功能,它是二层网络能正常工作的前提。
4.2 根桥选举:比的是优先级加MAC,不是端口速率
STP收敛的第一步是选出一台根桥(Root Bridge),所有路径计算都以它为原点。选举规则很简单:比较桥ID(Bridge ID),桥ID由2字节的优先级和6字节的MAC地址组成,数值小的赢。
优先级默认是32768,可以手动改,但必须是4096的倍数:
Switch(config)# spanning-tree vlan 10 priority 4096或者更省事的方式,直接让设备去竞争根桥:
Switch(config)# spanning-tree vlan 10 root primary这条命令本质上就是把优先级调到4096(如果原优先级高于4096则调到更低)。对应的还有root secondary,优先级调到28672,作为备用根桥。
这里有个新手常见误解:根桥选举不比端口带宽,也不比设备性能。一台百兆的老交换机和一台千兆的核心交换机放在一起,如果老机器的优先级是4096,它照样当根桥,所有流量绕远路走它。所以我习惯在三层核心上手动指定root primary,把根桥位置固定住,不让选举结果随MAC地址漂移。
4.3 端口角色和状态迁移:阻塞口不转发数据但还在听BPDU
选举完根桥之后,每台非根交换机要选出一个根端口(Root Port),也就是到根桥路径开销最小的那个端口;每条链路上要选出一个指定端口(Designated Port),负责往这个网段转发;剩下的端口进入阻塞状态(Blocking/Alternate)。
阻塞状态很容易被误解成"端口关了"。其实不是,阻塞端口仍然在接收和解析BPDU,只是不转发用户数据。一旦拓扑变化(比如主链路断了),它能在几十秒内切换成转发状态,这就是冗余的价值。
端口状态的迁移路径,传统802.1D是这样的:
| 状态 | 是否转发数据 | 是否学习MAC | 持续时间 |
|---|---|---|---|
| Blocking | 否 | 否 | 最长20秒 |
| Listening | 否 | 否 | 15秒 |
| Learning | 否 | 是 | 15秒 |
| Forwarding | 是 | 是 | 稳定状态 |
| Disabled | 否 | 否 | 手动关闭 |
从阻塞到转发,最坏情况要30秒。这就是为什么插上网线之后有时候要等半分钟才能通。
Packet Tracer里默认的STP模式是PVST+(每VLAN一棵树),你可以改成RSTP来体验快速收敛:
Switch(config)# spanning-tree mode rapid-pvstRSTP把端口角色细分成Alternate和Backup,增加了边缘端口的概念,收敛时间能压到秒级。在模拟器里切换模式之后,观察show spanning-tree的输出变化,能很直观地感受到两种协议的差别。
4.4 PortFast和BPDU Guard:接终端的口不要参与选举
PC、打印机、服务器这些终端设备不会跑STP,它们插上就该通。但默认情况下,交换机端口起来之后仍然要走完Listening和Learning两个阶段,白白等30秒。这在办公环境里体验极差——员工插上网线,等半分钟才能上网,第一反应就是报故障。
PortFast让端口跳过这两个阶段,直接进入转发:
Switch(config)# interface range fastEthernet 0/1-20 Switch(config-if-range)# spanning-tree portfast但PortFast有个风险:如果这个口不小心接到了另一台交换机,而对面又发了BPDU,就可能形成环路,因为本端已经跳过检测直接转发了。所以必须配合BPDU Guard:
Switch(config-if-range)# spanning-tree bpduguard enable一旦这个端口收到BPDU,BPDU Guard会直接把端口置为err-disabled状态,物理上切断环路。恢复需要手动shutdown再no shutdown,或者配置自动恢复:
Switch(config)# errdisable recovery cause bpduguard Switch(config)# errdisable recovery interval 300这套组合拳我在所有接终端的端口上都配,实测下来既保证了插线即通,又挡住了误接交换机导致的环路。机房搬迁的时候有人把两根线插串了,BPDU Guard当场把口关掉,整个网络没受影响,这个价值只有出过事的人才懂。
5. VLAN间路由的两条路:单臂路由和三层交换
VLAN隔离了广播域,代价是VLAN之间不通了。要想让VLAN 10的PC访问VLAN 20的服务器,必须有一台三层设备做转发。业界有两条主流路线,各自适合不同的场景,在Packet Tracer里都能完整复现。
5.1 单臂路由:一根物理线扛起所有VLAN的转发
单臂路由的思路是:路由器只有一个物理接口连着交换机,通过在这个物理接口上创建多个子接口,每个子接口对应一个VLAN,实现VLAN间的三层转发。所谓"单臂",就是指这一根线既要收又要发。
交换机和路由器之间的这条链路必须配成Trunk,因为要承载多个VLAN的标签帧。路由器侧的子接口要封装对应的VLAN ID:
Router(config)# interface gigabitEthernet 0/0 Router(config-if)# no shutdown Router(config-if)# exit Router(config)# interface gigabitEthernet 0/0.10 Router(config-subif)# encapsulation dot1Q 10 Router(config-subif)# ip address 192.168.10.1 255.255.255.0 Router(config)# interface gigabitEthernet 0/0.20 Router(config-subif)# encapsulation dot1Q 20 Router(config-subif)# ip address 192.168.20.1 255.255.255.0encapsulation dot1Q 10这行的意思是:从这个子接口收到的带VLAN 10标签的帧,剥掉标签后交给这个子接口处理;反过来,这个子接口发出的帧会被打上VLAN 10的标签送回去。物理接口本身不配IP,它只负责承载,逻辑全在子接口上。
这个方案的优点是设备成本低,一台路由器就能搞定多个VLAN的互通,适合小型网络或者预算有限的场景。缺点也很明显:所有VLAN间的流量都要挤这一根物理链路,带宽是共享的;而且路由器做转发是基于软件的,吞吐能力远不如交换机的硬件转发。VLAN一多、流量一大,这条单臂就成了瓶颈。
还有一个容易忽略的细节:PC的默认网关必须指向对应子接口的IP。VLAN 10的PC网关是192.168.10.1,VLAN 20的PC网关是192.168.20.1,配错了就不通。我在实验里故意配错一次,观察show ip route和PC的arp表,能很清楚地看到"网关不可达"和"网关可达但路由缺失"两种不同表现。
5.2 三层交换的SVI方案:把网关下沉到接入侧
三层交换机内部同时具备交换和路由能力,它通过SVI(Switch Virtual Interface)为每个VLAN提供一个虚拟接口,这个接口就是该VLAN的网关。流量在交换机内部完成三层转发,不需要出物理端口再绕一圈,速度是硬件级的。
配置分两步,先开路由功能,再配SVI:
Switch(config)# ip routing Switch(config)# interface vlan 10 Switch(config-if)# ip address 192.168.10.1 255.255.255.0 Switch(config-if)# no shutdown Switch(config)# interface vlan 20 Switch(config-if)# ip address 192.168.20.1 255.255.255.0 Switch(config-if)# no shutdownip routing这条命令是关键,没有它,三层交换机只当二层交换机用,SVI配了IP也不会转发。很多人卡在这里,show ip route里只有直连网段,跨网段死活不通,就是因为忘了这一句。
还要注意连接下游交换机的那个端口必须配成Trunk,并且封装方式要指定:
Switch(config)# interface gigabitEthernet 0/1 Switch(config-if)# switchport trunk encapsulation dot1q Switch(config-if)# switchport mode trunk3560这类支持ISL的型号,如果不指定封装,端口可能默认走ISL或者协商失败,Trunk就起不来。
5.3 两种路线怎么选:一张表说清楚
| 对比维度 | 单臂路由 | 三层交换SVI |
|---|---|---|
| 转发性能 | 软件转发,受CPU限制 | 硬件转发,线速 |
| 带宽瓶颈 | 所有VLAN共享一条物理链路 | 内部交换矩阵,无单点瓶颈 |
| 设备成本 | 低,一台路由器即可 | 高,需要三层交换机 |
| 配置复杂度 | 子接口逐个配置,VLAN多时繁琐 | SVI集中配置,扩展性好 |
| 适用规模 | 小型网络、实验环境 | 中大型企业核心/汇聚层 |
| 故障域 | 单点故障影响所有VLAN | 可通过堆叠/冗余提升可靠性 |
实际项目里,小办公室用一台路由器做单臂路由完全够用,十几个人的网络谈性能瓶颈没意义。但只要终端数量上来、VLAN超过三四个、有服务器区需要高带宽访问,三层交换就是更合理的选择。Packet Tracer里两种都能做,建议都跑一遍,重点观察show ip route里直连路由的出现方式有什么不同——单臂路由的路由出现在路由器上,SVI的路由出现在三层交换机上,这个差异直接决定了你排错时该登哪台设备。
6. 路由配置:静态路由、默认路由和最容易漏的回程路由
VLAN间通信解决了内网的事,但网络不可能只在一个小圈子里转。跨网段、跨设备、出出口,都要靠路由。Packet Tracer里路由配置的坑不算多,但有一个坑几乎每个人都会踩,就是回程路由。
6.1 路由表查找遵循最长匹配,不是先来先得
路由器收到一个包,会拿目的IP去路由表里找匹配项,规则是"最长前缀匹配"——掩码最长的那个条目胜出,跟配置顺序无关。
举个例子,路由表里有这么两条:
ip route 192.168.0.0 255.255.0.0 10.0.0.1 ip route 192.168.10.0 255.255.255.0 10.0.0.2一个目的地址是192.168.10.5的包,两条都能匹配,但第二条的掩码是/24,比第一条的/16长,所以走10.0.0.2。这个机制叫最长匹配,是路由转发的基石。
理解这一点之后,默认路由就不神秘了:0.0.0.0 0.0.0.0的掩码长度是0,任何地址都能匹配它,但任何更具体的路由都会赢过它。所以默认路由本质上是"兜底条目",只有在没有更精确匹配的时候才生效。
Router(config)# ip route 0.0.0.0 0.0.0.0 203.0.113.1这条命令的意思是:所有我不知道往哪送的包,全扔给203.0.113.1。出口路由器上配这一条,内网所有网段就都能上网了,不需要为每个外网地址写一条静态路由。
6.2 静态路由的三种写法与下一跳的选择
静态路由的基本语法是ip route 目的网络 掩码 下一跳或出接口。在Packet Tracer里,下面三种写法都能用:
ip route 192.168.20.0 255.255.255.0 10.0.0.2 ip route 192.168.20.0 255.255.255.0 gigabitEthernet 0/0 ip route 192.168.20.0 255.255.255.0 gigabitEthernet 0/0 10.0.0.2第一种只写下一跳IP,最常见也最推荐。路由器会自己去ARP解析这个下一跳地址,解析到了就转发,解析不到就丢弃。这种方式的好处是逻辑清晰,而且当出接口是多路以太网(比如 EtherChannel)时不会有歧义。
第二种只写出接口,一般用在点对点链路上,比如串口。在以太网环境下写这种路由,路由器会认为目的网段直接挂在那个接口上,对每个目的IP都发ARP请求,效率低而且容易出问题。
第三种同时写出接口和下一跳,最保险但最长。实际配置里我一般用第一种,除非有特殊需求。
配置完记得验证:
Router# show ip route Router# show ip route static Router# show ip route 192.168.20.5最后那条带具体地址的命令特别好用,它会直接告诉你这个地址走哪条路由,不用自己在一堆条目里比对掩码。
6.3 浮动静态路由:给主链路配一个备份
静态路由的管理距离默认是1,直连路由是0。所谓浮动静态路由,就是把备份路由的管理距离改大,让它平时不生效,主路由失效了才顶上来:
ip route 192.168.20.0 255.255.255.0 10.0.0.2 ip route 192.168.20.0 255.255.255.0 10.0.1.2 200第一条是主路由,管理距离默认1;第二条是备份,管理距离200。正常情况下路由表里只显示第一条,第二条藏在数据库里。当主链路的接口down掉或者下一跳不可达时,第一条被撤销,第二条自动浮现。
这个机制在模拟器里很好验证:把主链路的一端shutdown,然后show ip route,能看到路由自动切到备份路径。切换时间取决于路由收敛速度,静态路由对本设备直连接口的状态变化反应很快,但对"下一跳可达但路径中断"这种间接故障无能为力,那需要动态路由协议来做。
6.4 回程路由:去得去、回不来的经典故障
这是静态路由实验里出现频率最高的问题。现象是:从PC A ping PC B,A这边显示超时,但你在B上抓包会发现B收到了请求并且回了响应,只是响应回不到A。
原因很简单:A发出的包经过了路由器R1转发到了R2,R2知道怎么到A的网段吗?不知道的话,响应包到了R2就被丢弃了。路由必须是双向的,去的路上配了路由,回来的路上也得配。
排查方法很直接,在两台路由器上分别show ip route,看对方网段在不在路由表里。不在就补一条指回去。
R1(config)# ip route 192.168.20.0 255.255.255.0 10.0.0.2 R2(config)# ip route 192.168.10.0 255.255.255.0 10.0.0.1我在带实验的时候,会故意只配一边,让新人去查。大部分人第一反应是检查VLAN、检查接口状态、检查PC的IP,很少有人立刻想到回程路由。这个思维习惯养成了,以后排查跨设备不通的问题效率会高很多。
注意:排查"通不了"的问题时,永远先问一句"回来的路在哪"。这个问题能解决一半以上的跨网段故障。
7. 排错:从物理层往上剥,别一上来就改配置
实验做多了就会发现,真正的能力不在于配置敲得多快,而在于出问题的时候能不能有条理地定位。我见过太多人一遇到不通就全盘重配,结果把原本对的配置也改乱了。下面这套排查顺序,是我自己反复用下来效率最高的。
7.1 分层排查的顺序和对应命令
网络排错有个基本原则:从底层往上查,物理层没问题再查数据链路层,然后网络层,最后应用层。跳层排查看起来快,实际上经常白忙。
| 层次 | 检查什么 | 对应命令 |
|---|---|---|
| 物理层 | 链路是否up、线序是否正确 | show interfaces status、show ip interface brief |
| 数据链路层 | VLAN、Trunk、MAC学习、STP状态 | show vlan brief、show interfaces trunk、show mac address-table、show spanning-tree |
| 网络层 | IP配置、路由表、ARP | show ip interface brief、show ip route、show arp |
| 应用层 | 具体服务是否可达 | ping、tracert(模拟器里是tracert命令) |
物理层最常见的两个问题是端口没no shutdown和线插错了口。Packet Tracer里连线的时候,交叉线和直通线虽然大部分情况下能自适应,但某些老型号设备对线序有要求,插错了灯不亮。这个细节容易被忽略。
数据链路层的问题集中在VLAN和Trunk上,前面那一章讲的native vlan、allowed vlan、端口模式,都在这一层。show mac address-table能快速判断一个VLAN里有没有学到MAC,如果表里空空如也,说明二层根本没通。
网络层看ARP和路由。PC上arp -a能看到网关的MAC有没有解析到,解析不到说明二层到网关这一段有问题;解析到了但跨网段不通,就是路由的事。
7.2 一次完整的故障复现:跨VLAN ping不通
我按真实排查过程走一遍,模拟一个典型场景:VLAN 10的PC1 ping VLAN 20的PC2,超时。
第一步,看PC自己的配置。IP地址、掩码、网关三项。网关配错是最常见的低级错误,尤其是网关指向了别的VLAN的SVI地址。确认PC1的网关是192.168.10.1,PC2的网关是192.168.20.1。
第二步,PC1 ping 自己的网关。通,说明PC到三层设备这一段的二层和三层都正常。不通,问题在本VLAN内部或者SVI没起来。
第三步,在三层设备上show ip interface brief,确认VLAN 10和VLAN 20的SVI都是up/up状态。SVI的状态和VLAN内是否有活跃端口相关,如果某个VLAN下所有端口都down,SVI也会down,这时候路由表里那个直连网段会消失。
第四步,show ip route看两个网段是否都在路由表里,并且是直连(C)状态。如果只有VLAN 10没有VLAN 20,说明VLAN 20的SVI有问题。
第五步,确认ip routing开了。这条命令在三层交换机上是全局开关,没开的话SVI再多也不转发。
第六步,检查Trunk。三层设备到接入交换机的那条链路,show interfaces trunk看VLAN 10和VLAN 20是否都在allowed列表里。这一步我被坑过,明明VLAN都建了,Trunk的允许列表里只写了VLAN 1,流量全被挡在外面。
第七步,如果以上都正常,看PC2的网关和掩码。PC2的网关如果不是192.168.20.1,回程就走不通,A能到B,B回不来,表现还是超时。
按这个顺序走下来,90%的问题能在十分钟内定位。关键是要按顺序,每一步都确认,别跳步。
7.3 保存配置、记录拓扑、归档命令
实验做完不保存,下次打开全是白板。write memory是必须的动作,我在每完成一个知识点的配置后就保存一次,避免后面配错了想回退却没有基线。
另外建议养成记录的习惯:拓扑截图、每个设备的IP规划表、VLAN划分表、关键的show命令输出。这些东西在做第二个、第三个实验的时候会非常有用,尤其是当你需要回头对比"上次这个配置为什么通、这次为什么不通"的时候。
还有一个我个人的小技巧:在每台设备的配置里加注释行,说明这台设备的作用和关键网段。IOS支持用!开头写注释,show running-config的时候能直接看到,比翻笔记本快多了。
! ! Core-SW : VLAN10=192.168.10.0/24 VLAN20=192.168.20.0/24 ! Trunk to Access-SW1 : gi0/1, native vlan 999 !这套习惯看起来琐碎,但做过十几个实验之后,你会感谢当初多敲的那几行注释。网络配置的本质是把逻辑固化下来,而记录是让这个逻辑能被未来的自己读懂的唯一方式。