Jason Pan

到底什么是「桥接」

潘忠显 / 2025-09-08


在使用 Docker虚拟机 时,我们经常会听到「桥接(Bridging)」。

我们知道这是一种网络的连接方式,但具体是什么概念、它如何工作又不甚清楚。本文将深入探讨桥接网络的奥秘,并分析其在不同场景下的应用。

what-is-a-network-bridge-diagram

桥接与网桥

简单来说,桥接(Bridging)是一种网络技术或行为,而网桥(Bridge)是实现这种技术的设备或软件组件。

桥接是动作,网桥是工具。

网桥是一个工作在数据链路层(第二层)的设备或软件,其核心功能是连接两个或多个网络分段,并根据 MAC 地址表智能地转发数据帧。现代的交换机,本质上就是一种功能更强大、拥有更多端口的多端口网桥

bridge-function

从工作原理来看,网桥会维护一张 MAC 地址表。当数据包从一个接口(interface,网卡)进入时,网桥会检查目标 MAC 地址,然后根据 MAC 地址表决定将数据包转发到哪个接口。如果目标 MAC 地址未知,它会向所有接口广播该数据包(除了接收接口),以学习目标设备的 MAC 地址。

其他网络模式

除了桥接,还有其他几种常见的网络连接方式:

nat-network

在使用 Docker 的时候,你可能用到过 --network=host 的选项,这就是主机模式。比如下边,我们可以看到,容器内外使用的 IP 都是一样的——使用的网卡都是相同的。

host-network

要理解桥接与其他网络模式的区别,我们可以从工作层级、性能和隔离性三个方面进行对比:

工作层级

性能与效率

隔离性

你可以将主机模式比作与宿主共用一个身体,将桥接比作是与局域网内的邻居直接对话,而 NAT 则像是通过一个“翻译”和“代理”与外界交流。

桥接实现网络透明性

桥接的核心作用是实现网络透明性。它让连接到桥上的所有设备(无论是物理设备、虚拟机还是容器)都能像直接连接到物理网络一样,直接相互通信。

一个典型的用例是虚拟化环境: 比如在 VirtualBoxVMware 中,使用桥接模式时,虚拟机就像一台物理机,直接连接到了你的物理局域网。物理网络中的 DHCP 服务器(通常是你的路由器),会为这个虚拟机分配一个与宿主机在同一网段的独立 IP 地址,并可以与局域网内的其他设备(如打印机、其他电脑)直接通信,不需要经过任何 NAT 转换。这是一种“真·桥接”的应用。

例如,如果你的宿主机 IP 是 192.168.1.100,那么你的虚拟机可能会获得 192.168.1.101。由于它们都在同一个网络中,局域网内的其他设备可以直接通过这个独立的 IP 地址访问你的虚拟机或容器,就像访问另一台物理计算机一样。


另外你可以有观察过 Docker 或者 Podman 的网络配置,其中容器也显示是桥接,但这里和 VMware 的桥接模式有本质区别。

我们可以先通过 docker network ls 查看网络情况:

docker-network-ls

然后查看器中一个网络的具体内容, docker network inspect cc740286f0b9

docker-network-inspect

我们再看一下宿主机上的网络情况,可以看到有一个名为 docker0 的虚拟网卡,其地址正是上边的网络的网关地址:

docker0-content

我们启动一个容器来查看一下其网络地址是 172.17.0.2,即容器被分配了一个独立的私有 IP 地址(如 172.17.0.0/16

ip-in-docker

可以看到,Docker 使用的桥接网络,仅仅是用于容器之间的网络通信,而并不会像 VMware 的虚拟机一样获得一个真实的局域网IP地址。当容器需要访问外部网络时,其流量必须通过主机的 NAT 转换。因此,这是一种桥接 + NAT 的组合模式,既实现了内

这里有一个更形象的例子来说明 Docker 容器间的桥接:

docker network create -d bridge mybridge docker run -d --net mybridge --name db redis docker run -d --net mybridge -e DB=db -p 8000:5000 --name web chrch/web
docker-bridging-demo

小结

桥接是一种工作在数据链路层的网络技术,而网桥是实现这种技术的工具。它利用 MAC 地址进行数据转发,效率很高。

在实践中,“桥接”并非一个单一概念。它在 VMware 等虚拟机软件中,意味着虚拟机直接加入物理局域网,获得真实 IP,实现完全透明通信;而在 DockerPodman 等容器技术中,它通常与 NAT 结合,形成一个内部隔离的虚拟网络,再通过主机的 NAT 转换才能访问外部。

理解这些模式的本质区别,能够帮助我们在不同的应用场景下,根据对性能、隔离性和配置复杂度的要求,做出正确的网络技术选择。