网络知识
Switching · Routing · Campus Design

路由与交换实务

站点已有的是协议原理与 RFC。这一页补企业组网那一层:设备怎么配、状态机为什么这样转、设计选哪条、疑难怎么一层层拆。深度按 CCIE R&S / EI 笔试与实验来写,命令给 Cisco IOS、华为 VRP、H3C Comware 三家对照。

二层 VLAN / STP / 聚合 / 安全 三层 SVI · OSPF · EIGRP · BGP · FHRP 三厂商 IOS / VRP / Comware 读者 资深网工,不是入门课
读法 · 示例声明

下面所有 CLI 都是自写示例,接口名按各家习惯:Cisco Gi0/1、华为 GE0/0/1、H3C GE1/0/1。保存:Cisco end + write;华为 / 华三用户视图 save。命令随平台与版本漂移,拿不准的已标「以设备版本为准」。原理页链到站内,不在这里重讲 RFC 原文。

标准还是私有

attribution first

先把归属钉死。后面每个专题只补机理,不再反复声明。

技术归属编号 / 说明
STP标准IEEE 802.1D(经典);现并入 802.1Q
RSTP标准IEEE 802.1w,后并入 802.1D-2004 / 802.1Q
MSTP标准IEEE 802.1s,现并入 802.1Q。华为默认 MSTP
PVST+ / Rapid-PVST+Cisco 私有每 VLAN 一棵 STP/RSTP;BPDU 目的 01:00:0c:cc:cc:cd
802.1Q VLAN标准TPID 0x8100;VID 12 bit,1–4094 可用
VTP / DTPCisco 私有VTP 修订号能清空全网 VLAN;生产多用 transparent / off
LACP标准IEEE 802.3ad,后迁到 802.1AX。三家通用
PAgPCisco 私有desirable / auto。华为华三没有
HSRP / GLBPCisco 私有HSRP 另有 RFC 2281(信息性)。华为无 HSRP
VRRP标准RFC 3768(v2)/ RFC 5798(v3)。三家都有
OSPF v2 / v3标准RFC 2328 / 5340。IP 协议号 89
EIGRP曾私有 · 现信息性公开RFC 7868(2016,Informational)。IP 协议号 88。实现仍以 Cisco 为准
RIP / RIPv2标准RFC 1058 / 2453。UDP 520
BGP-4标准RFC 4271。TCP 179。Weight 是 Cisco 私有属性
BFD标准RFC 5880。单跳 UDP 3784,多跳 4784,Echo 3785
CDP / UDLDCisco 私有邻居发现用标准 LLDP(802.1AB)。华为对等 DLDP
PortFast / BPDU Guard / Root GuardCisco 名标准侧是 edge port;华为/H3C 叫 edged-port、bpdu-protection、root-protection

二层交换

switching plane

二层的全部问题最后都落成两件事:广播域怎么切,环路怎么破。VLAN 管前者,STP 管后者,聚合把多条物理链路收成一条逻辑链路以免 STP 挡住带宽。

1. VLAN 与 Trunk

概念:VLAN 在一台物理交换机上切出多个二层广播域;access 口只属一个 VLAN、进出都不带 tag;trunk 口在链路上用 802.1Q 四字节标签同时运多个 VLAN。

为什么需要:不切 VLAN,整栋楼一个广播域,ARP/DHCP/未知单播会淹满接入层。跨交换机要运多个 VLAN,必须 trunk,否则对端只看得到 native / 默认 VLAN。

802.1Q 与 native VLAN

标签插在源 MAC 之后:TPID 0x8100 + TCI(PCP 3 bit · DEI 1 bit · VID 12 bit)。VID 0 是 priority-tag,4095 保留,可用 1–4094。trunk 上一个 VLAN 可以不打标签,叫 native VLAN(默认 VLAN 1)。两端 native 必须一致,否则 VLAN 会「串」:A 侧不打标签发出的帧,B 侧按自己的 PVID 收下。

安全 · VLAN hopping

双标签攻击:攻击者接在 native VLAN 的 access 口,发出「外层=native、内层=目标 VLAN」的双 tag 帧。交换机看到外层是 native,剥掉后把内层 tag 当合法 802.1Q 送进 trunk,帧就进了本不该到的 VLAN。对策:native 改成空 VLAN(不放主机)、两端一致、Cisco 开 vlan dot1q tag native 让 native 也打标签、trunk 显式 allowed vlan 白名单。

VTP 一句话:Cisco 用修订号同步 VLAN 库。一台「空库 + 更高 revision」的交换机插进 server/client 域,能把全网 VLAN 清掉。生产环境 vtp mode transparent 或 off,VLAN 当本地配置来管。华为华三没有 VTP,各设备自己建 VLAN。

示例 · Access / Trunk / Native(三家对照)

! 示例:VLAN 10 接入,Gi0/24 做 trunk,native 99
vlan 10
 name USERS
vlan 99
 name NATIVE-UNUSED
interface GigabitEthernet0/1
 switchport mode access
 switchport access vlan 10
 switchport nonegotiate      ! 关 DTP,防被谈成 trunk
 spanning-tree portfast
 spanning-tree bpduguard enable
interface GigabitEthernet0/24
 switchport trunk encapsulation dot1q   ! 老平台才需要
 switchport mode trunk
 switchport trunk native vlan 99
 switchport trunk allowed vlan 10,20,99
 switchport nonegotiate
! 全局让 native 也打标签(防双 tag)
vlan dot1q tag native
vtp mode transparent

验证

  • Cisco show vlan brief / show interfaces trunk:看 VLAN 成员、native、allowed 列表是否两端一致。
  • 华为 display vlan / display port vlan;H3C display vlan / display port trunk。
  • 抓包看 EtherType 0x8100 与 VID;native 未强制打标签时,该 VLAN 的帧在 trunk 上是裸以太网。
