要使网络设备能够分辨不同的VLAN报文,需要在报文中添加标识VLAN的字段。由于普通交换机工作在OSI模型的数据链路层,只能对报文的数据链路层封装进行识别。因此,如果添加识别字段,也需要添加到数据链路层封装中。IEEE于1999年颁布了用以标准化VLAN实现方案的IEEE802.1Q协议标准草案,对带有VLAN标识的报文结构进行了同一的规定。
一.Ethernet II帧及用IEEE802.1Q协议进行封装的帧结构
传统的以太网数据帧在目的MAC地址和源MAC地址之后封装的黑丝上层协议的类型字段,如下图所示。
IEEE802.1Q协议规定在目的MAC地址和源MAC之后封装4字节的VLAN的Tag,用以标识VLAN的相关信息,如下图所示。
其中VLAN Tag 包含四个字段,分别是TPID(Tag Protocol Identifier标签协议标识符)、Priority、CFI(Canonical Format Indicator,标准格式指示位)、VLAN ID。如下图
1. TPID用来判断本数据帧是否带有VLAN Tag,长度为16bit,缺省取值为0x8100。
2. Priority表示报文的802.1P优先级,长度为3bit,
3. CFI字段标识MAC地址在不同的传输介质中是否以标准格式进行封装,长度为1bit,取值0表示MAC地址以标准格式进行封装,非1表示非标准格式进行封装,缺省取值为0。 4. VLAN ID标识该报文所属VLAN的编号,长度为12bit,取值范围为0-4095.由于0和4095为协议保留取值,所以VLAN ID 的取值范围为1-4094。
网络设备利用VLAN ID来识别报文所属的VLAN,根据报文是否携带VLAN Tag以及携带的VALN Tag值,来对报文进行处理。
二. 交换机三种端口类型:Access、Trunk和Hybrid
1. Access 端口:只能属于1个VLAN,一般用于连接计算机端口。
2. Trunk端口: 可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,一般用于交换机之间。
3. Hybrid端口:可以允许多个VLAN通过,可以接收和发送多个VLAN报文可以用于交换机之间的连接,也可用于连接用户的计算机。
三. PVID及VID介绍
PVID: PVID英文解释为Port-base VLAN ID,是基于端口的VLAN ID,一个端口可以属于多个vlan,但是只能有一个PVID,收到一个不带tag头的数据包时,会打上PVID所表示的vlan号,视同该vlan的数据包处理,所以也有人说PVID就是某个端口默认的vlan ID号。
VID: VID(VLAN ID)是VLAN的标识,用于交换机判断不同的VLAN 。
四. 三种端口收发报文流程
1.三种端口收发报文表
收报文 发报文 Access端口 Trunk端口 Hybrid端口 收到一个报文,判断是否有VLAN信息;如果没有则打上PVID,并进行交换转发;如果有则直接丢弃(缺省) 收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发;如果有则判断该端口是否允许该VID进入,如果可以则转发,否则丢弃。 判断是否有VLAN信息:如果没有则直接打上端口的PVID,并进行交换转发,如果有则判断该端口是否允许该VLAN进入如果可以就转发否则丢弃 将报文的VLAN信息剥离,直接发送出去 比较端口的PVID和将要发送报文的VLAN,如果两者相等则剥离VLAN信息再发送;如果不相等则直接发送。 判断该VLAN在本端口的属性(untag和tag),如果是untag则剥离VLAN信息再发送,如果是tag则直接发送
2.三种端口收发报文图
五.应用举例
状态图
PVID和VID表
在状态图中,默认所有端口都是Access的端口并且报文都是untag的。
情景一:位于VLAN10下面的port1中有一台主机A要发送一个报文给VLAN20
下面port9中的主机B,默认A有B的MAC地址。
报文交换过程
1. A发送一个请求报文,该信息被port1收到,交换机收到此数据后发现并没有VID信息,于是就给该帧加上了端口属性PVID,而此时它的PVID从以上的表中可以得知为10,即是说此端口是属于VLAN10的, 2. 然后交换机进行内部交换,又根据PVID所指明的信息把此帧发送给了相应的vlan10里面,而从上面的VID表中可得知,vlan10里面没有有端口9-16的MAC地址信息,(因为表中表明端口9-16并不属于vlan10,于是交换机不再进行转发,请求失败,A、B并不能进行连接。
情景二:
主机A要发送一个请求报文给VLAN30里的端口18下面的主机C。 报文交换过程
1. 主机A封装一个请求报文,已知目的主机C的MAC地址,此报文被交换机的port1收到,因为是ACCESS状态,默认没有VID信息,于是端口1给帧加上了PVID tag,接下来该帧送到了交换机内部进行内部交换。
2. 交换机查看此帧,发现PVID属于VLAN10,于是把帧送到了VLAN10,而此时根据上面的VID表可得知17-20口属于VLAN10,于是参看MAC地址-端口映射表,知道此MAC地址指明的端口是port18,于是把帧发送到了port18, 3. port18接到帧后将PVID tag剥离,直接发送给下面的主机,属于untag状态,主机C收到了请求,发现请求的目的IP和MAC地址均是自己,于是决定回应,于是封装了一个回应报文,目的IP和MAC为主机A。
4. 该报文被端口18收到,因为同样处于ACCESS状态,没有vid,于是默认的加上了PVID tag,然后送给了内部交换,交换机处理该数据时发现该帧属于VLAN30,于是交给了VLAN30,此时从上面的表中可得知端口1-8,9-16,17-20都处于VLAN30,于是查看MAC地址-端口映射表,知道了此MAC地址对应的端口是1号端口,于是把该帧送给了端口1,端口1收到后剥离PVID tag,,送往主机A,此时主机A收到的信息是不带TAG的,因为同样道理,处于ACCESS状态下的端口发送、接受帧都是不带TAG的。
因篇幅问题不能全部显示,请点此查看更多更全内容