一、物理网络

    先说说通常情况下物理网络的结构。我们先要注意两个不同的名词: internet 和 Internet,前者是一般意义下的网间网,后者是世界范围内的网间网,后者其实是前者的一个特例。我们的研究对象就是一个简单的 internet。

    举个例子吧(我最喜欢举例了),你的公司有两个工作组,他们分别在不同的局域网,如图所示:

VMware 虚拟机组网_Internet


    那么在同一个工作组,也就是在同一个LAN上,各个机器如何通信呢?如果我们假设LAN 内的机器都是互相友好的,那么我们可以这样做,当m1 要向 m4 传输信息时,它的网卡(adapter)就向LAN 内的所有机器发送这个信息(广播),并在包中包含m4的IP(dest IP),每个机器的网卡(adapter)都收到信息,但只有m4 发现目的IP是自己,并作出反应。实际的LAN运行的基本原理也是如此,一些扫描软件做的就是捕获所有的包并加以分析,提取有用的信息。



    显然,如果一台机器有两个网卡,一个属于 net1,一个属于 net2,那么它就可以同时发送和接收两个网络上的数据,从而联系两个网络。所以,两个工作组要通信,就得有一个中介,这个中介就是我们通常所说的路由器,这也是为什么路由器得有两个网卡。

    这里,我们就假设 net1.m1 和 net2.m1 为同一台机器,而且拥有两个网卡,如图:
VMware 虚拟机组网_网_02


可是,m1.adapter1 如何知道它收到的数据是发向 net2的呢(前面说过,LAN内的包是广播的),这就要用到网络号了。我们知道,网络上的每一台机器(确切地说是每一个网卡)都有一个IP(有时一个网 卡也不止一个,后面会看到),如果 net1 和 net2 上的机器的IP 前缀不同,我们就可以用这个IP 前缀来标识两个网络了,比如,net1 上的机器的IP都是 192.168.221.x, net2上的都是 192.168.48.x。这样,当 m1.adapter1 收到的包的目的(dest)IP的前缀是 192.168.221,那么这个包就是发往 net1的;同样,如果前缀是 192.168.48,那就是发往 net2的。 这个IP前缀可以通过IP mask来得到,我们分配给 net1 和 net2 的mask都是 255.255.255.0,把它与各自的IP相与(AND),就得到网络号。这样,m1 成了两个网络之间的门,实际上是两道门,中间还有一个黑盒,其中 adapter1是一道通向 net1的门,称它为 net1 的网关,adapter2 是 net2的网关,m1就是两个网络之间的路由器。



前面说的例子是两个地位相等的网络,而实际上我们要参与的一般都是两个地位并不相等的网络。假设你有十台机器,但只向ISP(Internet Service Provider)申请了一个IP,你想让每一台机器都能上网,怎么办?

这也是我们要组建的VMware网络的基本结构。

    NAT. 对,实际情况下用的就是NAT。这时,你得有一台机器作为NAT服务器,这台机器在架构上和路由器相同,只是它比路由器多做了一点点工作,就在我们刚才说的黑盒里面干的。你的机器的连线将如图所示。
VMware 虚拟机组网_Internet_03





NAT 做了什么呢,简单地说,就是共享一个IP,其详细原理请见其它资料。



二、vmnet

好了,轮到VM们粉墨登场了。

VMware 默认配置了三种连网方式,bridge, NAT, host on

ly。这篇文章也只打算说说这三种方式,具体地说就是讲解它们与实际的物理网络之间的对应关系。

1.   Bridge

前面说过,一个网卡可以获得多个IP,那么在 bridge方式里面,就是利用网卡的这种功能为每一个VM分配一个外网的IP;这样,每一个VM在网络上的地位与 host是对等的。你可以认为每一个VM都是一个网络上的物理机。这种方式要求你能够得到多个IP。这种网络的示意连接图如下:


VMware 虚拟机组网_Internet_04


2.     Host only

先说这个,是因为后面的NAT方式实际上是在这种方式上加了一个功能而已。先看图吧,host only 用的是vmnet1,它包括两个组件,一个虚拟的网卡(Host Virtual Adapter),一个网拟的交换机(Virtual Switch),虚拟的网卡自动连到这个交换机上。当你配置你的VM们的网卡时,若选的是 host only, 那么它们也默认被连到了这个交换机上了。这时,你一定看出来了,Host Virtual Adapter和各个虚拟机的网卡一起已经组成了一个局域网,而且Host Virtual Adapter所在的机器上(也就是host)还有一个网卡(物理网卡)连接着外网(不论这个外网是因特网还是其它的局域网)。可是呢,这个host 上的两个网卡之间不能通信。这两个网卡,一个虚拟的,一个物理的,这兄弟俩真是鸡犬之声相闻,老死不相往来。兄弟俩的不合,导致了VM们不能访问外网,但 是,通过Host Virtual Adapter,VM们可以访问host,所以叫做 host only。

那么,有什么办法让VM们能够访问外网呢,把host 配置成一个简单的NAT服务器。下面是在Windows XP 下使用的方法:打开网络连接(Network Connections),找到代表物理网卡的那个连接(一般是Local Area Connection),右击,属性,高级,找到 Internet Connection Sharing(ICS),Check 它,VMware默认给你装了两个网卡,这个地方你还要选择把物理网卡的IP给谁共享,应该是 vmnet1。确定,XP会弹出一个对话框,说你不能再用共享文件了。也就是使用ICS之后,你不能在局域网里把你的文件设为共享了。不管它,继续。XP 会把你的vmnet1上的 Host Virtual Adapter的IP设为 192.168.0.1,不过没有给你提供DHCP,所以你可以把VM们的IP静态地设为 192.168.0.x,比如,第一台VM为192.168.0.2,第二台为192.168.0.3。网关当然要设成Host Virtual Adapter(192.168.0.1)啦,因为没有DHCP,VM们的DNS也要设置成静态的,就设置成你的主机的DNS。

在 Windows 2003下,你还可以把主机配置成一个具有完全功能的NAT服务器。

Host only 的一个优点就是非常灵活,跟物理网络更为相近。比如,你可以在VM们中选中一个用作DHCP服务器,再选一个作DNS。
VMware 虚拟机组网_网_05


3.   NAT

这种方式可以简单地认为是在host only 基础上在主机上增加一项NAT服务,而且还使用了一些magic,一些人不太喜欢这种方式,就是因为它与物理网络有一点点不同,其原因就是这一点 magic,到底是什么magic呢?NAT服务并不连接 Host Virtual Adapter与物理网卡! 它相当于又虚拟出来一个网卡!默认情况下,这个不知名的网卡插到vmnet8的交换机的第二个插槽上。假设VMware给你的虚拟机配置的网络号是 192.168.221.0,那么这个无名网卡就是192.168.221.2,而Host Virtual Adapter是192.168.221.1,你的VM们的网络连接的配置要设成自动获取IP和DNS,这是因为这个NAT服务还提供了DHCP服 务,DHCP服务除了给VM们提供IP外,还可以给它们提供DNS服务器的IP。

NAT方式中,Host Virtual Adapter并没有提供特殊的作用,Host Virtual Adapter在各种配置中都起了一个相同的作用,就是与主机进行通信。若安装了VMware Tools,虚拟机可以使用 Folder Sharing,具体怎么使用略。这种服务就是通过Host Virtual Adapter来的。(这一点参考VMware 的文档)
VMware 虚拟机组网_网络_06