这两天在研究openWRT的网络接口问题,涉及到了交换机的一些概念,主要是跟VLAN相关的,在此总结一下。
VLAN在802.11Q中定义,802.11Q帧格式如下图所示:
交换机示意图如下图所示:
交换机的端口有三种类型,access,trunk,hybrid(其实应该还有一种模式,透传模式,在此不做研究)。
access端口用于连接终端设备,比如电脑,因为终端设备是无法处理802.1Q数据帧的,因此进出access端口的报文都必须是没有vlan标记的(其实进入access端口的报文好像也可以有TAG,只要与端口的PVID相同就可以,这种情况下报文会原封不动地进入到交换机内部)。
trunk端口用于连接交换机与交换机之间(可能也可以是路由器),主要用于设备与设备之间的互连。
hybrid端口相当于access与trunk的合体,既可以连接终端设备,也可以连接交换机。
不同的VLAN使用不同的VID(VLAN ID)区分,交换机的VID有两种类型:
普通VID,即Vlan ID,用于区分不同的VLAN。
PVID(Port-base Vlan ID),不同厂商的叫法不一样,也有叫Native VLAN ID的,与普通VID有本质区别,这是一个端口的属性,一般初始状态下所有端口的初始PVID都是1。
对于hybrid端口,还有一个特别的概念,叫tagged端口和untagged端口,用于规定从交换机是否去掉离开的报文的TAG。这是对端口所属于的VID的一个概念,同一个物理端口中可能对于VID1是tagged端口,但是对于VID2却是untagged端口。
tagged端口,报文离开交换机时不去掉TAG。
untagged,离开的报文带有的TAG为untagged VID时,报文离开交换机时去掉该TAG。
access端口只属于一个VLAN,即对应该端口的PVID的VLAN,而trunk与hybrid端口可以同时在多个VLAN中,称为VID组。
无论原始报文是否有VID,进入到交换机内部的报文一定是有TAG的。而从交换机出去的包根据端口设置的不同,可能有、也可能没有TAG。
下面总结一下交换机对进出的报文的VLAN TAG的处理。
对于进入到交换机内部的数据包,只需要区分access端口与非access端口,我们认为access端口的VID组中只有一个VID,值等于PVDI。
当报文没有TAG时,则打上端口的PVID后进入交换机内部。
当报文有TAG时,如果该TAG在VID组中(注意access端口的VID组中值有PVID),则允许报文原封不动地进入交换机,否则丢弃该报文。
对于离开交换机的报文,需要分别对待access,trunk与hybrid端口。
access端口,如果报文的TAG等于端口PVID,则去掉TAG后发送出去,否则丢弃该报文。
trunk口,如果报文的TAG等于端口PVID,则去掉TAG后发送出去,如果不等于端口的PVID,但是在端口的VID组中,则将报文原封不动地发送出去,否则丢弃该报文。
hybrid端口,与trunk端口基本相同,唯一的不同是,每一个VID可以设置为tagged或者是untagged,如果报文的TAG为某一个被设置为untagged的VID时,则去掉TAG后再发送出去。
本人不是交换机职业玩家,如有错误,请大家指出。还有,我的手工画是不是很萌!
原文地址:http://jlins.blog.51cto.com/4487484/1587331