设计权衡:VLAN 边界尽量停在接入或汇聚,不要让同一个 VLAN 横跨整园区——生成树直径、故障域、广播都会跟着膨胀。现代校园把三层下沉到接入后,VLAN 只活在一台接入交换机之内,trunk 只运少数管理 VLAN。
疑难:两端能 ping 管理地址,业务 VLAN 不通
现象 → 管理 VLAN(常是 native 或 VLAN 1)通,VLAN 10 主机跨交换机不通。

定位:先 show interfaces trunk(或华为 display port vlan)对两端 allowed 列表;再对同一条链路抓包,看 VLAN 10 的帧是否带 tag、对端是否按 10 收下。第三步查 MAC 表:源 MAC 是否学在正确 VLAN。

根因常见三种:① allowed 列表漏了 10;② native 不一致,10 在一侧被当成 untagged;③ 华为/H3C 默认 trunk 只放 VLAN 1,必须显式 allow-pass / permit。

2. 生成树 STP 家族

概念:在有环的二层拓扑里算一棵无环转发树:阻塞冗余口,保留一条到根的活动路径。

为什么需要:以太网帧没有 TTL。环路会让广播、组播、未知单播无限复制——广播风暴、MAC 表抖动、CPU 被 BPDU/广播打死。有环就必须有 STP,或者把二层直径收到单台交换机里(路由接入)。

家族与状态

成员标准状态收敛量级
STP802.1DDisabled / Blocking / Listening / Learning / Forwarding30–50 s(2×Forward Delay,必要时再加 Max Age)
RSTP802.1wDiscarding / Learning / Forwarding握手成功则亚秒到数秒
MSTP802.1s / 802.1Q同 RSTP,按实例同 RSTP;VLAN 映射到实例
PVST+ / RPVST+Cisco 私有每 VLAN 一棵 STP/RSTP每 VLAN 可不同根;BPDU 数量随 VLAN 线性涨

经典计时器(802.1D,根桥通告,全桥遵守):Hello 2 s、Forward Delay 15 s、Max Age 20 s。Listening 与 Learning 各吃一个 Forward Delay。RSTP 仍保留这些计时器作回退,正常点到点链路上用 proposal/agreement,不靠它们转发。

根桥与端口角色

根桥:最低 Bridge ID。BID = 优先级 + MAC。802.1t 扩展系统 ID 之后,优先级是 4 bit(0–15)× 4096,低 12 bit 是 VLAN/实例号,默认优先级 32768。先比 priority,再比 MAC。

端口角色:每台非根桥选一个 Root Port(到根代价最低;平局比发送者 BID、再比发送者端口 ID)。每个网段选一个 Designated Port。RSTP 另有 Alternate(到根的备份,Discarding)和 Backup(同一网段上自己另一端口已是指定)。边缘口(PortFast / edged-port)不参与拓扑,立即转发。

端口代价(802.1D-1998 短代价 / 802.1t 长代价):100M 为 19 / 200 000,1G 为 4 / 20 000,10G 为 2 / 2 000。混用长短代价会选出「看起来反直觉」的根端口。

机理:TCN / MAC 刷新,以及 RSTP 握手

802.1D TCN:非根桥检测到拓扑变化(口进入 Forwarding,或从 Learning/Forwarding 离开),沿根端口发 Topology Change Notification。上游用 TCA 确认。根桥在随后 Max Age + Forward Delay = 35 s 内把配置 BPDU 的 TC 位置位。收到 TC 的桥把 MAC 老化时间临时改成 Forward Delay(15 s),而不是默认 300 s——为的是尽快冲掉「已不在那条口后面」的地址。

RSTP:非边缘端口进入 Forwarding 或离开 Forwarding/转入 Discarding 等拓扑变化都触发 TC;edge 口不触发常规 TC。沿所有非边缘指定口发送带 TC 的 BPDU。IEEE 里 tcWhile ≈ HelloTime + 1 s;Cisco Rapid-PVST+ 常见实现是 2 × Hello(默认 4 s)。收到后立即刷新非边缘口的 MAC,不等 15 s。

Proposal / Agreement:指定口在点到点链路上发 proposal 位。下游若同意「这条口是新的根端口」,先 sync:把所有非边缘指定口阻塞,再回 agreement。上游指定口立刻转 Forwarding,跳过 30 s 的听/学。链上只要有一台不懂 RSTP,整段回退到计时器。

标准 RSTP BPDU 目的 MAC 是 01:80:c2:00:00:00。PVST+ 用 SNAP 封装发到 01:00:0c:cc:cc:cd,所以一棵 Cisco 树和一棵标准 RSTP 树默认不是同一种 BPDU。

示例 · 模式、根桥、边缘口与护栏

! 示例:Rapid-PVST+,VLAN 10 根在本机
spanning-tree mode rapid-pvst
spanning-tree vlan 10 priority 4096
! 或:spanning-tree vlan 10 root primary
spanning-tree extend system-id
interface range GigabitEthernet0/1-22
 spanning-tree portfast
 spanning-tree bpduguard enable
interface GigabitEthernet0/23
 spanning-tree guard root      ! 下游指定口;同口勿再开 Loop Guard
interface GigabitEthernet0/24
 spanning-tree guard loop      ! 上联(预期 Root/Alternate);按角色二选一
! UDLD 在光口上配合(Cisco 私有)
udld enable

验证

  • Cisco show spanning-tree / show spanning-tree vlan 10 root:本桥是否根、各口角色与状态、代价。
  • 华为 display stp brief / display stp;H3C display stp / display stp root。
  • 根桥必须是你指定的那两台汇聚/核心。接入层出现根,先查优先级和是否有人插了另一台交换机。
