VLAN间的三层路由(HCNA)——路由器实现VLAN间的三层通信

目录

前言

通过多臂路由器实现VLAN间的三层通信

第一阶段

第二阶段

通过单臂路由器实现VLAN间的三层通信

第一阶段

第二阶段


前言

我们知道属于同一VLAN的计算机之间是可以进行二层通信的,属于不同VLAN的计算机之间是无法进行二层通信的。

虽然,属于不同VLAN的计算机之间是无法进行二层通信,但是这并不是说,这些计算机之间就没有办法进行通信了。事实上,这些计算机之间完全可以进行正常的通信,只不过它们之间的通信不是二层通信,而是三层通信。

通过多臂路由器实现VLAN间的三层通信

如图所示,3台交换机和四台PC机组成了一个交换网络,在此网络上划分了两个基于端口的VLAN,分别为VLAN10和VLAN20,其中PC1和PC2属于VLAN10,PC3和PC4属于VLAN20。

在图中,PC1与PC4之间是无法进行任何通信的,这是因为PC1和PC4属于不同的VLAN,所以它们之间无法进行二层通信;同时,由于它们之间目前尚未存在一个“三层通信”,所以它们之间也无法进行三层通信。

那么,如何才能在PC1和PC4之间实现三层通信呢?

方法之一便是引入一台路由器。路由器的作用实质上就是在不同的二层网络(二层广播域)之间建立起三层通道。不同的VLAN其实就是不同的二层网络(二层广播域),所以路由器当然也可以在不同的VLAN之间建立起三层通道。

如图所示的网络中引入一台路由器R,便可以得到如下图所示的网络,我们可以看到,路由器R的GE0/0/0接口与交换机S1的属于VLAN10的D1端口相连,路由器R的GE2/0/0接口与交换机S1的D2端口相连。

需要特别说明的是,与PC的接口一样,路由器R的GE1/0/0接口和GE2/0/0接口都是不能发送和接收Tagged VLAN帧的。另外,如图所示中,路由器R分别从GE1/0/0接口和GE2/0/0接口各自引入了一条物理链路,每条物理链路可以被形象的称为路由器的一条“手臂”, 所以这里的路由器R也被常常形象的称为“双臂路由器”,或者泛泛的称为“多臂路由器”。

接下来,我们通过一个例子来说明PC1和PC4是如何实现三层通信的,也就是说,PC1是如何将一个名为P的IP报文成功的发送给PC4。还是以上图为例子,在图中,交换机的Access端口有:S2的D1端口和D2端口,S3的D1端口和D2端口,S1的D1端口和D2端口。交换机的Trunk端口有S2的D3端口,S3的D3端口,S1的D3端口和D4端口。

第一阶段

首先,P是在PC 1 的网络层形成的,P的目的IP地址为192.168.200.40,源IP地址为192.168.100.10,然后根据P的目的IP地址,PC1会进行IP路由表的查询工作(展示了R、PC1、PC4的简化的IP路由表)。PC1的IP路由表中有两条路由,其中一条为缺省路由。显然,P的目的IP地址192.168.200.40只能匹配上那条缺省路由,该路由的出接口为PC 1的Ethernet0/0/1接口,下一跳IP地址为路由器R的GE1/0/0接口的IP地址192.168.100.1(路由器R的GE1/0/0也因此称为是192.168.100.0/24或者是VLAN10 的缺省网关)。

于是,根据这条缺省路由的指示,P会被下发至PC 1的Ethernet0/0/1接口,并被封装成一个帧。假设这个帧取名为X,那么X帧的载荷数据就是P,X帧的类型字段的值为0x0800,X帧的源MAC地址为PC1的Ethernet0/0/1接口的MAC地址,X帧的目的MAC地址为路由器R的GE1/0/0接口的MAC地址(如果PC1在自己的ARP缓存表中查询不到IP地址为192.168.100.1所对应的MAC地址,就应该通过ARP机制去获取该MAC地址)。注意,此时的X帧是一个不带VLAN Tag的帧。

接下来,PC 1会从Ethernet0/0/1接口将Untagged X发送出去。X帧从S2的D1端口进入S2后,会被添加上VLAN10的Tag,并且这个Tagged X帧会被S2转发至S1,S1会将Tagged X帧的Tag去掉,然后将它从自己的D1端口转发出去。

