虚拟网桥:为什么要给它分配一个IP地址?

为什么虚拟桥需要IP地址,而物理网桥不需要IP地址?虚拟桥需要一个IP地址,这是一种误解。它不需要它。

实际上,您可以拥有一个没有IP地址的虚拟桥。但是,在这个物理接口上,主机本身是无法通过IP访问的:只有VM才能到达。

在企业虚拟化主机中,这可能很有用:您可能有一个需要连接到客户VM的客户网络。您可能不希望将从这种网络访问虚拟化主机本身的权限授予给相应的VM。然后,您将拥有另一个物理上独立的管理网络,您将使用它来管理虚拟化主机。这个网络将通过一个独立的NIC连接到主机,而NIC不会是任何虚拟桥的成员。

当网卡没有虚拟网桥的IP地址时,物理网卡如何知道如何使用虚拟桥的IP地址?除非物理NIC具有特定的IPv4加速特性,否则IP地址只是NIC的有效负载数据。一个基本的物理NIC只适用于第2层,即MAC地址.IP协议是第三层,通常留给操作系统的网络驱动程序栈.当您使用ifconfig或ip addr“将IP地址配置为NIC”时,您不一定要对实际的物理硬件配置进行任何更改,而是对包含与NIC关联的物理NIC和OS级IP协议支持的抽象结构进行任何更改。

当将物理NIC配置为充当桥的成员时,任何第3层加速特性都可能需要关闭:当作为网桥的一部分时,NIC需要接收所有传入的数据包,无论目标MAC或IP地址如何,网桥代码将决定是否将数据包转发给网桥的哪个成员。基本的桥接器根本不应该关心IP地址。桥中的任何第3层功能都超越了基本桥功能,在虚拟桥中是/应该是可选的。

如果物理NIC在配置为网桥的一部分时使用IP地址配置,它将激活NIC(+其驱动程序)上的ARP功能。但是,来自物理NIC的传出ARP消息将无法到达VM:要用它的ARP (按照适当的Layer-2功能要求)到达整个段,NIC驱动程序必须同时生成ARP消息作为传出和传入的消息,而NIC驱动程序将没有代码这样做。

使用VM的虚拟桥意味着网桥IP段的某些部分将物理地位于主机之外,而其他部分则包含在位于主机内的VM中。如果主机将像往常一样使用NIC与其中一个VM通信,则将不必要地将数据包从主机发送出去,发送到主机连接到的物理交换机或路由器,然后从那里返回到主机,并通过桥接器到达目的地VM。

这肯定是效率低下的,而且可能根本不起作用:与虚拟桥连接的主机所连接的物理交换机通常没有理由将来自该主机的任何数据包发送回主机本身。

相反,从主机到桥接网段的传出数据包必须通过网桥代码发送,桥代码首先查找桥接器的哪个接口(虚拟的还是物理的)将“最接近”目的地。如果桥接器知道目的地,则将传出的数据包直接发送给它。对于主机与其VM之间的通信,这意味着通信完全发生在物理主机内,根本不使用主机之外的物理网络带宽。

如果网桥不知道目标MAC地址,则首先将发出的分组发送出所有网桥成员接口:一旦收到答复,网桥将了解初始分组的目的地的位置,并可以返回高效的操作方法(如前所述)。

当从包含网桥的主机发出ARP请求时,请求必须同时广播到VM和物理NIC,这样请求才能实际发送到整个网段:网桥代码可以做到这一点,单个物理NIC不能这样做。

我认为不需要Linux桥完全是物理的或虚拟的:我不明白为什么Linux桥不能有多个物理接口和与它相关的任意数量的VM。但是在企业环境中,您通常不希望构建这样的“无所不包的主机”。它很容易成为一个棘手的、关键的基础设施,永远不会有任何停机时间;换句话说,对于系统管理员来说,这是一个令人头疼的问题。

为什么VM需要与网桥通信,而物理机器却不直接与物理桥通信?再一次的误解是:VM不需要网桥上的IP地址“与网桥通信”。

但是,如果您希望主机和VM能够在同一个IP网段中相互通信,则向桥接设备分配IP地址是实现此目的的方法。

桥接设备上的IP地址主要是为了满足主机的通信需求,而不是VM的通信需求,但它可以允许主机通过IP高效地与VM进行通信,而不需要通过外部设备(如果需要的话)。