Trunk技术
技术背景:
Trunk : 树干
实现方法:
IEEE 802.1Q 在 数据链路层头部 插入 tag,tag中会携带 VID等信息,说明这个数据帧来自于哪一个VLAN
端口 Access端口:不允许 数据帧 经过的时候携带tag Trunk端口:允许 数据帧 经过的时候携带tag
配置:
SW1和SW2
# VLAN vlan batch 10 20 # Access接口 interface Ethernet0/0/1 port link-type access port default vlan 10 # interface Ethernet0/0/2 port link-type access port default vlan 20 # Trunk接口 interface GigabitEthernet 0/0/1 port link-type trunk port trunk allow-pass vlan 10 20
- 通信测试
- wireshark 抓包:
vlan 10
vlan 20
数据通信过程:
PC1封装了一个发往PC3的数据帧
PC1将数据帧发送给 SW1的1号接口,SW1的1号接口,接收数据帧,解封装到数据链路层,打上一个 vid = 10的标签;交换机查看源MAC地址是AA,此时会学习这个MAC地址到 vlan10的MAC地址表中:
查看目标MAC地址是 CC,此时会在 VLAN10的MAC地址表中查找CC对应的接口为 24。此时,数据帧会携带 vid=10的tag通过配置了trunk的24接口。
SW2接收该数据帧
由于24接口为Trunk类型,并且也允许 vlan 10 20 通过,此时会直接接收 这个带tag的数据帧,交换机接收数据帧,解封装数据链路层,查看源MAC地址是 AA, 会将AA和 24接口的对应关系,写到 vlan10的MAC地址表中:
交换机查看目标MAC地址为CC,在vlan10的MAC地址表中,查找 CC对应的接口为1号接口,1号接口类型为 Access,数据帧会从1号接口剥离掉tag,然后发出,被PC3接收了。
Native VLAN
Trunk链路pvid默认是1,vlan1就是Trunk链路的native vlan,也叫做 本征VLAN。
本征VLAN的数据,在经过Trunk链路的时候,不带Tag。
Trunk端口发送数据帧时,将要发送数据帧的VLAN标记与自己的PVID进行比较,如果与PVID相同,则去掉后再发送。
如果与PVID不相同,则直接发送,
为啥 VLAN1的数据经过Trunk链路的时候可以不打Tag? <SW2>display port vlan Port Link Type PVID Trunk VLAN List ------------------------------------------------------------------------------- Ethernet0/0/1 access 10 - Ethernet0/0/2 access 20 - GigabitEthernet0/0/1 trunk 1 1 10 20
access 接口属于哪个VLAN,它的PVID就是多少,Trunk接口的PVID默认是1。
vlan1的数据在经过Trunk的时候,可以不带Tag,是不是因为 Trunk接口的PVID是1? 如果Trunk链路的PVID是10,是不是VLAN10的数据在经过Trunk链路的时候,也可以不带Tag。
为什么要有 Native VLAN?
如果某个vlan的流量非常大,为了减小交换机转发数据的压力,就可以让这个vlan的数据,在经过Trunk链路的时候,不携带Tag。就可以把Trunk链路的PVID改成这个VLAN的ID,于是,这个vlan就是这个Trunk接口的Native VLAN。
攻击行为- VLAN跳跃攻击
封装一个 带有双Tag的帧,外面一层的vlanID和access接口、Trunk接口的pvid都相同,能够让Access接口接收,并且在离开Trunk链路的时候,去掉最外层的Tag,这样,数据帧就会发送给 和内层Tag 的vid相同的vlan,实现VLAN的跳跃攻击!
左边数据帧的格式应该为:【带vlan10 20的tag】
右边从SW1-G0/0/1出来的数据帧格式应该为:【带vlan20的tag】
在SW2-E0/0/2的数据帧格式:【不带tag】