一、基本概念
为了使虚拟机能够与外界通信, 需要为虚拟机提供网络设备。 支持的常用
网卡包括 、、 等。命令行上用 为虚拟机创建虚拟机网卡。例
如, 的命令行选项
表示为虚拟机添加一块 型的以太网卡。如果省略 参数则 会默认选择一
种网卡类型,目前采用的是 (手册里说明的是 ),可以在虚拟机启动
后执行 命令查看。有了虚拟网络设备,下面的问题是如何用这些设备来联网。
首先,虚拟机的网络设备连接在 虚拟的 !" 中。每个 的运行实例是宿主
机中的一个进程,而每个这样的进程中可以虚拟一些 !",虚拟机网络设备接入这些
!" 中。当某个 !" 上连接的网络设备发送数据帧,与它在同一个 !" 中的其它网路
设备都能接收到数据帧。上面的例子中对虚拟机的 网卡没有指定其连接的 !" 号,
那么 默认会将该网卡连入 #$。下面这个例子更具一般性:
#$%&#$
该命令为虚拟机创建了三块网卡,其中第一块网卡类型是 ,连入 #$;第二块网卡
类型是 ,第三块网卡类型是 %&,这两块都连入 #$,所以第二块网卡与第三
块网卡可以互相通信,但它们与第一块网卡不能直接通信。
接下来,各个 !" 再通过 提供的 种通信方式与外界联网。
User mode stack:这种方式在 进程中实现一个协议栈,负责在虚拟机 !" 和外部
网络之间转发数据。可以将该协议栈视为虚拟机与外部网络之间的一个 "' 服务器,外部
网络不能主动与虚拟机通信。虚拟机 !" 中的各个网络接口只能置于 ((( 子网中,所
以这种方式只能与外部网络进行有限的通信。此外,可以用 选项为宿主机和虚拟机的
两个 ')* 或 +,* 端口建立映射,实现宿主机和虚拟机在特殊要求下的通信(例如 -#
或 .)。+$% 通信方式由 选项启用,如果不显式指定通信方式,则这
种方式是 默认的通信方式。
socket:这种方式又分为 ')* 和 +,* 两种类型。
()')*:为一个 !" 创建一个套接字,让该套接字在指定的 ')* 端口上监听,而其他
!" 连接到该套接字上,从而将多个 !" 连接起来。缺点在于如果监听套接字所在
进程崩溃,整个连接就无法工作。监听套接字所在 !" 通过% 选项启
用,其他 !" 通过% 选项启用。
()+,*:所有 !" 连接到一个多播套接字上,从而使多个 !" 通过一个总线通信。所
有 !" 都通过%$ 选项启用。
TAP:这种方式首先需要在宿主机中创建并配置一个 '"* 设备, 进程将该 '"* 设备连
接到虚拟机 !" 中。其次,为了实现虚拟机与外部网络的通信,在宿主机中通常还要创
建并配置一个网桥,并将宿主机的网络接口(通常是 .)作为该网桥的一个接口。最后,
只要将 '"* 设备作为网桥的另一个接口,虚拟机 !" 通过 '"* 设备就可以与外部网络完全
通信了。这是因为,宿主机的 . 接口作为网桥的接口,与外部网络连接;'"* 设备作为
网桥的另一个接口,与虚拟机 !" 连接,这样两个网络就连通了。此时,网桥在这两个
网络之间转发数据帧。
这里有两个问题需要注意:
评论1