设计权衡:Rapid-PVST+ 每 VLAN 一棵树,根可以按 VLAN 左右分担,但 200 个 VLAN 就是 200 倍 BPDU。MSTP 把 VLAN 映射到少数实例,控制平面轻,代价是实例规划要全网一致(域名、修订号、映射表差一个字节就不在同一 region)。华为出厂 MSTP、Cisco 园区常 Rapid-PVST+——混厂商边界按 CST/CIST 互通,不要假设 PVST 的 per-VLAN 根在华为侧仍然成立。
疑难:单向光纤导致环路(UDLD / Loop Guard)
现象 → CPU 打满、MAC 表翻滚、同一单播帧在两口都看到;物理灯却是 up。

定位:看两端 STP 角色——若一条链路两边都是 Designated / Forwarding,就是没收到对方 BPDU。再看光模块 RX 光功率、CRC、以及 UDLD/DLDP 是否 err-disable。

根因:TX/RX 只通一半。下游收不到 BPDU,Max Age 后把自己从 Alternate 提升为 Designated,环路形成。Loop Guard 的修法是:曾经收 BPDU 的口一旦收不到,进入 loop-inconsistent 阻塞,而不是抢指定。UDLD aggressive / 华为 DLDP 从一层把单向口掐死,比等 STP 更干净。

疑难:接了电脑的口自己 err-disable

BPDU Guard 在边缘口看到任何 BPDU 就关口。常见是用户私接小交换机、或把该口做成了 trunk。先 show spanning-tree interface … detail 确认是否收到 BPDU,再决定是拆小交换机还是把这个口改成上联并关掉 PortFast。

3. EtherChannel / 链路聚合

概念:把 2–8 条(平台可到 16,常 8 活 8 备)同速同双工的物理口绑成一条逻辑口,STP 只看见这一条,流量按哈希分到成员口。

为什么需要:两条独立上联会被 STP 堵死一条。聚合既要冗余又要带宽,且故障切换是成员口级别,不必整树重算。

协议与模式

协议归属主动 / 被动对端要求
LACP802.3ad / 802.1AXCisco active/passive;华为 lacp-static;H3C dynamic至少一侧主动。目的 MAC 01:80:c2:00:00:02,慢协议 EtherType 0x8809
PAgPCisco 私有desirable / auto两端都是 Cisco。华为华三无 PAgP
静态 on无协商Cisco on;华为 manual;H3C static必须两端都 on。一侧 on、一侧 LACP → 起不来

二层聚合:逻辑口是 trunk/access,成员口参数必须一致(速率、双工、VLAN 允许列表、native、STP 代价)。三层聚合:Cisco no switchport 后给 Port-channel 配 IP;华为在 Eth-Trunk 上 undo portswitch 或直接在三层口上建聚合;H3C 先把 Bridge-Aggregation 改路由模式。

哈希是按流不是按包(绝大多数园区芯片):同一五元组永远走同一成员。极化(polarization)发生在多级都用相同哈希键时,下游把上游已经摊开的流又叠回少数链。对策:逐级换键(源 MAC → 源目的 IP → 五元组),或在叶脊用 ECMP 而不是二层聚合贯穿。

示例 · LACP 二层 Trunk

! 示例:先配逻辑口,再绑成员,避免半残 Po
interface Port-channel1
 switchport mode trunk
 switchport trunk native vlan 99
 switchport trunk allowed vlan 10,20,99
interface range GigabitEthernet0/23-24
 channel-group 1 mode active
 switchport mode trunk
 switchport trunk native vlan 99
 switchport trunk allowed vlan 10,20,99
! 成员与 Po 的 mode/allowed/native 一致;或 show etherchannel summary 验继承
port-channel load-balance src-dst-ip

验证

  • Cisco show etherchannel summary:要看 SU(L2 up)或 RU(L3 up)。SD / I / standalone 都是没谈拢。
  • 华为 display eth-trunk 1:成员 Selected / Unselected 及原因(speed、duplex、lacp)。
  • H3C display link-aggregation verbose Bridge-Aggregation 1。
设计权衡:LACP 能发现单向、错线和参数不一致,静态 on 不能——生产不要 on/on,除非对端是老存储或无 LACP 的防火墙。聚合带宽不是线性相加:大象流会被哈希钉在单条成员上,10G×4 对单条 25G 流没有意义。跨机箱用 vPC / CSS / IRF / 堆叠时,两边必须承认这是「同一台逻辑交换机」,否则 STP 仍会堵一条。
疑难:channel 起不来 / 一端 standalone
现象 → 物理口 up,逻辑口 down;或 Cisco 一侧成员变成 standalone,对端还在 bundle。

定位顺序:① 协议是否同族(active 对 active/passive,不要 on 对 active);② 速率双工 MTU;③ trunk 的 native / allowed / 模式;④ 一边配了 LACP 系统优先级把口置为 standby;⑤ 线序错接到两台不是堆叠/vPC 的交换机。

根因高频:Cisco mode on 对华为 mode lacp-static——静态对协商,永远 Selected 不了。改成两侧 LACP 主动。

4. 交换机安全基线

概念:接入口默认不可信。端口安全限制 MAC 数量;DHCP Snooping 只让可信口出 Offer/ACK,并建 IP–MAC–口绑定表;DAI 用这张表审 ARP;BPDU Guard 防止边缘口长出一棵新树。

为什么需要:ARP 没有认证(见站内 RFC 826)。谁先答「我是网关」,谁就吃流量。DHCP 也没有普遍认证,假服务器能发假网关。接入层不设防,汇聚上的 OSPF/FHRP 再稳也救不了本 VLAN 里的中间人。

端口安全

Cisco 违约动作:protect(静默丢)、restrict(丢 + 日志/SNMP)、shutdown(err-disable,默认)。sticky 把学到的 MAC 写进 running-config,保存后变「静态」。华为 port-security protect-action;H3C port-security intrusion-mode(blockmac / disableport)。笔记本 + IP 电话常要 2–3 个 MAC,设成 1 会把自己关门外。

