前几日有同学在韩老师的会员群里面提了这样一个问题:

有个问题搞半天没弄明白,我在核心交换机上划分了几个vlan,其中一个端口与防火墙相连,防火墙配置为192.168.100.1/30,核心交换机上连接防火墙的接口没有配置IP,而是将这个接口加入到了vlan100下边,vlan100的IP是192.168.100.2/30,华为工程师说这样就行了,我不理解为什么交换机端口不用设置IP?

曾经我也有此疑问,后来随着对交换机的理解不断加深,这个问题就慢慢解决了,于是我写了一些自己的理解给这个同学,下面我把我的回答整理一下。

首先,从一个比较浅层面的角度去回答一下这位同学的疑问,这位同学不理解为什么交换机端口不能设置IP,交换机的物理接口本就不能设置IP地址(忽略接口状态转换的前提下),如果我就这样告诉这位同学的话,这个同学依然对此问题迷茫,我想从一个主观的、比较深的层次去理解一下这个问题。

我认为这位同学是因为对交换机的理解过于浅薄,我认为他的浅薄之处有三:

1.误认为交换机的二层物理接口可以配置IP地址。

2.于vlanif接口理解不深刻。

3.对交换机进行三层转换时的路由和TAG理解的不透彻。

先解决一下这位同学的第一个浅薄之处。这位同学误认为在二层接口可以配置IP地址!实际上二层是不能配置IP地址的,因为IP地址是网络层的概念(三层),而交换机的物理接口属于链路层的概念(二层),三层对二层,这岂不是“对牛弹琴”。二层的物理接口只可以有MAC地址,因为MAC地址也是二层的;IP是三层概念,因此只能配置在三层接口上,而二层交换机是没有三层物理接口的,但是三层交换机是有三层的逻辑接口的,我们可以把IP地址配置在交换机的三层逻辑接口上。上述是在没有考虑到接口状态转换的情况下,现在有一些交换机是可以进行接口状态转换的,就是把二层接口转换成三层的,仅仅需要一个命令就足够,当交换机的二层接口转换成为三层接口之后,IP地址就可以配置在接口之上了,因为这是典型的三层概念对三层接口。

然后再解决一下这位同学的第二个理解上浅薄之处。这位同学对vlanif接口没有概念。我们在说到在交换机上有三层逻辑接口时,其实这个三层逻辑接口就是vlanif接口,这个vlanif接口,这个vlanif接口到底是个什么东西呢?我们可以把这个vlanif接口理解成为单臂路由上的路由接口嵌入到了交换机内部了,至于单臂路由的路由转发过程,我会再下文当中说明。

最后再解决一下这位同学的第三理解上的个浅薄之处。其实这个最是关键,因为vlanif接口涉及到路由转发和TAG的转换。我们通过一个小实验来说明两台计算机通信时路由转发和TAG转换过程。

论router-on-a-stick和VLAN-IF_第1张图片

PC1与PC2之间的通信过程:192.168.10.1---------------192.168.20.1

第一步:PC1会对目标IP(192.168.20.1)进行与运算,发现目标IP与本地IP并不是处在同一个网段当中,所以PC1下一步会发ARP广播访问网关(192.168.10.254)的MAC地址,ARP包从G0/0/1接口进入交换机内部之后会被打上VLAN10的TAG,交换机会交此报文转发至所有属于vlan10的接口,其中G0/0/1接口属于vlan10接口,此外还有一个接口属于vlan10里面的接口,就是vlanif10接口,这个接口也属于vlan10,并且这个接口的IP就是网关,所以vlanif10接口就会通过ARP的回复包告知PC1自己的MAC地址。

第二步:PC1将网关的MAC地址封装好之后,将数据包发送到网关之上,网关收到之后会解封装至三层,看见了目标IP是192.168.20.1之后会进行路由,路由的过程就是查看自己的路由表,看有没有到达192.168.20.1的路由条目?结果会发现有一条到达192.168.20.0/24网段的路由,这个路由指向vlanif20这个接口,意思就是到达192.168.20.1/24,下一跳交给vlanif20这个接口就可以了。

第三步:当vlanif20这个接口收到数据包之后,发现目标IP是192.168.20.1,与自己是在一个网段,于是VLANIF20接口会发送ARP请求报文请求目标IP(PC2)的MAC地址,在这个过程当中数据包由原本的TAG由VLAN10变化成了VLAN20,为什么TAG要转换成VLAN20呢?因为ACCESS接口只会向外发送本帧VLAN,如果不把TAG更换的话,数据包是无法从交换机的vlanif20接口向外发送的,因为VLANIF20也有ACCESS接口属性,它的本帧VLAN也是VLAN20。


注意:VLANIF20接口只是通过G0/0/2接口进行转发,VLANIF20和G0/0/2并不是一个接口。