路由器R的GE1/0/0接口在收到S1转发过来的Untagged X帧后,会将Untagged X帧的目的MAC地址与自己的MAC地址进行比较。由于这两个MAC地址是相同的,所以R的GE1/0/0接口会根据这个帧的类型字段值0x0800将这个帧的数据载荷(也就是P)上送给R的三层IP模块。R的IP模块收到P后,会根据P的目的IP地址192.168.200.40查询自己的IP路由表。显然,192.168.200.40这个IP地址只与IP路由表中的第二条路由匹配,该路由的出接口为GE2/0/0接口,下一跳IP地址是GE2/0/0接口的IP地址(这说明P要去往的目的网络是与GE2/0/0接口直接相连的)。

第二阶段

于是,根据这条路由的指示,P会被下发至R的GE2/0/0接口,并被封装成一个帧。假设这个帧取名为Y,那么Y帧的数据载荷就是P,Y帧的类型字段的值为0x0800,Y帧的源MAC地址为GE 2/0/0接口的MAC地址,Y帧的目的MAC地址为P的目的IP地址192.168.200.40所对应的MAC地址,(如果R在自己的ARP缓存表中查找不到IP地址为192.168.200.40所对应的MAC地址,就应该通过GE2/0/0接口向外发送ARP请求来获取该MAC地址)。注意,此时的Y帧是一个不带VLAN Tag的帧。

R通过其GE2/0/0接口将Untagged Y帧发送出去。Untagged Y帧从S1的D2端口进入S1后,会被添加上VLAN 20的Tag,并且这个Tagged Y帧会从S1转发至S3。S3会将Tagged Y帧的Tag去掉,然后将它从自己的D2端口转发出去。

PC4的Ethernet 0/0/1接口在收到S3转发过来的Untagged Y帧后,会将Untagged Y帧的目的MAC地址与自己的MAC地址进行比较。由于这两个MAC地址是相同的,所以PC4的Ethernet0/0/1接口会根据这个帧的类型字段值0x0800将这个帧的数据载荷(也就是P)上送给PC4的位于三层的IP模块。

至此,源于PC1的三层IP模块的IP报文P便可以成功的到达了PC4的三层IP模块,属于VLAN 10的PC1与属于VLAN 20的PC4之间成功的进行了一次三层通信。

细心的童鞋可能已经发现,图中的网络中,路由器R与交换机S1之间存在一个物理环路。针对这个物理环路,假设这个网络没有划分VLAN,同时也假设所有的交换机都没有运行STP,那么,当PC1发送出一个广播帧后,这个广播帧会因为R与S1之间的物理环路而导致广播风暴的产生吗?正确答案应该是不会产生广播风暴的。

通过单臂路由器实现VLAN间的三层通信

VLAN间的三层通信可以通过多臂路由器来实现,但是这种实现方法面临的一个主要问题是:每一个VLAN都需要占用路由器上的物理接口(也就是说,每一个VLAN都需要路由器从一个物理接口伸出一只手臂来),如果VLAN数目众多,就需要占用大量的路由器接口。事实上,路由器的物理接口资源是非常宝贵而稀缺的,一台路由器上的物理接口数量通常都是非常有限的,无法支持数量较多的VLAN。实际的网络部署中,几乎都不会通过多臂路由器来实现VLAN间的三层通信。

为了节省路由器的物理接口资源,我们还可以通过采用单臂路由器的方法来实现VLAN间的三层通信。采用这种方法时,必须对路由器的物理接口进行“子接口(Sub-Interface)”划分。一个路由器的物理接口可以划分为多个子接口,不同的子接口对应了不同的VLAN。这些子接口的MAC地址均为“衍生”出它们的那个物理接口的所对应的那个VLAN的缺省网关地址。子接口时一个逻辑上的概念,所以子接口也常常被称为虚接口。

如图所示,路由器R的物理接口GE1/0/0被划分成了两个子接口,分别为GE1/0/0.1,GE1/0/0.2,GE1/0/0.1对应VLAN10,GE1/0/0.2对应了VLAN20。GE1/0/0.1的IP地址为192.168.100.1/24,也就是VLAN 10的缺省网关地址;GE1/0/0.2的IP地址为192.168.200.1/24,也就是VLAN 20的缺省网关地址;GE1/0/0.1的MAC地址和GE1/0/0.2的MAC地址是一样的,都是物理接口GE1/0/0的MAC地址。

