前言
以太网端口三种链路类型分别是,access,trunk,hybrid,初学的时候遇到了很多困惑,看似简单的概念还需要深入了解一下。需要知道的是,三种端口本质上没有太大区别,读者千万不要走入这样的误区,例如不要trunk端口必须是交换机和交换机之间用到,它们本质都是为转发数据而存在的。
众所周知,我们初次接触这几个端口类型概念的时候,总会有这样的认知:
ACCESS端口主要用于个人PC的连接,当然也包括一些网口设备,打印机呀,考勤机(它只能属于一个VLAN)
Trunk端口主要用于交换机与交换机之间的连接(它可以接受和发送多个vlan)
Hybrid端口既可以用于交换机和交换机连接,也可以用于和个人PC连接选择上更加灵活。(它可以接受和发送多个VLAN)
注:trunk和hybrid端口的唯一区别是,hybrid在端口发送数据的时候可以允许多个vlan报文不带标签,而trunk端口只允许默认的PVID发送vlan报文不打标签。
然后,我们会不会有这样的疑惑?那么trunk端口可不可以连接个人PC呢?答案是肯定的,是可以连接的。至于怎么连,先卖个关子。说到此处,我们又不得不提到,PVID/tag/untag的概念
untag就是普通的Ethernet报文,PC机的网卡是可以识别这样的报文; tag报文结构的变化是在源mac地址和目的mac地址后,加上了4bytes的vlan信息,也就是vlan tag头,一般来说这样的报文普通PC机的网卡是不能识别的。
简单明了来说就是,不管是ACCESS还是trunk还是hybrid端口,只要你这些下面连了普通的PC,那么你端口就要想办法让PC机可以识别,也就是说,你们端口给我发来的报文必须是untagged,我才可以识别。
而交换机和交换机相连的时候,链路上运动的报文都是带标签的,交换机和PC相连的时候,链路上运动的报文都是不带标签的
首先说端口的PVID吧,这个PVID是不论Access,trunk,hybrid都会有他们自己的PVID,PVID存在的意义是什么呢?端口接收数据的时候,如果收到的是untag报文,那么就会打上缺省的PVID标签。端口发送数据的时候,如果tag=PVID,那么就会去tag发送数据,变成untag报文,也就是说变成了PC能识别的报文。
access端口:PVID值就是端口所属VLAN的值,如果属于VLAN1,那么PVID就是1,。如果属于VLAN2,那么PVID就是2.
trunk端口:默认的PVID值是1,如果不修改的话。(缺省)
hybrid端口:默认的PVID值是1,如果不修改的话。(缺省)
我们假设这样的一个场景:
交换机的一个端口和PC机相连:
1:端口是access,那么我们知道,access的PVID值就是端口所属vlan,
access端口收报文
Access端口接收到电脑PC1的一个报文,首先判断是否有VLAN信息:如果没有则打上端口的PVID(也就是默认VLAN,vid), 并进行交换转发;如果有则丢弃
access端口发报文
Access端口发报文,将报文的VLAN信息剥离, 直接发送出去,这样就PC1就可以识别这个untag报文,并通讯。
Trunk端口收报文
PC2收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,此时PVID默认值为1,然后交换转发;如果有则判断该Trunk端口是否允许该VLAN的数据进入:如果可以则转发,否则丢弃;
Trunk端口发报文
比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,如果不相等则直接发送;
假如此时,我想让trunk端口能接收发送VLAN10的报文,但是它端口的PVID值又为1,那么怎么才能发送vlan10的报文,这时候就需要修改默认的PVID值1,修改为10.
前文说到,交换机和交换机之间用trunk,修改了PVID的值,交换机至PC居然也可以用trunk端口,是不是很神奇?事实上,华为AC+AP上线的过程中,就是采用的这种方式,端口采用了trunk方式,AP相连的端口则设置了对应的PVID。
hybrid端口和trunk端口接收数据都是一样的,唯一不同的是,hybrid端口发送数据允许多个VLAN不带标签,trunk端口只允许默认的PVID不大标签。(详细请看下面代码例子)
我以华为的代码来举例:
access接PC(应用范围就是,普通的PC,打印机,考勤机,AP等各种终端设备)
#interface g1/0/1
#port link-type access
#port default vlan 10
access接交换机(应用范围就是,交换机和路由器相连的时候,让vlan10的IP地址段和路由器接口地址在同一网段,他们就可以通信)
#interface g1/0/1
#port link-type access
#port default vlan 10
trunk接PC(应用范围就是,AP上线的时候可以用这种方式,当然也可以用access)
#interface g1/0/1
#port link-type trunk
#port trunk allowed pass vlan 10
#port trunk pvid vlan 10
trunk接交换机(应用范围就是交换机至交换机相连,此时PVID的值没有意义,可以设置为任意值,因为此时链路上运动的都是tag标签)
#interface g1/0/1
#port link-type trunk
#port trunk allowed pass vlan 10
hybrid接PC
#interface g1/0/1
#port link-type hybrid
#port hybrid pvid vlan 10
#port hybrid untagged vlan 10 20 30 //注意,此时,hybrid和trunk的不同就体现出来了,有了这条命令后,这个端口可以同时和vlan10 ,vlan20 ,vlan30的端口通信
hybrid接交换机
#interface g1/0/1
#port link-type hybrid
#port hybrid tagged vlan 10 20 30 //注意,此时,因为交换机和交换机之间运动的都是tagged所以,要给所有的出入端口的都要打上tag标签,此时hybrid和trunk端口作用一样,可以同时收发多个vlan
总结一下,我们在考虑用什么端口的时候,总是应该考虑终端设备是什么,是普通的电脑,那么我们就要通过办法让untag报文运动,是交换机,我们就要让它上面运动的都是tag报文。
对于access来说,它本身只属于某个vlan,它的PVID也是它自己
对于trunk来说,它可以收多个vlan的报文,但是我们要设定它的PVID值,这样,它端口接收的报文才会打上PVID的值进行转发,它发送报文的时候,如果PVID=VID,那么就会去tag发送,从而被普通PC识别。
hybrid的端口更加灵活,对于这样的场景可以用hybrid端口
A,B,C三个部门,需求,A与C,B与C互相访问,AB不能互相访问,那么此时我们就可以用灵活的hybrid端口来实现
具体就是,在连接PC的这段,分别属于ABC三个vlan10 20 30。
PC1(部门A)所连端口,port hybrid untag vlan 10 30,设定PVID 值为10
PC2(部门B)所连端口,port hybrid untag vlan 20 30,设定PVID 值为20
PC3(部门C)所连端口,port hybrid untag van 10 20 30 ,设定PVID 值为30
如果是垮交换机的话,那么我应该在两个端口分别,port hybrid taged vlan 10 20 30 效果等同于,port trunk allowe-pass vlan 10 20 30
小TIP:一般交换机和交换机相连的时候,都默认禁止vlan1通过,因为会产生广播风暴。
这次的博客就到这里啦,我也是个初学者,路过的大神如果发现有不敢苟同的地方,还请评论下方指点,小弟感激不尽。
真诚地恳请指点2019.07.22/GM