本文主要是介绍单臂路由Trunk详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
单臂路由作为CCNA的重点之一,有着非常重要的地位。这几年随着设备的更新,已经不太用二层交换和路由器所组成的单臂路由了,三层交换机配合二层交换机的拓扑,已经成为主流,这里先说道这里,回到主题
看拓扑:
PC1和PC2属于不同vlan,最终需要PC1和PC2能互通。
Vlan配置和IP的配置我这里省略了,不懂的可以看一下之前的博客。
我这里贴一下预配置检查
SW1#sh vlan-s bri
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Fa0/0, Fa0/3, Fa0/4, Fa0/5
Fa0/6, Fa0/7, Fa0/8, Fa0/9
Fa0/10, Fa0/11, Fa0/12, Fa0/13
Fa0/14, Fa0/15
10 VLAN0010 active Fa0/1
20 VLAN0020 active Fa0/2
1002 fddi-default active
1003 token-ring-default active
1004 fddinet-default active
1005 trnet-default active
vlan配完,测试PC1与PC2不通,这个肯定是不通的,PC的网关也没有,就算没有Vlan也通不了。。。。。
看单臂路由配置:
思路:通过R1交换功能,来实现路由
1、SW1需要把两个vlan的信息传输出去,那就是承载不同vlan的信息,自然需要Trunk
SW1(config)#int f0/0
SW1(config-if)#sw mo tr
*Mar 1 00:47:26.587: %DTP-5-TRUNKPORTON: Port Fa0/0 has become dot1q trunk
SW1(config-if)#sw tr enc dot
SW1(config-if)#no sh
2、R1接口配置,通过子接口配置单臂路由
要起子接口,父接口必须先开启
R1(config)#int e0/0
R1(config-if)#no sh
//vlan10 对应e0/0.10,这个.10只是个名字
R1(config-if)#int e0/0.10
R1(config-subif)#ip add 1.1.1.100 255.255.255.0
配置ip报错,查看以下报错信息,他告诉我必须先配置封装协议,才能实现IP Routing功能。
% Configuring IP routing on a LAN subinterface is only allowed if that
subinterface is already configured as part of an IEEE 802.10, IEEE 802.1Q,
or ISL vLAN.
配置封装
R1(config-subif)#encapsulation dot1Q ?
<1-4094> IEEE 802.1Q VLAN ID
后面还需要跟所对应的Vlan ID
R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip add 1.1.1.100 255.255.255.0
R1(config-subif)#no sh
R1(config-subif)#exi
第一个子接口配置完成,接下来第二个
R1(config)#int e0/0.20
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip add 2.2.2.100 255.255.255.0
R1(config-subif)#no sh
查看以下R1的路由表
R1#sh ip rou
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
C 1.1.1.0 is directly connected, Ethernet0/0.10
2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, Ethernet0/0.20
可以发现,子接口的网段已经被添加进了路由表,然后给PC1和2配置网关。
-------------------------------------------------------------------------------------------------------------------
好了,这时候你就会发现,PC1和PC2能互通了。网上的其他教程基本也就到这里结束了,嘿嘿,我告诉你,这里才只是开始。有没有想过这样一个问题,PC1是属于VLan10,PC2是属于vlan20,路由器只是简单的转发么?不是说不同Vlan,会有TAG么?他到底是怎么做到的呢?我来简单的证明一下,工具自然是wireshark。我要抓SW1 f0/0《==》R1 e0/0这条线路。
实验步骤和思路:从PC1pingPC2,PC2会收到ICMP请求,PC1会收到ICMP回复。(贴图不是很方便,我就把步骤和结果写的详细一下)
我从PC1就发一个ICMP包给PC2,从抓包的结果上看,可以看到两条从1.1.1.1发送给2.2.2.2的ICMP request,(这个应该可以理解,PC1先发给R1,R1再发给PC2,所有请求有两条),发现再原地址后面添加8个字节802.1Q virtual lan数据,里面有两个字节是用来表示VlanID的,第一个报文显示的是10(从PC1发送给R1),第二个显示的是20(从R1发送给PC2),从这里我们可以发现,R1收到从PC1发送的数据报文已经,会解封装,然后再重新封装发出,他会对这个vlan的值进行修改。我假设一下过程,R1收到数据包,拆掉vlan TAG标记,然后查询到路由,因为路由是从子接口学习到的,而子接口已经绑定了vlan,(不明白的回顾一下之前的配置)所以会重新打上vlan TAG标记,发送出去。
可以有些细节讲的不太对,大致应该就是这样。
-----------------------------------------------------------------------------------------------------------------
单臂路由最常见的就在这里了,但是接下来我还要讲第二种。我先配,配玩再说为什么会出现第二种,这里需要把R1改成一个三层交换机,起名叫做SW2
其他配置都不动,我们单单配置SW2
1、讲f0/0配置为Trunk
SW2(config)#int f0/0
SW2(config-if)#switchport trunk encapsulation dot
SW2(config-if)#no sh
SW2(config-if)#end
配置完查看一下
SW2#sh int tru
Port Mode Encapsulation Status Native vlan
Fa0/0 on 802.1q trunking 1
Port Vlans allowed on trunk
Fa0/0 1-1005
Port Vlans allowed and active in management domain
Fa0/0 1
Port Vlans in spanning tree forwarding state and not pruned
Fa0/0 1
2、添加Vlan
SW2#vlan da
SW2(vlan)#vlan 10
VLAN 10 added:
Name: VLAN0010
SW2(vlan)#vlan 20
VLAN 20 added:
Name: VLAN0020
SW2(vlan)#exi
APPLY completed.
Exiting....
给Vlan配置IP,作为该Vlan所有终端的网关
SW2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
SW2(config)#int vlan 10
SW2(config-if)#ip add 1.1.1.100 255.255.255.0
SW2(config-if)#no sh
SW2(config-if)#int vlan 20
SW2(config-if)#ip add 2.2.2.100 255.255.255.0
SW2(config-if)#no sh
SW2(config-if)#end
----------------------------------------------------------------------------------------------------------------
注意:
1、可以发现我这里并没有创建Vlan,我只是int vlan xx,再某些机器上,你输入这条命令的时候他会自动为你创建vlan,但是并不是全部,而且有的机器根本就不支持(包括通过vlan xx创建vlan)。
2、我是用的GNS3做的第二个实验,我就发现一个BUG,你可以看出来我的机器是支持int vlan这条命令的,但是实际上查看vlan的时候,你是看不到这几个vlan的,所以我建议,还是先手动创建好vlan,做完最后再检查一下,以防万一。
*如果你忘记了创建vlan但是上面的命令你都成功配完了,我可以提供一个排查思路,去检查接口,sh ip int bri,去看vlan的接口你会发现,status是up但是protocol是down,等你创建好vlan,protocol就up了。
------------------------------------------------------------------------------------------------------------------
vlan配置完毕,查看一下路由表,如果显示没有路由只有ARP table,记得开启路由功能
SW2#sh ip rout
Gateway of last resort is not set
1.0.0.0/24 is subnetted, 1 subnets
C 1.1.1.0 is directly connected, Vlan10
2.0.0.0/24 is subnetted, 1 subnets
C 2.2.2.0 is directly connected, Vlan20
这时候就配置完成了,PC1和PC2就能通信了。
-----------------------------------------------------------------------------------------------------------------
方法二和方法一,异曲同工。一个给vlan配置ip,一个给接口配置ip,乍一看,差不多么,不就换了一个三层交换机么。其实仁者见仁,智者见智。现在大部分公司架构,介入层,核心层,转发层(或者防火墙),核心层是用来转发数据的,大部分用的都是三层交换设备,而再上一层转发曾,往往接的都是防火墙,主要就是同外部通信的,而且三层交换设备,相较于路由器而且,更加多变,吞吐量比老款的纯路由器高很多(这个我没有考证,网上是这么说的,而且我觉得这点不是很对。。。)反正就这样,大家还是实际考虑为主。
-------------------------------------------------------------------------------------------------------------------
你以为到这里就结束了?no no no今天还有一个点,直接看图
设置如下,就问一个问题PC0和PC1通不通
PC0 ip:1.1.1.1/24
PC1 ip:1.1.1.2/24
Switch0 f0/1 vlan10 mode access f0/2 vlan10 mode access
Switch1 f0/1 vlan20 mode access f0/2 vlan20 mode access
没了 没有Trunk 什么也没有 到底通不通?
自然是通,为什么?不是不同的Vlan么?
注意,Vlan只是划分本地的路由条目,多个vlan建立在一台交换机上的时候,他是通过将接口的mac地址进行划分,但是并不会加上Vlan Tag,VLAN TAG只会在你配置了封装协议之后也就是起了Trunk以后,进行添加。而我这里没有Trunk,自然也就不会有Vlan TAG(dot1q),switch0 发现f0/2也是vlan10,自然会把同属于vlan10的f0/1接口收到的数据转发出去,通过抓包会发现就是一个普通的数据包,没有关于vlan的信息,switch1也是同样。
总结一句话:vlan划分本地接口!!!
假设配了Trunk会怎么样呢?那就不会通了,因为通过Trunk发出去以后就会带上Vlan TAG,而两个路由器的Vlan ID不一样,自然是不会通的。假如我再改一下,把两个SW的vlan号改成一样的,试一下,会不会通呢?能通。就是因为vlan id相同了。可以发现Vlan并不能控制外部划分,只能控制内部,一旦数据发出以后,就是通过vlan id来区分。拥有相同的vlan id,就能通信了。这里说一下,dot1q的vlan Tag是打在二层数据帧,目标地址+源地址+type之后的8位。
-----------------------------------------------------------------------------------------------------------------
好了,这里讲了这么这么多,很重要,都是要掌握的,没有只需要了解的,掌握的越深刻越好。下一次,就是STP了,这个也很重要的。。。。。。
这篇关于单臂路由Trunk详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!