图中,是一个由 5 台二层交换机(交换机 1~5)连接了大量客户机构成的网络。假设这时,计算机 A 需要与计算机 B 通信。在基于以太网的通信中,必须在数据帧中指定目标 MAC地址才能正常通信,因此计算机 A 必须先广播“ ARP 请求( ARP Request)信息”,来尝试
获取计算机 B 的 MAC 地址。
请大家注意一下,这个 ARP 请求原本是为了获得计算机 B 的 MAC 地址而发出的。也就是说: 只要计算机 B 能收到就万事大吉了。可是事实上,数据帧却传遍整个网络,导致所有的计算机都收到了它。如此一来,一方面广播信息消耗了网络整体的带宽,另一方面,收到
广播信息的计算机还要消耗一部分 CPU 时间来对它进行处理。 造成了网络带宽和 CPU 运算能力的大量无谓消耗。
广播信息是那么经常发出的吗?
读到这里,您也许会问:广播信息真是那么频繁出现的吗?
答案是:是的! 实际上广播帧会非常频繁地出现。利用 TCP/IP 协议栈通信时,除了前面出现的 ARP 外,还有可能需要发出 DHCP、 RIP 等很多其他类型的广播信息。ARP 广播,是在需要与其他主机通信时发出的。当客户机请求 DHCP 服务器分配 IP 地址时,就必须发出 DHCP 的广播。而使用 RIP 作为路由协议时,每隔 30 秒路由器都会对邻近的其他路由器广播一次路由信息。 RIP 以外的其他路由协议使用多播传输路由信息,这也会被交换机转发( Flooding)。除了 TCP/IP 以外, NetBEUI、 IPX 和 Apple Talk 等协议也经常需
要用到广播。例如在 Windows 下双击打开“网络计算机”时就会发出广播(多播)信息。( Windows XP 除外……)
总之,广播就在我们身边。下面是一些常见的广播通信:
ARP 请求:建立 IP 地址和 MAC 地址的映射关系。
RIP:一种路由协议。
DHCP:用于自动设定 IP 地址的协议。
NetBEUI: Windows 下使用的网络协议。
IPX: Novell Netware 使用的网络协议。
Apple Talk:苹果公司的 Macintosh 计算机使用的网络协议。
如果整个网络只有一个广播域,那么一旦发出广播信息,就会传遍整个网络,并且对网络中的主机带来额外的负担。因此, 在设计 LAN 时,需要注意如何才能有效地分割广播域。
广播域的分割与 VLAN 的必要性
分割广播域时,一般都必须使用到路由器。使用路由器后,可以以路由器上的网络接口( LANInterface)为单位分割广播域。但是, 通常情况下路由器上不会有太多的网络接口,其数目多在 1~4 个左右。随着宽带连接的普及,宽带路由器(或者叫 IP 共享器)变得较为常见,但是需要注意的是,它们上面虽然带着多个(一般为 4 个左右)连接 LAN 一侧的网络接口,但那实际上是路由器内置的交换机,并不能分割广播域。况且使用路由器分割广播域的话,所能分割的个数完全取决于路由器的网络接口个数,使得用户无法自由地根据实际需要分割广播域。与路由器相比, 二层交换机一般带有多个网络接口。因此如果能使用它分割广播域,那么无疑运用上的灵活性会大大提高。用于在二层交换机上分割广播域的技术,就是 VLAN。 通过利用 VLAN,我们可以自由设计广播域的构成,提高网络设计的自由度。
首先,先来复习一下为什么不同 VLAN 间不通过路由就无法通信。在 LAN 内的通信,必须在数据帧头中指定通信目标的 MAC 地址。而为了获取 MAC 地址, TCP/IP 协议下使用的是 ARP。 ARP 解析 MAC 地址的方法,则是通过广播。也就是说,如果广播报文无法到达,那
么就无从解析 MAC 地址,亦即无法直接通信。
计算机分属不同的 VLAN,也就意味着分属不同的广播域,自然收不到彼此的广播报文。因此,属于不同 VLAN 的计算机之间无法直接互相通信。为了能够在 VLAN 间通信,需要利用 OSI 参照模型中更高一层——网络层的信息( IP 地址)来进行路由。关于路由的具体内
容,以后有机会再详细解说吧。
如果采用这个办法,大家应该不难想象它的扩展性很成问题。每增加一个新的 VLAN,都需要消耗路由器的端口和交换机上的访问链接,而且还需要重新布设一条网线。而路由器,通常不会带有太多 LAN 接口的。新建 VLAN 时,为了对应增加的 VLAN 所需的端口,就必须将路由器升级成带有多个 LAN 接口的高端产品,这部分成本、还有重新布线所带来的开销,都使得这种接线法成为一种不受欢迎的办法。
接下来,我们继续学习使用汇聚链路连接交换机与路由器时, VLAN 间路由是如何进行的。如下图所示,为各台计算机以及路由器的子接口设定 IP 地址。
[attach]3896[/attach]
红色 VLAN( VLAN ID=1)的网络地址为 192.168.1.0/24,蓝色 VLAN( VLAN ID=2)的网络地址为 192.168.2.0/24。各计算机的 MAC 地址分别为 A/B/C/D,路由器汇聚链接端口的 MAC 地址为 R。交换机通过对各端口所连计算机 MAC 地址的学习,生成如下的 MAC 地址列表。
[attach]3897[/attach]
首先考虑计算机 A 与同一 VLAN 内的计算机 B 之间通信时的情形。计算机 A 发出 ARP 请求信息,请求解析 B 的 MAC 地址。交换机收到数据帧后,检索 MAC地址列表中与收信端口同属一个 VLAN 的表项。结果发现,计算机 B 连接在端口 2 上,于是交换机将数据帧转发给端口 2,最终计算机 B 收到该帧。 收发信双方同属一个 VLAN 之内的通信,一切处理均在交换机内完成。如下图所示:
[attach]3898[/attach]
不同 VLAN 间通信时数据的流程
接下来是这一讲的核心内容,不同 VLAN 间的通信。让我们来考虑一下计算机 A 与计算机 C 之间通信时的情况。
[attach]3899[/attach]
计算机 A 从通信目标的 IP 地址( 192.168.2.1)得出 C 与本机不属于同一个网段。因此会向设定的默认网关( Default Gateway, GW)转发数据帧。在发送数据帧之前,需要先用 ARP 获取路由器的 MAC 地址。
得到路由器的 MAC 地址 R 后,接下来就是按图中所示的步骤发送往 C 去的数据帧。 ①的数据帧中,目标 MAC 地址是路由器的地址 R、但内含的目标 IP 地址仍是最终要通信的对象 C的地址。这一部分的内容,涉及到局域网内经过路由器转发时的通信步骤,有机会再详细解
说吧。
交换机在端口 1 上收到①的数据帧后,检索 MAC 地址列表中与端口 1 同属一个 VLAN 的表项。由于汇聚链路会被看作属于所有的 VLAN,因此这时交换机的端口 6 也属于被参照对象。这样交换机就知道往 MAC 地址 R 发送数据帧,需要经过端口 6 转发。
例如,使用 FTP( File Transfer Protocol)传输容量为数 MB 以上的较大的文件时, 由于 MTU的限制, IP 协议会将数据分割成小块后传输、并在接收方重新组合。这些被分割的数据,“发送的目标”是完全相同的。发送目标相同,也就意味着同样的目标 IP 地址、目标端口号(注:特别强调一下,这里指的是 TCP/UDP 端口)。自然,源 IP 地址、源端口号也应该相同。 这样一连串的数据流被称为“流( Flow)”。
同一个流的第二块以后的数据到达交换机后,直接通过查询先前保存在缓存中的信息查出“转发端口号”后就可以转发给目标所连端口了。这样一来,就不需要再一次次经由内部路由模块中继,而仅凭交换机内部的缓存信息就足以判断应该转发的端口。这时,交换机会对数据帧进行由路由器中继时相似的处理,例如改写 MAC 地址、 IP 包头中的 TTL 和 Check Sum 校验码信息等,