在上一篇文章留的小问题中,如果两台电脑的IP地址在同一个网段,电脑会认为在同一个广播域,所以,如果俩电脑加入相同的VLAN,必然可以互通;但如果加入了不同的VLAN,由于彼此”听”不到对方的ARP广播,自然也不会应答,所以无法互通。
如果俩电脑的IP地址不在同一个网段,电脑会认为不在同一个广播域,会各自找自己网段的网关。现实生活中一个房间可能会有多个门,但一个广播域只能有一个网关。所以,电脑的IP地址不在同一个网段,不论是否在一个VLAN,都不能互通。
一般地,在进行IP地址规划时,一个VLAN规划在一个网段,不同VLAN规划在不同的网段。
也许有同学产生了疑问:VLAN虽然控制了广播域,提高了网络性能,但是不同VLAN间不能互访也不成啊,难道电脑间要通信只能在同一个VLAN同一个网段?
当然不是了,VLAN只是在二层进行了隔离,目的是控制广播帧。VLAN间要互通,可以通过三层来实现,即所谓的VLAN间路由。
提到路由,最先想到的就是路由器。不错,用路由器的确可以实现VLAN间互通。
要在VLAN间互访,那么VLAN内的电脑必须填写网关(gateway)地址,网关地址就是该VLAN连接的三层设备的接口地址。
图中,PCA访问PCC,由于PCA和路由器的端口1都在VLAN2内,所以可以通过ARP互相获得对方的MAC地址;同理,PCC和路由器的端口3也可以得到对方的MAC地址。
PCA发出访问PCC的标准帧,交换机端口1收到后打上tag变成802.1Q帧,VID为2,然后送到端口3。端口3拆去tag变成标准帧后发出。路由器端口1收到后拆除以太网封装,查找路由表后送到端口3,端口3通过ARP获取PCC的MAC地址后,封装为标准以太网帧发出。交换机端口12收到后打上tag变成802.1Q帧,VID为4,然后送到端口9,端口9拆去tag变回标准帧发给了PCC。
看上去毫无问题,非常完美!可是,交换机上有3个VLAN,路由器就需要3个端口。如果交换机上有30个VLAN呢?
交换机上的端口数量通常很多,24口、48口甚至更多,由于交换机的所有端口仅支持以太网,所以交换机的全名叫”以太网交换机”。
但路由器就不同了,路由器的主要功能不仅是实现三层转发,更重要的是实现不同链路层协议之间的互通,即所谓的”异种网络”互通。链路层协议有很多,除了我们熟悉的以太网外,还有PPP、HDLC、帧中继、ATM等等。所以路由器的接口一般都是由支持不同链路层协议的扩展板卡提供,实现不同链路层协议之间的互通。
所以,路由器实际上并没有那么多的以太网端口!即使有,一个VLAN占一个端口,也显得太浪费了。
不过,路由器的以太网口可以支持”子接口”!
子接口是一种逻辑接口,一个物理接口可以划分出多个”子接口”。一条公路,中间划条线就是双车道,划两条线就是三车道,但实际上还是一条路。
路由器一个接口划成多个子接口,每个子接口处理不同VLAN的帧,就可以节省大量的物理接口。
这种形式,叫做单臂路由。
图中,路由器G0/0是物理接口,划分了三个子接口G0/0.1、G0/0.2和G0/0.3,每个子接口绑定一个VID,专门负责处理携带此VID的802.1Q帧,同时配置一个IP地址作为该VLAN的网关。
交换机通过一个Trunk接口连接路由器G0/0接口。
PCA访问PCB时,PCA发出的标准帧被交换机打上VID2,成为802.1Q帧后来到Trunk接口(Trunk接口一般默认PVID为1),Trunk接口发现此帧的VID与自己的PVID不同,把此802.1Q帧原样发给路由器。路由器G0/0接口收到后,根据携带的VID交给子接口G0/0.1,G0/0.1一看VID,没错,是我的货,拆除以太网封装,送到路由器转发进程查找路由表,路由器根据目的IP地址,把数据包送到子接口G0/0.2,G0/0.2封装为以太网帧,并打上VID3变成802.1Q帧后发给交换机,交换机收到后根据VID送到连接PCB的端口,端口拆除tag变成标准帧后发给PCB。
在单臂路由中,路由器只需要一个接口就可以实现交换机上所有VLAN间的互通,为路由器节省了大量端口。不过我们发现,VLAN间互通的数据会在这条Trunk链路上跑个来回,如果交换机VLAN较多、数据量较大,这条链路很容易”堵车”,导致网络性能下降,但更重要的是,这对路由器的性能是一个巨大挑战。与其说导致网络性能下降的原因是链路”堵车”了,倒不如说是因为路由器拆tag、查路由、加tag,疲于奔命,太累了!
有没有更好的办法呢?
小Q:电脑的IP地址和网关必须在同一个网段吗?
欢迎大家留言讨论。