示例 · 端口安全 + DHCP Snooping + DAI + ACL

! 示例:接入口基线。上联口务必 trust
interface GigabitEthernet0/1
 switchport mode access
 switchport access vlan 10
 switchport port-security
 switchport port-security maximum 3
 switchport port-security mac-address sticky
 switchport port-security violation restrict
 ip dhcp snooping limit rate 15
ip dhcp snooping
ip dhcp snooping vlan 10,20
ip dhcp snooping information option     ! Option 82;服务器不懂就关掉
interface GigabitEthernet0/24
 ip dhcp snooping trust
 ip arp inspection trust
ip arp inspection vlan 10,20
! 示例 ACL:挡住 VLAN 10 访问服务器网段的 22
ip access-list extended BLOCK-SSH
 deny tcp 10.10.10.0 0.0.0.255 10.10.20.0 0.0.0.255 eq 22
 permit ip any any
interface Vlan10
 ip access-group BLOCK-SSH in

验证

  • Cisco show port-security interface Gi0/1、show ip dhcp snooping binding、show ip arp inspection statistics。
  • 华为 display port-security interface、display dhcp snooping user-bind;H3C display dhcp snooping binding、display arp detection statistics。
  • 绑定表是空的却开了 DAI:合法 ARP 也会被丢——先让 DHCP 跑出表,静态主机再补 ARP ACL / 静态 user-bind。
设计权衡:Option 82 让服务器能按电路分配地址,但家用/Windows DHCP 常常不认,表现为「笔记本拿不到地址」。IP Source Guard 比 DAI 更狠(数据面按绑定转发),错一张表就造成「能 DHCP 不能上网」。这些功能只开在接入口;上联、DHCP 服务器口、中继口必须 trust,否则 Offer 回不来。

三层路由

routing plane

二层把广播域切开之后,跨 VLAN 必须走三层。选路先比最长前缀,再比管理距离 / 优先级,最后比度量。这三层顺序写反,排障会一直查错表。

5. 三层交换、SVI 与跨 VLAN 路由

概念:交换口(switchport)只做二层;路由口(routed port)有自己的 IP、不属任何 VLAN;SVI 是 VLAN 的三层接口——Cisco interface Vlan10,华为 Vlanif10,H3C Vlan-interface10。

为什么需要:两个 VLAN 的广播域不相通。要互访,得有人做网关:早期用路由器子接口(单臂路由 / ROAS),现在用汇聚/核心上的 SVI,或把接入口本身改成路由口。

单臂路由 ROASSVI(三层交换)路由接入
转发点路由器一条物理口 + 子接口交换机 ASIC 上的 VLAN 网关接入交换机就是一跳路由器
瓶颈那条臂的带宽 ×2(来回都走它)盒内线速,受 TCAM/上行限制STP/FHRP 从接入消失
适用实验、只有二层交换机的小网传统园区汇聚现代园区 / 数据中心叶

Cisco 三层交换机要先 ip routing,SVI 才会真正转发。华为/H3C 三层机默认就转。SVI up 的条件:该 VLAN 里至少有一个二层口 up(或有 trunk 允许该 VLAN)——空 VLAN 的 SVI 会协议 down,HSRP/OSPF 跟着没。

示例 · SVI 网关(左)与路由口(右思路相同)

! 示例:汇聚上的 SVI。单臂在路由器上用 Gi0/0.10
ip routing
interface Vlan10
 ip address 10.10.10.2 255.255.255.0
 no shutdown
interface Vlan20
 ip address 10.10.20.2 255.255.255.0
interface GigabitEthernet1/0/1
 no switchport
 ip address 10.0.0.1 255.255.255.252
! 单臂(路由器):
! interface Gi0/0.10
!  encapsulation dot1Q 10
!  ip address 10.10.10.1 255.255.255.0
设计权衡:单臂把所有跨 VLAN 流量挤过一条链路,还把路由器变成 STP 拓扑的一部分(子接口侧)。SVI 把网关放进交换机 ASIC,但 VLAN 仍然跨盒时,FHRP + STP 根必须对齐(见 §8)。路由接入把 L3 边界下沉,换来的是每台接入都要跑 IGP、地址规划更碎、故障域更小。

6. 静态路由、默认路由、浮动静态

概念:管理员写下「去某前缀,下一跳 / 出接口」。默认路由是前缀 0.0.0.0/0。浮动静态把同一前缀再写一条、故意给更差的管理距离,主路消失才装进 RIB。

为什么需要:末梢、 stub、拨号备份、以及「IGP 死了也要有一条逃生默认」。动态协议覆盖不了的特例也用静态钉死。

转发顺序 · 先前缀后距离

查表永远是最长前缀匹配,不是「OSPF 一定赢 RIP」。 10.1.1.0/24 的 OSPF(AD 110)打不赢 10.1.1.0/26 的 RIP(AD 120)。只有前缀长度相同才比管理距离;AD 再相同才比度量。华为/H3C 把 AD 叫做 preference,默认值与 Cisco 不同。

来源Cisco AD华为 / H3C preference
直连00
静态160
eBGP20255
EIGRP 内部90—(非原生)
OSPF 内部11010
IS-IS11515 / 18(L1/L2)
RIP120100
EIGRP 外部170—
iBGP200255
不可达 / 未知255不装表

读这张表时记住:Cisco 上 eBGP(20)完胜 OSPF(110);华为上 OSPF(10)完胜静态(60),eBGP 与 iBGP 默认都是 255,要靠策略而不是距离压过 IGP。浮动静态在 Cisco 常写成 AD 200+;在华为要写成 preference 80 这类比主路差、比「没有」好的值——主路若是 OSPF(10),浮动静态用 80 即可,写成 200 也行。

