ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

三层交换机原理、VLAN网关规划与华为思科对接排障实战

三层交换机原理、VLAN网关规划与华为思科对接排障实战 前些天帮一个朋友排查网络故障他们办公区新扩了几十个工位VLAN加了三个结果新VLAN的电脑能上网却ping不通老VLAN的打印机。我远程看了一眼拓扑核心交换机是一台二层设备网关全在防火墙上跨VLAN流量全部绕到防火墙再绕回来。问题倒不是配置写错了而是这种网关飘在外边的架构本身就容易埋雷。后来我把网关下沉到一台三层交换机上问题一次解决。那次之后我越发觉得三层交换机这个东西很多人天天在用但真问到它和路由器到底差在哪为什么能跑满线速华为和思科对接为什么老出幺蛾子能讲清楚的人真不多。这篇文章就把我这些年和三层交换机打交道的心得完整写一遍。你会看到它的转发原理、配置前的规划思路、华为与思科对接时的各种隐藏差异以及一套我反复用的、从物理层到ARP表的完整排障链路。不管你是刚入行的网络工程师还是公司里兼职管网络的IT照着这篇的思路去操作应该能少走不少弯路。1. 三层交换机到底干了什么转发逻辑与为何能跑满线速的底层原理1.1 三层交换和路由器本质区别在哪很多人第一次接触三层交换机时脑子里冒出来的问题是这不就是一台能做路由的交换机吗话是没错但只说对了一半。传统路由器走的是CPU逐包转发的路线每个数据包到达后CPU要读包头、查路由表、算下一跳、改TTL、重新封装然后才丢出去。这个过程灵活但每秒钟能处理的包数量相当有限。家用路由器跑百兆都费劲就是这个原因。三层交换机走的是另一条路它把路由计算的结果提前下发到硬件芯片里的FIB转发信息库Forwarding Information Base数据包真正转发的时候根本不经过CPU而是由ASIC芯片直接查硬件表项完成。第一次转发由CPU做软件路由一旦路径确定后续同一条流的包全部走硬件快路径。这就是行业里常说的一次路由多次交换。打个比方传统路由器像一个每次都要翻地图的司机每到一个路口都要重新算一遍怎么走三层交换机则是在出发前就把路线画在了一张玻璃板上车开过去的时候直接顺着线走又快又稳。1.2 一次跨VLAN通信在机箱里如何走完理解了硬件转发的思路再看一次完整的跨VLAN通信过程就会清晰很多。假设PC A在VLAN 10IP是192.168.10.5/24网关是192.168.10.254三层交换机上的VLANIF 10PC B在VLAN 20IP是192.168.20.5/24网关是192.168.20.254三层交换机上的VLANIF 20。第一步PC A发现目标IP不在自己网段会把帧发往默认网关。它先发ARP请求问192.168.10.254的MAC是谁三层交换机收到后由VLANIF 10接口回应自己的MAC地址。第二步PC A把数据帧的目地MAC写成网关MAC源MAC写成自己的MAC从Access口带着VLAN 10的tag进入交换机内部。第三步交换机内部查MAC地址表发现VLANIF 10这个逻辑三层接口对应的芯片端口于是帧被送到三层转发引擎。引擎做的事情是剥掉原来的二层头看IP头里的目的地址192.168.20.5查FIB表找到出接口是VLANIF 20下一跳MAC需要解析。第四步三层引擎查询ARP表找到192.168.20.5对应的MAC地址如果还没有就主动发ARP请求去学然后用这个MAC重新封装二层头打上VLAN 20的tag从对应物理端口送到PC B。整个过程真正的逻辑判断全在硬件里完成这也是为什么三层交换机在跑跨VLAN大流量时背板吞吐可以做到线速——它根本没有慢的环节。1.3 VLANIF、SVI、路由口三个概念别搞混三层交换机上创建三层接口的方式主要有两种很多新手在配置时容易混。第一种是SVI在华为上叫VLANIF在思科上叫interface vlan。它本质上是给某个VLAN创建一个逻辑三层接口这个接口的IP地址就是该VLAN内所有PC的网关地址。配置SVI之前这个VLAN必须已经存在且至少有一个物理端口属于它。第二种是路由口就是把物理端口直接变成三层接口不划分VLAN。华为上的命令是undo portswitch思科上是no switchport。这种接口通常用来做交换机之间的三层互联、接防火墙、接路由器。两者的选择逻辑很简单下行接终端用SVI好处是网关统一、方便管理上行互联用路由口好处是隔离广播域、路由清晰。如果树状拓扑中上下行都想跑三层那就SVI和路由口配合着用。2. 配置前必须先想清楚的三件事VLAN划分、网关位置、路由模式2.1 网关下沉跨VLAN流量为什么要走交换机而不是防火墙网络规划里有一个争议了很久的话题网关放在哪防火墙、核心路由交换机、还是汇聚交换机我的实践结论是如果环境里跨VLAN互访流量很大网关尽量不要放在防火墙上。原因特别简单——防火墙的本质是安全设备它的处理性能优先保证过滤和状态检测转发吞吐量通常比同级别的三层交换机差一个量级。你把网关放在防火墙后面所有跨VLAN流量都变成南北向流量不仅要绕路还要过一遍安全策略无端增加了延迟和故障点。合理的做法是三层交换机做网关处理VLAN间的东西向流量防火墙只管南北向流量访问互联网、跨区域访问并在防火墙上写好回程路由。这样既保证了内网高速互访又不牺牲安全边界。2.2 VLAN划分的粒度别把三层交换机用成二层交换机接上面说的如果三层交换机要承担网关角色VLAN划分就得有规划。我一般按三个维度来切分。管理VLAN专门给网络设备自己用比如交换机管理地址、远程登录网段单独一个VLAN不跟业务混跑。业务VLAN按部门或功能划分办公、打印、监控、访客分开网关都在三层交换机上。互联VLAN专门用于交换机之间、交换机到防火墙的互联单独占用一个VLAN比如VLAN 100后续做Trunk放行时一目了然。具体配置时华为侧用vlan batch 10 20 30 100批量创建然后逐一给VLANIF配置IP。要注意的是VLANIF的地址掩码决定了这个网段的大小规划时最好留出余量不要一个部门只给29位掩码改天加十个人就得重新划网段很被动。2.3 全局路由模式为什么网关建在VLANIF上而不是物理口上不少人在配置时有一个误区以为有了三层交换机所有端口都得是三层口。实际情况恰恰相反绝大多数端口都保持二层口只有VLANIF需要承担网关。这里的关键是华为和思科在端口默认属性上的差异思科交换机的物理口默认是二层口要变成三层口必须敲no switchport华为交换机比如S5720系列的物理口默认也是二层口要变成三层口得执行undo portswitch。如果不做这个切换直接往物理口上配IP命令行会直接报错。所以在规划时必须先想清楚这台设备哪些口是接终端的保持二层哪些口是上行互联的切成三层口哪些VLAN需要创建VLANIF做网关。顺序一定是先规划、后配置否则后续返工很麻烦。另外要提一个很多老工程师才清楚的细节华为S系列交换机上VLANIF创建后默认就是三层接口不需要额外敲什么但接口的物理状态必须UPVLANIF才能UP。如果VLAN里一个UP的二层口都没有VLANIF会一直显示DOWN路由表里也不会有直连路由这是排查时特别容易忽略的一环。3. 华为与思科对接为什么配置看着全对包就是不通3.1 名称不同逻辑等价别把VLANIF和interface vlan当成两回事华为和思科在三层交换机上做VLAN网关时命令长得不一样但做的事完全一样。华为是interface vlanif 10思科是interface vlan 10。有些做过华为的人第一次摸思科设备看到interface vlan 10以为是在创建一个二层VLAN接口其实不是这就是SVI。很多人对接排障时习惯性地用华为的命令去理解思科的输出结果来回绕圈。我的建议是先不看命令语法先把两边各是什么角色画清楚。比如A设备是华为汇聚B设备是思科核心两者之间用Trunk互联两侧要放行相同的VLAN网关各自负责各自的网段——先把逻辑理清再去看命令问题就简单多了。3.2 默认行为差异Trunk封装、Native VLAN、接口模式华为和思科对接最大的坑并不在于路由协议而在于二层的默认行为完全不一样。我这里列几个最典型的。第一Trunk封装。思科早期的二层交换机上Trunk封装可以协商成ISL或802.1Q有些型号比如老Catalyst 2950/3560必须手工指定switchport trunk encapsulation dot1q才能启用802.1Q。而华为交换机只支持802.1Q。如果思科侧忘了指定封装两边协商不出来Trunk口会一直处于down或者协议down状态。现在的新型号虽然默认802.1Q但碰到老设备时这条命令永远值得先查一遍。第二Native VLAN华为叫PVID。思科Trunk默认native VLAN是VLAN 1华为Trunk的默认PVID也是VLAN 1。表面上看是一致的但真正的问题是如果你在华为侧把PVID改成了100而思科侧native VLAN还留在1那么华为侧发出去的VLAN 100的untagged报文到达思科后会被当成VLAN 1的报文处理VLAN 100的流量就会诡异的不通。第三接口默认模式。思科二层口默认是dynamic desirable模式也就是会主动发送DTP协商报文试图和对端形成Trunk华为二层口默认是Hybrid模式也就是既带tag也带untag但默认不主动协商Trunk。两边行为不匹配的后果是一个口以为自己是Trunk另一个口以为自己是Access物理层是UP的VLAN tag却对不上二层通信自然出问题。对接时的建议是两侧都明确指定模式华为侧用port link-type trunk思科侧用switchport mode trunk不要依赖任何默认协商。3.3 自协商与STP物理通、逻辑断的经典场景另一个容易被忽略的问题是端口自协商。华为和思科对接时如果一端强制了速率和双工比如强制100M全双工另一端还跑着自协商就会出现错配物理链路能link up但大量CRC错误、丢包、时通时断。这种情况在跨VLAN ping的时候表现得尤为明显——小包能通大包和持续流量就疯狂丢。生成树协议也一样。华为默认启用STP通常是MSTP思科默认跑PVST。两者通过Trunk互联时如果VLAN数量多两边生成树实例计算出来的角色可能不一致导致某些VLAN的端口被阻塞。排查时如果看到接口状态是UP但VLAN就是不通一定要看一眼生成树状态别急着改路由配置。3.4 华为和思科三层口互联的基础配置模板下面给一套我常用的、两侧都是明确配置的对接模板适合华为汇聚接思科核心的场景。华为侧vlan batch 10 20 100 interface vlanif 10 ip address 192.168.10.254 255.255.255.0 interface vlanif 20 ip address 192.168.20.254 255.255.255.0 interface vlanif 100 ip address 192.168.100.1 255.255.255.252 # interface GigabitEthernet0/0/1 port link-type trunk port trunk pvid vlan 100 port trunk allow-pass vlan 10 20 100思科侧vlan 10,20,100 interface vlan 10 ip address 192.168.10.253 255.255.255.0 interface vlan 20 ip address 192.168.20.253 255.255.255.0 interface vlan 100 ip address 192.168.100.2 255.255.255.252 # interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 100 switchport trunk allowed vlan 10,20,100 spanning-tree portfast disable这套配置里互连接口使用了专门的互联VLAN 100并且把Trunk的native VLAN统一改成100。这样业务VLAN 10和20全部打tag传输互联VLAN 100作为管理面通信既安全又清晰。两侧VLANIF的网关地址也可以错开避免双网关冲突。4. 无法转发包完整排查链路从物理层到ARP表一步步定位4.1 第一步先分清是链路不通还是路由不通接到三层交换机转发不了包的报障我从来不会一上来就去抓包。先问自己一个问题这个不通是同一个VLAN内的PC互相ping不通还是跨VLAN不通这两个问题的排查路径完全不同。同VLAN不通问题大概率出在二层端口VLAN配错、线缆故障、网卡问题。跨VLAN不通问题才可能出在三层VLANIF没配、路由缺失、ARP学习失败、ACL拦截。实际操作时我会在PC上先ping网关网关通了说明二层链路正常再ping远端设备不通就说明三层有问题接下来查三层交换机本身。4.2 第二步物理层与接口状态确认华为设备上先看接口状态display interface GigabitEthernet0/0/1 display error-down recovery display stp brief思科设备上show interfaces status show interfaces counters errors show spanning-tree summary这里我要强调一个经验不要只盯住Physical link is up这一行。还要看Input errors、CRC、runts这些计数。如果错误计数在持续增长说明物理层其实有问题常见原因是双工不匹配或网线质量差。这种情况下改路由配置是没用的。4.3 第三步查看ARP表和MAC表确认谁看到谁这是整个排查里最核心的一步。三层交换机转发跨VLAN报文靠的是ARP表解析下一跳MAC靠MAC地址表把帧送到正确的物理口。如果ARP表学不到或者MAC地址表里找不到目标设备转发就会失败。具体操作思路在PC A上ping PC B失败时立刻在三层交换机上看ARP表。华为display arp | include 192.168.20.5 display mac-address vlan 20思科show ip arp 192.168.20.5 show mac address-table vlan 20判断逻辑是这样的ARP表里能看到192.168.20.5的MAC说明网关能解析到PC B路由转发链路已经通了一半问题可能出在回程方向或者终端本身。ARP表里什么都没有说明三层交换机根本没有收到PC B的ARP响应问题大概率出在二层——VLAN放行没做全、Trunk配置不对、或者PC B所在端口没划进VLAN 20。ARP表里PC A有记录PC B没有说明PC B方向的链路或VLAN有问题这就是典型的单向不通。我曾经处理过一起华为S5720接思科3750VLAN 20不通的案例排查到这里就水落石出了华为侧Trunk放行了VLAN 20思科侧trunk allowed vlan里只写了10,100漏了20。终端能ping通自己网段的网关但网关的ARP请求发不到VLAN 20里的PC因为Trunk根本没放行。加上VLAN 20之后ARP表一下子就学到了。4.4 第四步路由表、VLANIF接口状态、ACL逐一核对如果ARP表都能学到还是不通那就查三层交换机自身的路由表。华为display ip routing-table display ip interface brief思科show ip route show ip interface brief排查重点有三个。第一目标网段在路由表里是否存在。如果没有检查VLANIF是否UP、IP是否配置正确如果目标网段不在直连范围也不在静态路由范围就得补路由。第二VLANIF接口状态是否正常。华为的display ip interface brief里面VLANIF如果显示DOWN多半是VLAN内没有UP的物理端口。第三有没有ACL挡路。华为侧查display acl all思科侧查show access-lists。如果你在VLANIF上挂了traffic-filter或者ip access-group记得看看是不是把正常流量也拦了。4.5 一套可以抄作业的排障命令清单把上面的步骤浓缩成一张清单我实际操作时基本就是按这个顺序往下走几乎每次都能在五分钟内定位问题。确认PC能ping通自己网段的网关。在网关交换机上看ARP表确定网关能不能解析到目标IP的MAC。查看Trunk链路两侧的允许VLAN列表确认目标VLAN被放行。查看目标PC所在端口是否正确划入目标VLAN端口状态是否UP。查看三层交换机路由表确认目标网段存在直连或静态路由。查看VLANIF接口状态确保不是DOWN。最后再检查ACL、生成树、端口安全这些隐形杀手。这套顺序的核心逻辑是自下而上从终端到二层从二层到三层从三层到策略。顺序反了很容易在错误的方向上周转半天。5. 实战中反复踩的坑封装、PVID、双活网关每个都是大坑5.1 Trunk封装命令缺失思科老设备的经典问题我第一次拿思科3560和华为S5700做对接时就踩过封装这个坑。两端配置都写了Trunk也起来了但VLAN 10不通VLAN 20不通VLAN 100倒是通的。后来发现思科3560的Trunk接口需要额外敲switchport trunk encapsulation dot1q否则默认协商出来的封装不是802.1Q华为侧自然不认识。判断方法很简单在思科上执行show interfaces trunk如果显示的是Trunking mode: negotiate或封装是ISL基本就是这个问题。解决方法是把命令补上然后两端接口都shutdown再no shutdown重新协商一次。5.2 PVID和Native VLAN错乱平时不出事出事找不到原因Native VLAN/PVID的问题是所有Trunk故障里最隐蔽的一种。因为配置界面里通常不会明晃晃地报错线上流量该通的还通只有特定VLAN不通。最经典的情景两栋楼之间的骨干Trunk一侧华为透传VLAN 50管理员为了管理方便把华为侧PVID改成了VLAN 50另一侧思科的native VLAN仍是默认的VLAN 1。结果就是从华为侧发往思科侧的不打tag的管理报文被思科理解成了VLAN 1的报文而思科侧发回的VLAN 1报文到了华为侧又被当成VLAN 50。两边各自管理地址互不干扰还好一旦涉及互访和DHCP问题就极其诡异。我的习惯是互联Trunk单独划分一个互联VLAN比如VLAN 100两端PVID/native VLAN都改成100。这样管理报文走互联VLAN业务VLAN全部打tag两边语义一致出问题的概率降到最低。5.3 双活网关场景VRRP与HSRP之间的文化差异三层交换机还有一个高频场景是双活网关两台三层交换机做VRRP或者堆叠共同承担一个网段的网关。华为侧用VRRP思科侧有的用HSRP有的用VRRP。两边都是私有实现或标准实现的区别对接时要注意几点。第一VRRP和HSRP的组播地址不同VRRP用224.0.0.18HSRP用224.0.0.2。如果一端跑的是HSRP另一端理解成VRRP组播报文直接互相忽略虚拟网关协商不出来。第二虚拟MAC不同VRRP的虚拟MAC以00-00-5e-00-01-xx开头HSRP以00-00-0c-07-ac-xx开头。如果交换机MAC表里看到两条不一样的虚拟MAC在漂移很可能两边跑的不是同一套协议。第三抢占和优先级配置要一致否则故障恢复时虚拟IP来回横跳造成全网断流。5.4 生成树与端口安全让通变成时通时断的元凶最后再提一个我踩过的坑华为和思科对接时边缘端口和STP的配置不一致会导致一个端口在链路UP之后还要等30到50秒才能转发数据。如果你的终端开了DHCP自动获取IP可能就会遇到开机拿不到地址等一会儿就好了的诡异现象。解决办法是接终端的端口华为侧配置stp edged-port enable思科侧配置spanning-tree portfast互联端口不要盲目开portfast而是通过配置让STP正常收敛。另外华为侧的广播风暴控制storm-control和思科侧的storm-control broadcast如果不小心开得过严也可能把正常广播报文当成风暴丢弃表现同样是某些VLAN不通。排查这类问题时建议在一端临时display trapbuffer或show logging看看有没有STP拓扑变化、风暴控制的日志通常能找到线索。说了这么多其实三层交换机并没有多神秘它就是一台把路由逻辑硬件化的交换机。但正因为硬件化它把很多原本在路由器上可见的细节比如接口UP/DOWN、路由表计算、ARP学习隐藏到了芯片里出了问题反而更难定位。我个人这几年最深的体会就一句话排三层交换机的故障永远从ARP表看起它是一台三层设备所有智慧的集中体现。下次你再碰到华为交换机连思科三层交换机无法转发包这种问题试着先别动配置把你两端的ARP表拉出来对一眼往往答案就写在那里。
返回列表