linux 网桥 docker 网桥 ovs网桥

linux 网桥 docker 网桥 ovs网桥

在 Linux 中,网桥(Bridge) 是一种虚拟网络设备,用于连接多个网络接口(物理或虚拟),实现二层(数据链路层)通信。常见的网桥类型包括 Linux 原生网桥、Docker 网桥 和 Open vSwitch (OVS) 网桥,它们在实现和用途上有显著差异。以下是详细对比和配置指南:

1. Linux 原生网桥

特点

内核实现:由 bridge 内核模块驱动。

轻量级:功能简单,适合基础网络隔离。

管理工具:ip 命令或 brctl(旧版)。

常用命令

# 创建网桥

ip link add br0 type bridge

ip link set br0 up

# 将接口加入网桥

ip link set eth0 master br0

# 查看网桥信息

bridge link show # 查看网桥端口

ip -d link show br0 # 查看网桥详情

典型用途

虚拟机网络(如 KVM 的虚拟网桥)。

简单的容器网络隔离。

2. Docker 网桥

特点

Docker 自动创建:默认使用 bridge 驱动生成 docker0 网桥。

隔离性:每个容器通过 veth pair 连接到网桥。

NAT 支持:容器通过 iptables NAT 规则访问外网。

管理命令

# 查看 Docker 网桥

docker network ls

docker network inspect bridge

# 自定义网桥

docker network create --driver bridge my-bridge

# 查看网桥详情

ip link show docker0

bridge link show

配置示例

# 启动容器并连接到自定义网桥

docker run -d --net=my-bridge nginx

数据路径

容器 → veth pair → docker0 网桥 → 主机 eth0 → 外网

3. Open vSwitch (OVS) 网桥

特点

高级功能:支持 VLAN、VXLAN、流量控制、SDN 等。

用户态+内核态:ovs-vswitchd 守护进程 + openvswitch 内核模块。

云原生支持:广泛用于 OpenStack、Kubernetes。

管理命令

# 创建 OVS 网桥

ovs-vsctl add-br ovs-br0

# 添加端口(物理接口或虚拟接口)

ovs-vsctl add-port ovs-br0 eth0

ovs-vsctl add-port ovs-br0 vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=10.0.0.2

# 查看网桥信息

ovs-vsctl show

ovs-ofctl dump-flows ovs-br0 # 查看流表规则

典型用途

云计算平台(如 OpenStack Neutron)。

Kubernetes 的 Overlay 网络(如 Flannel 的 VXLAN 模式)。

复杂网络策略(ACL、QoS)。

4. 三者的核心区别

特性

Linux 原生网桥

Docker 网桥

OVS 网桥

实现层级

内核模块 (bridge)

Docker 引擎 + 内核

用户态 + 内核模块

功能

基础二层交换

容器网络 + NAT

高级 SDN 功能(流表、隧道)

性能

中(NAT 开销)

中高(依赖配置)

VLAN 支持

是(需手动配置)

是(通过 --network 参数)

是(原生支持)

VXLAN 支持

典型场景

虚拟机网络

容器网络

云平台、SDN

5. 混合使用案例

场景:在 OVS 网桥上运行 Docker 容器

# 1. 创建 OVS 网桥

ovs-vsctl add-br ovs-br0

# 2. 将物理接口加入 OVS 网桥(可选)

ovs-vsctl add-port ovs-br0 eth0

# 3. 启动 Docker 并使用 OVS 网桥

docker network create -d macvlan --subnet=192.168.1.0/24 \

--gateway=192.168.1.1 -o parent=ovs-br0 ovs-net

# 4. 运行容器

docker run --net=ovs-net nginx

6. 常见问题

Q1:如何选择网桥类型?

简单容器网络 → Docker 默认网桥。

虚拟机或基础隔离 → Linux 原生网桥。

云平台或高级网络 → OVS 网桥。

Q2:OVS 网桥能否替代 Docker 网桥?

可以,但需手动配置(如通过 macvlan 驱动或 CNI 插件)。

Q3:如何监控网桥流量?

# Linux 网桥

tc -s qdisc show dev br0

# OVS 网桥

ovs-vsctl list interface ovs-br0

ovs-ofctl dump-ports ovs-br0

7. 总结

Linux 原生网桥:简单、高效,适合基础场景。

Docker 网桥:开箱即用,默认支持容器 NAT 网络。

OVS 网桥:功能强大,适合复杂网络架构。

根据需求灵活选择,三者甚至可以协同工作(如 OVS 管理底层网络,Docker 运行其上)!

如果双方配置相同的 VNI 但不同的 UDP 端口,默认情况下无法互通。

必须满足以下条件才能互通:

VNI(Virtual Network Identifier)相同(如 VNI=42)。

UDP 端口一致(默认 4789,或手动指定相同端口)。

底层 IP 网络可达(VTEP 之间能互相通信)。

在 VXLAN 配置中,“监听端口”和“目标端口”是同一个值,即:

发送方:将 VXLAN 封装的 UDP 包发送到对端指定的目标端口(如 4789)。

接收方:监听本地相同的端口(如 4789)以接收对端发来的 VXLAN 包。

因此,双方必须使用相同的 UDP 端口才能互通

发送和监听是同一端口

发送方:通过 dstport(Linux)或 options:dst_port(OVS)指定目标端口(即对端监听的端口)。

接收方:自动监听相同的端口(无需额外配置),等待接收对端发来的数据。

相关推荐

页游助手哪个好?新浪页游助手-页游辅助工具下载
精工手表怎么换电池 SEIKO手表换电池要注意什么
365bet手机端

精工手表怎么换电池 SEIKO手表换电池要注意什么

📅 07-02 👁️ 9238
zh – 深度科技社区
mobileBET365

zh – 深度科技社区

📅 07-02 👁️ 1915
2018世界杯冰岛足球队,冰岛队史上世界杯*战绩是几次?
2018俄罗斯世界杯
365bet备用网

2018俄罗斯世界杯

📅 07-02 👁️ 4163
买车送的随车工具,你都会用吗?
365bet手机端

买车送的随车工具,你都会用吗?

📅 07-06 👁️ 3806