示例 · 默认 + 浮动备份

! 示例:主默认走 192.0.2.1;备份 AD 200
ip route 0.0.0.0 0.0.0.0 192.0.2.1
ip route 0.0.0.0 0.0.0.0 198.51.100.1 200
ip route 10.2.0.0 255.255.255.0 10.1.1.2
! 出接口型静态在以太网上下一跳务必写 IP,
! 只写出接口会把下一跳当直连去 ARP

验证

  • Cisco show ip route / show ip route 8.8.8.8:看前缀长度、AD/度量、候选条。
  • 华为/H3C display ip routing-table / display ip routing-table 8.8.8.8。
  • 浮动条在主路活着时不应出现在 RIB(只在配置里)。主下一跳变不可达后才应装入。

7. 动态路由:RIP / EIGRP / OSPF / BGP

概念:IGP 在一个 AS 内算可达,EGP(今天只剩 BGP)在 AS 之间谈策略。选哪一个看直径、收敛、策略需求和多厂商程度,不是看「谁更新」。

RIPEIGRPOSPFBGP
角色IGP 距离向量IGP DUAL(扩散更新)IGP 链路状态EGP 路径向量
封装UDP 520IP 88 · 224.0.0.10IP 89 · 224.0.0.5/6TCP 179
度量跳数 ≤15复合(默认带宽+时延)×256cost = 参考带宽/口带宽属性序列,不是最短路
Cisco AD12090 / 外部 170110eBGP 20 / iBGP 200
场景实验室、老末梢Cisco 园区,要快速备路多厂商企业主流 IGP数据中心叶脊、Internet、大规模策略

OSPF:邻接、LSA、区域

状态机:Down → Init → 2-Way → ExStart → Exchange → Loading → Full。Hello 里看见自己的 Router-ID 进入 2-Way;DR/BDR 在 2-Way 选举。之后只有与 DR/BDR(或 P2P 对端)形成 Full,DROTHER 彼此停在 2-Way 是正常的。

Hello/Dead 默认:广播与 P2P 为 10 / 40 s;NBMA 与 P2MP 为 30 / 120 s。必须一致的参数:Hello、Dead、区域号、区域类型(stub 标志)、认证、网段掩码(某些类型)、单播/组播能力。MTU 不一致通常卡在 EXSTART / EXCHANGE——DBD 里的 Interface MTU 对不上,对端直接丢。

DR/BDR:接口优先级高者胜,同则 Router-ID 大者胜;不抢占。优先级 0 永不参选。以太网默认广播类型会选 DR;点到点串口/P2P 以太网不选,邻接是 Full 且没有 Type 2 LSA。

LSA名字谁发泛洪范围
1Router每台路由器本区域。SPF 的边
2NetworkDR本区域。描述谁挂在这段广播网上
3Network SummaryABR邻接区域。区域间前缀,不是拓扑
4ASBR SummaryABR告诉外区域怎么走到 ASBR
5AS ExternalASBR除 stub/NSSA 外全 AS。E1 累加内部 cost,E2(默认)只用外部 cost
7NSSA ExternalNSSA 内 ASBR本 NSSA;ABR 按 P 位译成 Type 5 再送出
9/10/11Opaque扩展用链路 / 区域 / AS。Grace-LSA(GR,RFC 3623)是 Type 9

LSRefresh 1800 s,MaxAge 3600 s。区域内 SPF 只吃 Type 1/2;Type 3/4/5/7 当叶子挂到树上,不参与 Dijkstra 拓扑。

区域类型(Cisco 名,华为/H3C 用 stub / stub no-summary / nssa / nssa no-summary):

  • 骨干 Area 0:所有区域必须连它。分区或间接相连用虚链路(unicast,穿越非 stub 区域,对端写对方 RID)。
  • Stub:无 Type 5(也就不再需要 Type 4)。ABR 自动注入 Type 3 默认。
  • Totally stubby(Cisco no-summary):再去掉普通 Type 3,只留一条默认。末梢区域首选。
  • NSSA:允许本区域 ASBR 用 Type 7 注入外部,但不接受外来 Type 5。不会自动给默认,要 default-information-originate。
  • Totally NSSA(nssa no-summary):NSSA + 去掉 Type 3;Cisco 这时会自动注入默认。

这是笔试陷阱:area 1 nssa 与 area 1 stub 对「默认路由从哪来」的行为不一样。

参考带宽默认 100 Mbps,于是 ≥100M 的口 cost 都是 1,千兆和万兆分不出来。园区应把 auto-cost reference-bandwidth 改到 10000(10 Gbps)或 100000,全域一致。

示例 · OSPF 单进程,Area 0 + 末梢 totally stub

! 示例:接口方式更不容易把网段写错
router ospf 1
 router-id 1.1.1.1
 auto-cost reference-bandwidth 10000
 area 1 stub no-summary
 passive-interface default
 no passive-interface GigabitEthernet1/0/1
interface GigabitEthernet1/0/1
 ip ospf 1 area 0
 ip ospf network point-to-point
 ip ospf bfd
interface Vlan10
 ip ospf 1 area 1
! 虚链路(仅当 Area 2 不直连 Area 0)
! area 2 virtual-link 2.2.2.2

EIGRP:DUAL、FD / RD

RFC 7868 信息性 把报文和 DUAL 公开了,实现生态仍几乎是 Cisco。Hello 高速口 5 s / Hold 15 s,T1 及更慢 60 / 180 s。复合度量默认 K1=1, K2=0, K3=1, K4=0, K5=0,即 256×(最小带宽项 + 时延累加项)。K 值不一致不能建邻。

