1. 课程导论:Linux Bridge 在虚拟化与容器网络中的核心地位

1.1 为什么需要 Linux Bridge?

在物理网络中,交换机(Switch)工作在 OSI 模型的第二层(数据链路层),负责根据 MAC 地址表转发以太网帧,并支持 VLAN 隔离和生成树协议(STP)防止环路。Linux Bridge 是内核中实现的纯软件二层交换机,它将物理网卡、虚拟网卡(veth/tap)等接口“桥接”到同一个广播域中,使连接在桥上的设备仿佛插在同一台物理交换机上。

核心定位: Linux Bridge 是虚拟化(KVM/QEMU)和容器(Docker/Kubernetes)网络虚拟化的基石。没有它,虚拟机无法获得独立的 MAC/IP 地址,容器也无法实现跨主机通信。

1.2 应用场景全景

场景典型组件Bridge 角色
KVM 虚拟化libvirt + tap 设备将多个 VM 的 tap 接口桥接到物理网卡,实现 VM ↔ 主机 ↔ 外网通信
Docker 默认网络docker0 网桥容器通过 veth pair 接入 docker0,实现同主机容器互访
Kubernetes Pod 网络CNI 插件(Flannel/Calico)部分方案依赖 Linux Bridge 作为 Pod 的接入二层设备
NFV/边缘计算OVS + Linux Bridge 混合Linux Bridge 提供轻量级二层转发,配合 OVS 实现流表控制
网络实验/教学netns + veth + bridge在单机模拟复杂二层拓扑,验证 STP/VLAN 行为

1.3 Linux Bridge 与物理交换机的对比

特性物理交换机Linux Bridge
转发依据ASIC 硬件查 MAC 表内核软件查 FDB(转发数据库)
环路防护STP/RSTP/MSTP(硬件加速)内核 STP 实现(基于 IEEE 802.1D)
VLAN 支持802.1Q 硬件标记/剥离内核 VLAN 子接口 + bridge vlan_filtering
转发性能线速(ns 级延迟)受 CPU 频率和内核网络栈开销影响(μs 级)
可编程性CLI / SNMP / NETCONFiproute2 / sysfs / netlink / eBPF
成本硬件成本高纯软件,零额外硬件成本
性能提示: 在纯二层转发场景(同一广播域内),Linux Bridge 的 PPS(包每秒)可达百万级别。若开启 VLAN 过滤、STP 或 eBPF 附加程序,会引入额外 CPU 开销,需根据业务场景权衡。

1.4 内核二层转发路径概览

理解 Linux Bridge 必须掌握其在内核网络栈中的位置。下图展示了一个数据包从物理网卡进入,经过 Bridge 处理,最终到达虚拟机或容器的完整路径:

Linux Bridge 内核二层转发路径 物理网卡 eth0 Linux Bridge br0 FDB 表 MAC ↔ Port 映射 STP 协议 环路检测/阻塞 虚拟接口 tap0 (VM1) veth1 (容器1) veth2 (容器2) 关键路径说明: 1. 物理网卡 eth0 收到数据帧 → 递交给 br0 处理 2. br0 查询 FDB 表:若目的 MAC 已知,转发到对应端口;未知则泛洪 3. STP 模块持续监控拓扑,发现环路时阻塞冗余端口

1.5 课程目标与学习路径

本课程旨在帮助学员从源码和内核机制层面彻底掌握 Linux Bridge,具备独立排查二层网络问题、优化转发性能以及定制桥接行为的能力。

课程目标

  • 原理层: 深入理解 Linux Bridge 的 FDB 学习/老化、MAC 转发/泛洪、STP 状态机、VLAN 过滤等核心机制。
  • 实践层: 熟练使用 iproute2、bridge、brctl、tcpdump、bpftrace 等工具进行桥接网络排障与性能分析。
  • 源码层: 读懂 net/bridge/ 目录下的关键代码(br_input.c、br_forward.c、br_stp.c、br_fdb.c),理解内核桥接子系统的设计思想。
  • 进阶层: 掌握 eBPF 在 Bridge 上的附加点(TC/XDP),以及如何通过 netlink 事件监控桥接拓扑变化。

学习路径(30 章规划)

阶段章节范围核心内容
基础篇第 1–5 章Bridge 概念、创建/管理、FDB 表、VLAN 基础、STP 入门
进阶篇第 6–15 章STP 状态机详解、VLAN 过滤实现、多桥互连、netlink 监控、性能基准测试
源码篇第 16–25 章br_input/br_forward/br_stp/br_fdb 源码逐行分析、内核网络栈交互、锁与并发
实战篇第 26–30 章eBPF 附加 Bridge、容器网络排障案例、大规模集群桥接优化、自定义桥接模块开发
前置要求: 建议学员具备 C 语言基础、Linux 基本网络命令使用经验(ip/ifconfig/tcpdump),以及 OSI 二层/三层基本概念。每章均提供可复现的实验环境(基于 Vagrant + Ubuntu 22.04 内核 5.15+)。

1.6 本章小结