三层交换机相关知识

这次的作死之路又要开始了。这次的对象主要是交换机:还是三层的;

 

 

这是这次实验的总体用图:

现在现根据图上的标志:将所有的主机配置好;目前没有做任何vlan;所以PC1和PC3是能够互通的;

 

接下来:我想先去探索下三层交换机关闭portswitch会怎么样:

第一步:先关闭了再说:

 

因为按照图中的设计;PC1的帧如果想要到达PC2,那么就必然要经过LSW1、但是现在我关闭了g0/0/1端口的portswitch:现在pc1并不能ping通pc2;

 

 

通过百度:三层交换机的端口不仅具有二层交换功能外还有三层路由功能。三层交换机端口默认为二层口,接口配置模式下使用不带参数的 portswitch命令,把一个接口设置为2层模式。如果需要启用三层功能就需要在此端口输入undo portswitch命令。

个人理解:一开始配置三层交换机的时候,三层交换机的端口启用的是二层口的功能:所以当PC1尝试ping通PC3的时候,因为PC1会知道自己和目标主机是属于同一个网段下的。所以就会选择二层通信;而三层交换机的端口目前是二层口的功能,所以能够转发帧;但是当我把三层交换机的端口设置为三层口的时候:(等于变成了一个路由器),这个三层口隔绝了二层通信。所以当PC1再次尝试ping通PC3的时候,会发现在自己的网络下并没有主机能够恢复它的arp请求。所以就找不到目的主机;

 

所以我们现在就将就设置为路由器功能的交换机来接着做:

。。。。。。结果我发现:貌似现在并不能够对交换机的端口进行ip的设置了 :所以选择在交换机端口进行vlanif虚拟端口进行设置(貌似:交换机端口本来就不能进行ip设置;),然后还要把主机设置好默认路由:

 

[SW1-Vlanif10]int vlanif 20

[SW1-Vlanif20]ip address 10.0.1.10 24

[SW1-Vlanif20]int vlanif

[SW1-Vlanif10]ip address 10.0.0.10 24   在这里对vlan进行设置;

 

然后;我选择用PC1ping通pc2(因为不在一个网段下,看是否能够进行转发;)

事实告诉我们,并没有成功;所以我现在先选择看到底是哪儿出了问题:

先看看能不能从PC1ping通默认网关:10.0.0.1

 

 

然而并没有成功:到底是哪儿的问题;?所以准备抓包寻找原因:

 

 

(这个图抓包抓的是二层交换机与三层交换机之间的链路)发现还是出现了arp啊;但是只看到PC1发送的arp,但是么有看到任何应答:

 

所以我去百度了;

当我看到下面这段话的时候:

当接口由三层模式切换到二层模式时,接口的三层功能和标识将被禁止,采用系统的
MAC 地址。

交换机物理接口默认是二层的,如果需要配置IP地址,可以配置对应的vlanif,然后在vlanif视图下配置IP地址。
物理接口的二三层转换有一条命令:undo portswitch,但是通过这条命令把接口转化为三层后,该物理接口也不能直接配置IP地址。一般把接口转换为三层,是用来绑定×××用的。

我就知道我一开始所探究的东西是不对的:我在我之后的实验组图中看到了:关闭portswitch的作用主要是用来做链路聚合还有上面提到的绑定×××;

 

好了。上面这个实验就这样不了了之了。不过也无所谓;往这上个没有解决的问题接着探究:

 

 

对于之前探讨发现的问题:为什么不能够ping通呢?

 

这个问题其实答案很简单的:(以下个人理解:)

因为我们在三层交换机上设置了虚拟接口VLANif10 ,并在这里面设置了ip地址;(简单说就是如果我的报文没有出现在vlan10中,就不会发现该ip地址;);而我之前直接从PC1pingPC2,我没有对发送的这个帧添加任何的标签(vlan10),所以这个帧会按照默认的vlan1的方式去寻找目的ip。但是我们设置的ip地址是被添加到vlan10.所以才会显示了目的不可达的差错;

所以解决办法还是比较容易的:只要我们为发送的帧添加上我们需要的vlan的标签:

LSW2上做如下设置:

[Huawei-Ethernet0/0/1]port hybrid pvid vlan 10

[Huawei-Ethernet0/0/1]port hybrid untagged vlan 10

[Huawei-Ethernet0/0/3]port hybrid  tagged vlan all

在LSW1上做如下设置:

[ Huawei-Ethernet0/0/1]int e0/0/3

[Huawei-Ethernet0/0/3]port hybrid  tagged vlan all

利用最简单的hybrid端口:让添加了pvid标签的帧在链路上传递;这样子pc1ping通到PC2的帧都是带有了pvid=10标签,这样才能找到在三层交换机上vlan10中设置的ip地址;

 

然后我还发现了一个小问题:就是如果你undo portswitch ,你就不能配置链路状态:

http://jingyan.baidu.com/article/8275fc867c4e2946a03cf63c.html

既然所有的问题都明了了话,那就最后将整个网络ping通吧~

结果我又发现了一个小问题:

 

 

现在就只针对这一边的发送情况做一个简单的测试,结果发现:PC1竟然能够ping通PC2.正常来说这并不应该的啊,因为我的PC1带有的帧是pvid为10 的,但是我在e0/0/2上设置了只允许pvid为20的通过,然而他们还是ping通了。这不应该啊!

于是乎,我选择在e0/0/3上进行抓包(搞不懂的就抓包!)

 

 

我们可以很清楚的发现:在这条链路上有request和reply两种报文!

于是乎,我们再进一步看报文:

 

 

这个是request;我们可以看到802.1Q这个帧 id=10;

 

然而在reply报文中,我们发现了802.1Q这个帧的ID自动变成了id-=20;

正是因为这样的变化,才导致了ping报文能够通过e0/0/2的筛选进入到目标主机中;

 

个人总结:对于三层路由器来说(或者二层也行吧),当设置了一个vlanif后,在这个虚拟口中设置ip,当有帧进入到了这个虚拟口中,会对它的目标地址进行路由:选择正确的目标投递;在这里是vlanif=20的虚拟口;但是重要的是:它不仅会改变源MAC地址,还会改变802.1Q的标签的值;改变为目的虚拟口的vlan的值;

 

 

灵魂画手的×××作品:

 

不过呢,这有带来个小问题:就是vlan又被三层路由给破坏了。这个问题和之前探讨的问题都出现了相同的麻烦。反正呢,能通就是好事。

 

现在所有的都能ping通啦。

 

 

不过呢,虽然他们都能够互相ping通。不过还是有不一样的地方,就是路由路径:

 

这个是我用pc1ping通不同网段下的PC2的路径:

这个是我用pc1 PING通 相同网段下的PC3的路径;

 

 

最后总结下这个问题:其实路由这个东西很傻瓜的。他不知道目标的主机到底是不是自己同一网段还是被隔离的通一个网段;它只会知道:目标的和自己是同一网段,那就二层通信,如果目标的和自己不是同一网段,那就三层通信:

其实三层路由器的存在对于相同网段下的PC1和PC3是透明的,他根本不知道这个交换机的存在;

 

2017/3/2