FD(Feasible Distance)是本机经当前 successor 到目的地的总度量;RD / AD(Reported / Advertised Distance)是邻居通告的距离。可行条件:RD < 当前 successor 的 FD。满足的邻居叫可行后继(FS),可以无查询切换。没有 FS 就进 Active,向邻居发 Query;3 分钟(历史默认 Active 计时器)收不齐回复会 SIA(Stuck-in-Active),邻接被拆。

查询风暴是 EIGRP 在没有汇总边界时的老伤:叶子丢一条前缀,Query 能灌满整域。汇总边界(接口 ip summary-address eigrp)把查询挡住,这是划「区域」的替代品。

BGP:11 步决策、iBGP 与属性

会话先建 TCP 179,再 OPEN 交换 ASN、Hold、Router-ID、能力。Keepalive 默认是 Hold 的 1/3:Cisco Hold 180 s、Keepalive 60 s(RFC 建议 Hold 90 s)。报文:OPEN / UPDATE / NOTIFICATION / KEEPALIVE,加上 RFC 2918 的 Route-Refresh。

iBGP 水平分割:从 iBGP 学来的路不再送给其他 iBGP。于是要全互联(n(n−1)/2)、路由反射器(Originator-ID + Cluster-List 防环)或联盟(子 AS,AS_CONFED_SEQUENCE;子 AS 之间看起来像 eBGP,但 LOCAL_PREF 等内部属性保留)。

eBGP 默认 TTL=1;多跳要 ebgp-multihop 或更干净的 GTSM / TTL security(RFC 5082):neighbor x ttl-security hops 1 要求入包 TTL 为 255。下一跳:eBGP 改成自己,iBGP 默认不改——边缘必须 next-hop-self,否则内核下一跳是对方 AS 的地址,IGP 够不着。

Cisco IOS 最佳路径(教材称 11 步;文档现插入 multipath 与 cluster-list,共 13):

  1. 最高 Weight(Cisco 私有,仅本机;本地起源默认 32768,学来默认 0)
  2. 最高 LOCAL_PREF(默认 100,AS 内传)
  3. 本机起源(network / aggregate / 重分发,NEXT_HOP=0.0.0.0)优于邻居学来
  4. 最短 AS_PATH(联盟子 AS 默认不计入长度)
  5. 最低 Origin:IGP i < EGP e < Incomplete ?
  6. 最低 MED(默认只在同一邻接 AS 之间比;缺省当 0,即更好。 missing-as-worst 反过来)
  7. eBGP 优于 iBGP(联盟 eBGP 算 eBGP)
  8. 到 NEXT_HOP 的 IGP 度量最低
  9. 若配了 maximum-paths,可装多条,不必决出单胜
  10. 两条都是 eBGP 时选更老的(减抖动)
  11. 最低 BGP Router-ID
  12. 最短 Cluster-List(RR 场景)
  13. 最低邻居地址

Community 是策略标签,不是度量。well-known 常见:internet、no-export、no-advertise、no-export-subconfed;部分实现还有 no-peer(以设备版本为准)。选路请显式用 LOCAL_PREF / Weight,不要幻想 Community 自己会比大小。

BFD、GR、NSR

Hello 40 s 对核心太慢。BFD(RFC 5880)独立探测,常见 50 ms × 乘数 3 = 150 ms 检测,再把 OSPF/BGP/静态「绑」上去。GR(OSPF RFC 3623,BGP RFC 4724)让邻居当 helper,转发平面继续,控制平面重启后重同步;NSR 把状态检查点做到备控,邻居无感,只有中高端有。GR 期间若转发平面其实已经不转,helper 仍以为没事——这是 GR 的设计代价。

设计权衡:多厂商园区用 OSPF,不要在边界上幻想 EIGRP。EIGRP 的 FS 切换快,但没有区域只有汇总;OSPF 有区域和 LSA 类型,换来的是 ABR 设计和虚链路这类坑。Internet 边缘必须 BGP,IGP 只用来到达 NEXT_HOP。汇总放在区域/域边界:汇总错位要么黑洞(缺 discard / Null0),要么 Query/LSA 漏出去。
疑难:OSPF 邻居卡在 EXSTART
现象 → show ip ospf neighbor 长期 EXSTART 或 EXCHANGE,对端一样。

定位:先对同一链路看 MTU(Cisco show interface 的 MTU 与 IP MTU;华为 display interface)。再抓 OSPF DBD:Interface MTU 字段是否一致。排除之后才查单播 ACL 是否挡住了非 Hello 的 OSPF(Hello 走组播 224.0.0.5,DBD/LSR/LSU 在某些类型走单播)。

根因:一侧 1500、一侧 9000,或隧道/子接口 MTU 没对齐。临时 Cisco ip ospf mtu-ignore;华为部分平台默认不检查,ospf mtu-enable 才打开——以版本为准。治本是改 MTU,不是 ignore。

疑难:非对称路由打穿状态防火墙
现象 → 去程通、回程「偶发」断;或只通 ping 不通 TCP。防火墙日志是 out-of-state / 无会话。

定位:在两端主机和两台网关同时看 show ip cef / display fib 与连接的入/出接口。HSRP 活在 A、STP 根在 B 时,接入把帧送给 B,B 再送到 A 的 VIP——已经绕路;若防火墙只挂在 A 的上行,回程从 B 出去就没会话。

根因:ECMP、FHRP 与 STP 不对齐、或两条默认路由不对称。修法是让同一 VLAN 的「STP 根 = FHRP 活 = 防火墙主」,或改防火墙为非对称/集群共享会话,而不是再加一条静态「修一处坏一处」。

8. 网关冗余 FHRP

概念:两台三层设备共享一个虚拟 IP(主机的默认网关)和一组虚拟 MAC。主机只 ARP 到 VIP,不必知道后面谁在转。

为什么需要:传统接入是 L2,网关在汇聚。汇聚死一台不能让整层 VLAN 断网。路由接入下沉之后,FHRP 从接入消失,改由 IGP 收敛。

