HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 网络架构师学习手册

    • 网络架构师学习教程
    • 基础篇

      • 第1章 网络模型与数据流转
      • 第2章 以太网与二层通信
      • 第3章 IP路由与三层转发
      • 第4章 TCP与可靠传输
      • 第5章 应用层协议
    • Linux网络栈

      • 第6章 数据包接收路径
      • 第7章 多核网络优化
      • 第8章 Netfilter与防火墙
      • 第9章 流量控制与QoS
    • 虚拟网络

      • 第10章 Network Namespace基础
      • 第11章 Bridge与互联
      • 第12章 VXLAN与Overlay网络
      • 第13章 OVS与SDN
    • Kubernetes网络

      • 第14章 CNI模型与实现
      • 第15章 kube-proxy与Service实现
      • 第16章 CoreDNS与服务发现
      • 第17章 NetworkPolicy与安全隔离
      • 第18章 Calico网络深度解析
      • 第19章 Cilium与eBPF网络
    • 网络架构

      • 第20章 网络设备与拓扑设计
      • 第21章 网络容量规划与计算
      • 第22章 负载均衡架构设计
      • 第23章 高可用网络架构
      • 第24章 网络安全架构
    • 性能调优

      • 第25章 系统级网络调优
      • 第26章 故障排查方法论
      • 第27章 生产环境案例分析
    • 前沿技术

      • 第28章 eBPF深度实践
      • 第29章 ServiceMesh与边车代理
      • 第30章 网络技术趋势与未来展望
    • 附录

      • 附录A:命令速查手册
      • 附录B:排错决策树
      • 附录C:学习资源
      • 附录D:技能图谱

第11章 Bridge与互联

学习目标

  • 理解Linux Bridge的工作原理
  • 掌握FDB(Forwarding Database)学习机制
  • 了解容器间通信的实现
  • 能够配置和排查Bridge网络问题

🔬 原理

Linux Bridge

Bridge特点:

  • 类似二层交换机
  • 学习MAC地址
  • 基于MAC转发
  • 支持VLAN

Bridge结构:

    Bridge (br0)
    /     |     \
veth1   veth2   veth3
  |       |       |
ns1     ns2     ns3

FDB学习机制

FDB表:

  • 记录MAC地址与端口的映射
  • 基于源MAC学习
  • 基于目标MAC转发

学习过程:

  1. 收到包时学习源MAC
  2. 查找目标MAC
  3. 如果找到,直接转发
  4. 如果未找到,泛洪

️ 实现

Bridge实现

struct net_bridge {
    struct list_head port_list;    // 端口列表
    struct hlist_head hash[BR_HASH_SIZE]; // FDB哈希表
    struct net_device *dev;        // Bridge设备
    struct work_struct gc_work;    // 垃圾回收
    // ... 更多字段
};

struct net_bridge_port {
    struct net_bridge *br;         // 所属Bridge
    struct net_device *dev;        // 端口设备
    struct hlist_head hash[BR_HASH_SIZE]; // 端口FDB
    // ... 更多字段
};

FDB实现

struct net_bridge_fdb_entry {
    struct hlist_node hlist;       // 哈希链表
    struct net_bridge_port *dst;   // 目标端口
    unsigned long updated;         // 更新时间
    unsigned long used;            // 使用时间
    u8 addr[ETH_ALEN];            // MAC地址
    u8 is_local;                  // 本地地址
    u8 is_static;                 // 静态条目
    // ... 更多字段
};

🛠️ 命令

Bridge管理

# 创建Bridge
sudo ip link add br0 type bridge

# 启动Bridge
sudo ip link set br0 up

# 添加端口到Bridge
sudo ip link set veth1 master br0

# 查看Bridge状态
bridge link show

# 查看FDB
bridge fdb show br br0

网络配置

# 配置Bridge IP
sudo ip addr add 192.168.1.1/24 dev br0

# 配置端口IP
sudo ip addr add 192.168.1.2/24 dev veth1

# 配置路由
sudo ip route add 192.168.1.0/24 dev br0

代码

Bridge监控程序

// bridge_monitor.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/if_bridge.h>

int main() {
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) {
        perror("socket");
        return 1;
    }
    
    // 获取Bridge信息
    struct ifreq ifr;
    strcpy(ifr.ifr_name, "br0");
    
    if (ioctl(sock, SIOCGIFBR, &ifr) < 0) {
        perror("ioctl");
        close(sock);
        return 1;
    }
    
    printf("Bridge: %s\n", ifr.ifr_name);
    printf("Ports: %d\n", ifr.ifr_data);
    
    close(sock);
    return 0;
}

编译运行:

gcc bridge_monitor.c -o bridge_monitor
sudo ./bridge_monitor

🧪 实验

实验1:Bridge基础配置

目标:创建和配置Bridge

步骤:

# 1. 创建Bridge
sudo ip link add br0 type bridge
sudo ip link set br0 up

# 2. 创建veth pair
sudo ip link add veth1 type veth peer name veth1-br
sudo ip link add veth2 type veth peer name veth2-br

# 3. 连接veth到Bridge
sudo ip link set veth1-br master br0
sudo ip link set veth2-br master br0
sudo ip link set veth1-br up
sudo ip link set veth2-br up

# 4. 配置IP地址
sudo ip addr add 192.168.1.1/24 dev br0
sudo ip addr add 192.168.1.2/24 dev veth1
sudo ip addr add 192.168.1.3/24 dev veth2

# 5. 启动接口
sudo ip link set veth1 up
sudo ip link set veth2 up

# 6. 测试连通性
ping -c 3 192.168.1.3

预期结果:

  • 理解Bridge工作原理
  • 掌握Bridge配置
  • 验证容器间通信

实验2:FDB学习观察

目标:观察FDB学习过程

步骤:

# 1. 查看初始FDB
bridge fdb show br br0

# 2. 发送数据包
ping -c 1 192.168.1.3

# 3. 查看学习后的FDB
bridge fdb show br br0

# 4. 观察MAC地址学习
tcpdump -i br0 -n

预期结果:

  • 理解FDB学习机制
  • 观察MAC地址学习
  • 掌握Bridge转发

排错

常见问题排查

问题1:Bridge无法创建

# 检查内核支持
modprobe bridge

# 检查权限
sudo ip link add br0 type bridge

# 检查名称冲突
ip link show

问题2:端口无法加入Bridge

# 检查端口状态
ip link show veth1

# 检查Bridge状态
bridge link show

# 重新添加端口
sudo ip link set veth1 master br0

问题3:容器间无法通信

# 检查FDB
bridge fdb show br br0

# 检查IP配置
ip addr show

# 检查路由
ip route show

排错清单

  • [ ] 检查Bridge状态(bridge link show)
  • [ ] 验证FDB学习(bridge fdb show)
  • [ ] 确认IP配置(ip addr show)
  • [ ] 检查路由表(ip route show)
  • [ ] 测试连通性(ping、telnet)
  • [ ] 查看系统日志(dmesg、/var/log/syslog)
  • [ ] 检查权限(sudo、用户组)
Prev
第10章 Network Namespace基础
Next
第12章 VXLAN与Overlay网络