注意,在图中,交换机的Access端口有:S2的D1端口和D2端口,S3的D1端口和D2端口。交换机的Trunk端口有:S2的D3端口,S3的D3端口,S1的D3端口,D2端口和D1端口。属于VLAN 10的帧和属于VLAN 20的帧都需要被允许通过S1的D1端口。S1与R之间的链路是一个VLAN Trunk链路,该链路上运动的帧必须是带有VLAN Tag的。这也意味着,子接口GE1/0/0.1或者GE1/0/0.2向外发送的帧也必须是带有VLAN Tag的。

接下来,我们还是可以通过一个例子来说明图中的PC 1和PC 4之间是如何实现三层通信的,也就是说,PC 1是如何将一个名为P的IP报文成功的发送给PC 4的。

第一阶段

首先,P是在PC 1的网络层形成的,P的目的IP地址为192.168.200.40,源IP地址为192.168.100.10。然后,根据P的目的IP地址,PC 1会进行IP路由表的查询工作。PC 1的IP路由表中有两条路由,其中一条为缺省路由。显然,P的目的IP地址192.168.200.40只能匹配上那条缺省路由,该路由的出接口为PC 1的Ethernet0/0/1接口,下一跳IP地址为路由器R的GE1/0/0.1子接口的IP地址192.168.100.1(路由器R的GE1/0/0.1子接口也因此被称为是192.168.100.0/24或者VLAN 10的缺省网关)。

于是,根据这条缺省路由的指示,P会被下发至PC 1的Ethernet 0/0/1接口,并被封装成一个帧。假设这个帧取名为X,那么X帧的载荷数据就是P,X帧的类型字段的值为0x0800,X帧的源MAC地址为PC 1的Ethernet 0/0/1接口的MAC地址,X帧的目的MAC地址为路由器R的GE1/0/0.1子接口的MAC地址(如果PC 1在自己的ARP缓存表中查找不到IP地址为192.168.100.1所对应的MAC地址,就应该通过ARP机制去获取该MAC地址)。注意,此时的X帧是一个不带VLAN Tag的帧。

接下来,PC 1会从Ethernet 0/0/1接口将Untagged X帧发送出去。Untagged X帧从S2的D1端口接入S2后,会被添加上VLAN 10的Tag,并且这个帧的类型字段的值是0x0800,于是子接口GE1/0/0.1会将这个帧的载荷数据(也就是P)上送给路由器R的三层IP模块。

路由器R的IP模块收到P后,会根据P的目的IP地址192.168.200.40查询自己的IP路由表。显然,192.168.200.40这个IP地址只与IP路由表中的第二条路由匹配,该路由的出接口为子接口GE1/0/0.2,下一跳IP地址是子接口GE1/0/0.2的IP地址(这说明P要去去往目的未来是与子接口GE1/0/0.2直接相连的)。

第二阶段

于是,根据这条路由的指示,P会被下发至R的GE1/0/0.2子接口,并被封装成一个帧。假设这个帧取名为Y,那么Y帧的载荷数据就是P,Y帧的类型字段的值为0x0800,Y帧的源MAC地址为子接口GE1/0/0.2的MAC地址,Y帧的目的MAC地址为P的目的IP地址下192.168.200.40所对应的MAC地址(如果R在自己的ARP缓存表中查找不到IP地址192.168.200.40所对应的MAC地址,就应该通过子接口GE1/0/0.2向外发送ARP请求来获取该MAC地址)。注意,Y帧还必须带上VLAN 20的Tag。

路由器R将Tagged Y帧从其子接口GE1/0/0.2发送出去之后(从物理直观上讲,就是从GE1/0/0这个物理接口发送出去),该Tagged Y帧会到达交换机S3的D2端口。然后,S3会将Tagged Y帧的Tag去掉,然后将它从自己的D2端口转发出去。

PC 4的Ethernet 0/0/1接口在收到S3转发过来的Untagged Y帧后,会将Untagged Y帧的目的MAC地址与自己的MAC地址进行比较。由于这两个MAC地址是相同的,所以PC 4的Ethernet0/0/1接口会根据这个帧的类型字段值0x0800将这个帧的数据载荷(也就是P)上送给PC 4的位于三层的IP模块。

至此,源于PC 1的三层IP模块的IP报文P便可以成功的到达了PC 4的三层IP模块,属于VLAN 10的PC 1与属于VLAN 20的PC4之间成功的进行了一次三层通信。

猜你喜欢

转载自blog.csdn.net/weixin_40274679/article/details/106686168