HSRPVRRPGLBP
归属Cisco 私有(RFC 2281 信息性)RFC 3768 / 5798(v3)Cisco 私有
谁实现仅 Cisco(及少数兼容)三家都有;华为华三只走这条仅 Cisco
封装UDP 1985IP 协议 112(不是 UDP)UDP 3222
组播v1 224.0.0.2;v2 224.0.0.102224.0.0.18224.0.0.102
虚拟 MACv1 0000.0c07.acXX;v2 0000.0c9f.fXXX0000.5e00.01XX(XX=VRID)0007.b400.XXYY
Hello / 死亡3 s / 10 s通告 1 s;Master Down ≈ 3×间隔+偏斜3 s / 10 s
默认优先级100;抢占关100(地址拥有者 255);抢占开100;AVG 抢占默认可配
负载分担多组 VIP,按 VLAN/子网拆同左一个 VIP,AVG 用不同 AVF MAC 答 ARP

选举:优先级高者活;HSRP 同优先级比接口 IP 大者。HSRP 默认不抢占,主修好了不会自动回来——要显式 preempt,并加 delay 等 STP 转发完成。VRRP 默认抢占,主一恢复就夺权,更容易和 STP 打架。

跟踪上行:Cisco standby track / vrrp … track 减优先级;华为 vrrp vrid 1 track interface … reduced 30。减幅必须大于主备优先级差,否则上行断了仍不切换。

示例 · 同一 VIP,Cisco 用 HSRP,华为/H3C 用 VRRP

! 示例:本机做 VLAN 10 活网关,且应同时是 STP 根
interface Vlan10
 ip address 10.10.10.2 255.255.255.0
 standby version 2
 standby 10 ip 10.10.10.1
 standby 10 priority 110
 standby 10 preempt delay minimum 30
 standby 10 timers 1 3
 standby 10 authentication md5 key-string CAMPUS
 standby 10 track 1 decrement 20
! 同盒子上的 VRRP(IOS 有的平台):vrrp 10 ip 10.10.10.1

验证

  • Cisco show standby brief / show vrrp brief:Active/Standby、VIP、抢占、跟踪是否已经减分。
  • 华为/H3C display vrrp:Master/Backup、优先级、虚拟 MAC 是否为 0000-5e00-01XX。
  • 主机 ARP 到的网关 MAC 必须是虚拟 MAC,不是某台上的物理 MAC。若看到物理 MAC,VIP 没在工作,主机静态写错或代理 ARP 在捣乱。
设计权衡 · 对齐:活网关必须是该 VLAN 的 STP 根。否则接入把帧送到根(B),B 再二层送到活网关(A),多一跳还可能绕防火墙。做法:同一台盒子上「STP priority 4096 + FHRP priority 110 + uplink track」。双活用 GLBP 或每 VLAN 左右分担(奇数 VLAN 根在 A,偶数在 B),不要指望单组 HSRP 自己摊流量。混厂商汇聚不要上 HSRP,统一 VRRP。

组网设计

campus & fabric

9. 分层模型:接入 / 汇聚 / 核心

概念:经典园区三层把「接终端、做策略与网关、高速转发」拆开。Collapsed Core 把汇聚和核心合成一层。Spine-Leaf 是数据中心的 CLOS:每个叶连所有脊,L3 + ECMP,原则上没有 STP。

Access

接入

PortFast / 边缘口、BPDU Guard、端口安全、DHCP Snooping。传统是纯 L2;现代可路由接入。

Distribution

汇聚

SVI、FHRP、ACL、路由汇总、STP 根。东西向策略和故障域边界放这里。

Core

核心

只转发。OSPF Area 0 或 iBGP。不接终端、不做防火墙、不下 NAT。

Fabric

Spine-Leaf

每个 leaf 到每个 spine 等权。二层若还要跨叶,用 VXLAN/EVPN 叠,而不是把 VLAN 拉到脊。

何时选谁:楼宇少于两台汇聚、没有独立核心角色 → Collapsed Core,少两台盒子,代价是核心故障域和汇聚策略绑在一起。主机东西向流量大、要 ECMP → Spine-Leaf,代价是布线从「几条上联」变成「叶×脊」全互联,运维模型也从 VLAN 变成 underlay/overlay。不要在脊叶里再跑一份生成树当保险,那是在否定这个拓扑。

贯穿场景:一栋楼的园区汇聚

把本页技术按一次设计决策串起来。拓扑是常见的「双汇聚 + 一排接入」,不是数据中心。

          Area 0 / 核心
           C1 ========== C2
            |            |
         Po1|            |Po2     ← LACP,三层口,OSPF P2P
            |            |
           D1 ========== D2       ← 汇聚。SVI + VRRP/HSRP
          /  \          /  \
        acc   acc     acc   acc   ← 双上联 LACP 到 IRF/vPC
                                      或两条独立上联交给 STP
  1. VLAN 不下沉到核心。VLAN 10/20 只活在 D1–D2 与接入之间。核心只看见 10.10.0.0/16 的汇总。
  2. STP 根 = FHRP 活 = 防火墙主 都钉在 D1。D2 作备,priority 差 20,track 上行减 30。边缘口全开 BPDU Guard。
  3. 双上联怎么收。接入若堆叠/IRF/vPC,对汇聚打一条跨机箱 LACP,STP 无事可做。接入是独立盒子,就不要硬做跨设备聚合——让 STP 堵一条,或改路由接入。
  4. IGP:D–C 是 OSPF Area 0、P2P、BFD 50×3。接入 VLAN 放 Area 1 totally stub,ABR(D1/D2)汇总 10.10.0.0/16 进 Area 0,并在 Null0 留一条丢弃防黑洞。
  5. 不要 EIGRP,除非盒子全是 Cisco 且你需要 FS 无查询切换。混了华为汇聚就 OSPF。
  6. 安全:接入口 snooping + DAI + port-security 3 MAC;上联 trust。管理 VLAN 单独,且不是 native。
  7. 出口:两台核心 eBGP 到两家运营商,LOCAL_PREF 选主,MED 影响入向。IGP 只保证 NEXT_HOP 可达。TTL security hops 1。

