到底什么是「桥接」
潘忠显 / 2025-09-08
在使用 Docker 或 虚拟机 时,我们经常会听到「桥接(Bridging)」。
我们知道这是一种网络的连接方式,但具体是什么概念、它如何工作又不甚清楚。本文将深入探讨桥接网络的奥秘,并分析其在不同场景下的应用。
桥接与网桥
简单来说,桥接(Bridging)是一种网络技术或行为,而网桥(Bridge)是实现这种技术的设备或软件组件。
桥接是动作,网桥是工具。
网桥是一个工作在数据链路层(第二层)的设备或软件,其核心功能是连接两个或多个网络分段,并根据 MAC 地址表智能地转发数据帧。现代的交换机,本质上就是一种功能更强大、拥有更多端口的多端口网桥。
从工作原理来看,网桥会维护一张 MAC 地址表。当数据包从一个接口(interface,网卡)进入时,网桥会检查目标 MAC 地址,然后根据 MAC 地址表决定将数据包转发到哪个接口。如果目标 MAC 地址未知,它会向所有接口广播该数据包(除了接收接口),以学习目标设备的 MAC 地址。
其他网络模式
除了桥接,还有其他几种常见的网络连接方式:
- NAT 模式 (Network Address Translation): 这种模式下,虚拟机或容器拥有私有 IP 地址,这个地址对外部网络是不可见的。所有进出外部网络的流量都通过宿主机的 IP 地址进行网络地址转换(NAT)。NAT 的主要作用是将一个 IP 地址空间映射到另一个 IP 地址空间,通常用于让私有网络中的多台设备,通过一个公有 IP 地址访问外部网络。

- 主机模式 (Host Networking): 这种模式下,虚拟机或容器与主机共享网络栈。它们拥有与主机相同的 IP 地址,端口也与主机共享。这种模式性能最好,但会牺牲一定的隔离性,可能导致端口冲突。适用于需要高性能或需要直接访问主机服务的场景。
在使用 Docker 的时候,你可能用到过 --network=host
的选项,这就是主机模式。比如下边,我们可以看到,容器内外使用的 IP 都是一样的——使用的网卡都是相同的。

要理解桥接与其他网络模式的区别,我们可以从工作层级、性能和隔离性三个方面进行对比:
工作层级
- 桥接工作在数据链路层(第二层),处理的是 MAC 地址。它就像一个虚拟的交换机,让所有连接在它上面的设备都在同一个局域网内,可以直接通过 MAC 地址相互通信。
- NAT 和路由工作在网络层(第三层),处理的是 IP 地址。它们需要额外的地址转换或路由功能,才能实现内部网络与外部网络的通信。
性能与效率
- 桥接的效率更高,因为它直接在数据链路层进行转发,没有额外的地址转换开销。
- NAT 模式的效率相对较低,因为需要进行地址和端口转换,会产生额外的性能开销。
隔离性
- 主机模式的隔离性最差,因为与宿主共享网络栈。
- 桥接的隔离性适中,设备有独立 IP,但仍与物理网络处于同一平面。
- NAT 和路由模式的隔离性最好,它们将内部网络与外部网络完全隔离开来。
你可以将主机模式比作与宿主共用一个身体,将桥接比作是与局域网内的邻居直接对话,而 NAT 则像是通过一个“翻译”和“代理”与外界交流。
桥接实现网络透明性
桥接的核心作用是实现网络透明性。它让连接到桥上的所有设备(无论是物理设备、虚拟机还是容器)都能像直接连接到物理网络一样,直接相互通信。
一个典型的用例是虚拟化环境: 比如在 VirtualBox 或 VMware 中,使用桥接模式时,虚拟机就像一台物理机,直接连接到了你的物理局域网。物理网络中的 DHCP 服务器(通常是你的路由器),会为这个虚拟机分配一个与宿主机在同一网段的独立 IP 地址,并可以与局域网内的其他设备(如打印机、其他电脑)直接通信,不需要经过任何 NAT 转换。这是一种“真·桥接”的应用。
例如,如果你的宿主机 IP 是 192.168.1.100
,那么你的虚拟机可能会获得 192.168.1.101
。由于它们都在同一个网络中,局域网内的其他设备可以直接通过这个独立的 IP 地址访问你的虚拟机或容器,就像访问另一台物理计算机一样。
另外你可以有观察过 Docker 或者 Podman 的网络配置,其中容器也显示是桥接,但这里和 VMware 的桥接模式有本质区别。
我们可以先通过 docker network ls
查看网络情况:

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

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

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

可以看到,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

小结
桥接是一种工作在数据链路层的网络技术,而网桥是实现这种技术的工具。它利用 MAC 地址进行数据转发,效率很高。
在实践中,“桥接”并非一个单一概念。它在 VMware 等虚拟机软件中,意味着虚拟机直接加入物理局域网,获得真实 IP,实现完全透明通信;而在 Docker 和 Podman 等容器技术中,它通常与 NAT 结合,形成一个内部隔离的虚拟网络,再通过主机的 NAT 转换才能访问外部。
理解这些模式的本质区别,能够帮助我们在不同的应用场景下,根据对性能、隔离性和配置复杂度的要求,做出正确的网络技术选择。