下面的内容摘自一年多来一直热销不断的《Cisco/H3C交换机配置与管理完全手册》图书。
许多朋友对Cisco交换机中的Access和Trunk二层端口的报文收发规则的理解都只停留在表面,根本没有真正理解其本质,这样一来在遇到问题时就无法从原理上来进行故障分析和排除。下面先介绍笔者自己总结的Access和Trunk端口报文收\发规则,然后再通过一个故障排除示例加深大家对这两种二层端口的报文收发规则的理解。
Access端口上发送报文时,会先将报文中的VLAN信息去掉(因为Access端口发送报文一般是到终端PC,PC中的网卡是不能识别VLAN标记的。还有一种情况是发送到另一个同VLAN中的Access端口,因为Access端口也不接受带有VLAN标记的报文),然后再直接发送,所以Access端口发关出去的报文都是不带VLAN标记的。表4-1是根据上面介绍的Access端口接收或发送报文规则而例举的示例(表中的VLAN 2、VLAN 3只是其中的两个VLAN例,实际上可为其他任意已激活的VLAN)。
表4-2是根据上面介绍的Trunk端口接收或发送报文规则而例举的示例(表中的VLAN 2、VLAN 3只是其中的两个VLAN例,实际上可为其他任意已激活的VLAN)。
下面通过一个因PVID设置不当造成的网络故障的排除方法来加深对Access和Trunk端口数据收发规则的理解。图4-1中,SW1与R1之间,SW1和SW2之间的连接链路都是Trunk链路,允许网络中所有VLAN的数据通过。并设置SW1的f0/2 Trunk接口的PVID=1,SW2的f0/1 Trunk接口的PVID=2,PC2~5各自属于自己的VLAN,为Access端口。现只有PC2无法上网。
图4-1 Access和Trunk端口收发规则解析示例
这时我们首先分析一下PC2在上网时发送的数据帧流程:首先PC2是向所连接的Access端口发送不带VLAN标记的帧,所连的Access端口接收到这个帧后打开它所属的VLAN 2的标记转发到达SW2的f0/1 Trunk端口,经过比较发现所收到的数据帧的VLAN标记(2)与SW2的f0/1 Trunk端口的PVID(2)一样,所以此时SW2的f0/1 Trunk端口会为把这个数据帧去掉VLAN标记转发到SW1的f0/2 Trunk端口。此时因为SW1的f0/2 Trunk端口收到的数据包没有VLAN标记,则直接把它打上与SW1的f0/2 Trunk端口PVID(1)对应的VLAN 1标记,然后错误地把它转发到VLAN 1所对应的VLAN接口上,所以造成PC2不能上网。
现在再来看一下其他几台机为什么能正常上网,以PC3为例。
PC3连接的也是SW2上的一个Access端口,发送的帧也是不带标记的,所连的Access端口接收到这个帧后打开它所属的VLAN 3的标记转发到达SW2的f0/1 Trunk端口,经过比较发现所收到的数据帧的VLAN标记(3)与SW2的f0/1 Trunk端口的PVID不一样,所以此时SW2的f0/1 Trunk端口会为直接转发这个数据帧到SW1的f0/2 Trunk端口。SW1的f0/2 Trunk端口再比较自己的PVID(1)与所收到的数据帧VLAN 标记(3),发现不一样,直接转发,所以PC3是能上网。其他的PC4、PC5与PC3的数据发送流程是一样。
从以上分析可以看出,造成PC2不能上网的根本原因就在于从访问端口发送的数据帧的VLAN标记与SW2的f0/1 Trunk端口的PVID(2)一样,所以造成转发后的数据帧是不带VLAN标记的,最后被SW1的f0/2 Trunk端口错误地把这些数据帧直接转发到了它所属的VLAN中,而不是正确地发到对应的VLAN中。这时如果把SW2的f0/1 Trunk端口的PVID设置成其他PC机在VLAN的VLAN ID,则对应的VLAN中的PC机就不能上网了。所以在这种情况下,只有把SW2的f0/1 Trunk端口的PVID设置不包括网络中PC机所在VLAN的VLAN ID(本示例中如设置为1)就可以确保各VLAN中的PC都可以上网。这样就可以得出这样一条经验:要确保网络中所有VLAN用户都能上网,则需要把Trunk端口的PVID设置成非上网用户所在VLAN的VLAN ID。
本文转自王达博客51CTO博客,原文链接http://blog.51cto.com/winda/555280如需转载请自行联系原作者
茶乡浪子