若把这栋楼改成路由接入:接入跑 OSPF,每个下行网段 /28 或 /24 在接入盒子上起源,FHRP 和 STP 从用户 VLAN 消失,双上联变 ECMP。代价是地址与 IGP 规模上升,换来的是故障域等于「一台接入」。

10. 排障命令速查

what each show actually shows

每条只回答「看什么」。华为华三是 display,不是 show。

看什么Cisco华为 VRPH3C
RIB:前缀、AD/优先级、下一跳show ip routedisplay ip routing-tabledisplay ip routing-table
OSPF 邻接状态、DR、死亡时间show ip ospf neighbordisplay ospf peerdisplay ospf peer
LSDB / LSA 类型是否该出现show ip ospf databasedisplay ospf lsdbdisplay ospf lsdb
BGP 会话、前缀计数show ip bgp summarydisplay bgp peerdisplay bgp peer
生成树根、角色、状态show spanning-treedisplay stp briefdisplay stp
聚合是否 Selected / SUshow etherchannel summarydisplay eth-trunkdisplay link-aggregation summary
MAC 学在哪个 VLAN、哪口show mac address-tabledisplay mac-addressdisplay mac-address
邻居拓扑(私有 / 标准)show cdp neighborsdisplay lldp neighbordisplay lldp neighbor-information
Trunk native 与允许列表show interfaces trunkdisplay port vlandisplay port trunk
FHRP 活备、VIP、跟踪show standby briefdisplay vrrpdisplay vrrp
DHCP 绑定(DAI 的粮草)show ip dhcp snooping bindingdisplay dhcp snooping user-binddisplay dhcp snooping binding
当前生效配置show running-configdisplay current-configurationdisplay current-configuration
接口计数器增量show interfacesdisplay interfacedisplay interface
纪律

计数器看增量,连敲两次取差。邻居「Full / Established / Forwarding」只说明控制平面,不说明数据面——还要看 CEF/FIB、ACL、uRPF、防火墙会话。主机侧决策树见 排障决策树。

专家级易错点 / 设计陷阱

  1. STP 根选举是 BID,不是「先插电的赢」。BID = 优先级(4096 的倍数)+ 扩展系统 ID + MAC。默认 32768。接入层冒出根,先查谁把 priority 调低了,或谁没开 Root Guard。
  2. RSTP 边缘口(PortFast)立即转发,且不因自己 up 而产生 TC。边缘口收到 BPDU 就不再是边缘——配合 BPDU Guard 应直接 err-disable。BPDU Filter 会把口变成「不说也不听」的黑洞,环路时比不开 STP 更糟。
  3. Native VLAN 双标签是真实攻击路径,不是考题虚构。native 必须是空 VLAN、两端一致,并尽可能强制打标签。VLAN 1 既做管理又做 native 是默认配置里最常见的债。
  4. Cisco AD:直连 0、静态 1、eBGP 20、EIGRP 90、OSPF 110、RIP 120、外部 EIGRP 170、iBGP 200。华为静态默认 60、OSPF 10、BGP 255——把 Cisco 的 20「eBGP 压过 IGP」搬到华为会错。
  5. 最长前缀先于 AD。/26 的 RIP 赢 /24 的 OSPF。排障先看掩码,再看协议。
  6. OSPF 度量是带宽反比,EIGRP 默认是最小带宽 + 累加时延。参考带宽仍是 100 Mbps 时,千兆与万兆 cost 都是 1,OSPF 选路退化成跳数。EIGRP 的 K 值不一致直接不能建邻。
  7. Stub 自动给默认;NSSA 不自动给。area 1 nssa 之后区域里没有默认,要再配 originate。nssa no-summary 与 stub no-summary 才是「只留默认」的 totally 形态。
  8. HSRP 默认不抢占、Hello 3/10、UDP 1985;VRRP 默认抢占、通告 1 s、IP 协议 112、RFC 5798。虚拟 MAC 前缀不同,抓包一眼能分。华为没有 HSRP。
  9. FHRP 活与 STP 根不在同一台 = 永久次优 + 防火墙非对称。这比「没配 preempt」更能解释「通但不快 / TCP 怪断」。
  10. 单臂路由把所有跨 VLAN 流量加倍挤过一条口;SVI 在 ASIC 上转,但仍要 FHRP。真正去掉 STP/FHRP 的是路由接入,不是「换了三层交换机」。
  11. OSPF EXSTART 先查 MTU,再查单播 ACL。Hello 组播通、DBD 单播被丢,也会停在这里。DROTHER 之间停在 2-Way 是正常,不是故障。
  12. LACP active 对 on 起不来。PAgP 只有 Cisco。聚合哈希不均不是坏了,是大象流的数学;换键或把大象流拆开,不要再叠一条同构哈希。
  13. BGP Weight 是 Cisco 私有且不出本机;LOCAL_PREF 出 AS 内;MED 默认只比同一邻居 AS。iBGP 不改 NEXT_HOP。决策顺序是 Weight → LP → 本地起源 → AS_PATH → Origin → MED → eBGP>iBGP → IGP 到 NH,不是「AS_PATH 最短优先」。
  14. VTP 修订号是清 VLAN 的按钮。新交换机默认 server + revision 高就能毁网。透明模式或不用 VTP。接入口显式 switchport mode access;可再 switchport nonegotiate 停止 DTP;不要只依赖动态协商。