在研究这个工作原理之前大家请参考这么一个实验https://blog.51cto.com/14451009/2427841(GNS3(Cisco)利用trunk实现跨交换机配置vlan)。 在这一个成功实验的基础之上,我们利用抓包软件深入研究Trunk功能的工作原理。

   请看下图,下面已经实现了一个跨路由利用trunk把PC1跟PC3划分到vlan 10,把PC2跟PC4划分到vlan20。这篇博客的主要目的是剖析PC1给交换机1发送的数据帧跟交换机1给交换机2传输的数据帧有什么不一样,现在我先用抓包工具抓一个PC1给交换机1发送的数据包看一看。


 利用抓包工具剖析Trunk工作原理_IEEE802.1Q

     这边使用PC1给PC3用ping -t进行了一个长ping命令, 然后我们点击PC1跟交换机1之间连接的网线,利用Wireshark抓包工具抓取一个数据包分析一下,并且到两个交换机之间的网线再抓一个数据,然后两个数据包做一个对比。

利用抓包工具剖析Trunk工作原理_IEEE802.1Q_02

利用抓包工具剖析Trunk工作原理_vlan_03

      这边是PC1到交换机1之间的数据。

  

利用抓包工具剖析Trunk工作原理_vlan_04

    这边是两个交换机之间的数据。

利用抓包工具剖析Trunk工作原理_交换机_05

    对比上面两张图我们知道了,数据在经过交换机1的时候已经被IEEE802.1Q协议给它贴上了一个ID:10的标签,我们再对比路由器2到PC3之间的数据。我们发现原来经过交换机1出来给数据贴上的标签不见了。

利用抓包工具剖析Trunk工作原理_vlan_06

   由此可以得出结论,在跨交换机使用trunk功能时,当交换机1收到来自vlan 10中PC发送数据的时候会自动给它贴上一个属于vlan 10的一个标签,形成一个只有交换机能够识别的封装了IEEE802.1Q协议的数据格式,而这种格式不可以被PC机所识别。所以在交换机2收到来自交换机1发送的带有封装了IEEE802.1Q协议的数据后,它会分析这是发往vlan 10还是发往vlan 20的数据。因为之前交换机1已经给它贴上了vlan10的标签,所以交换机2就知道数据应该发往vlan 10。因为封装了IEEE802.1Q协议的数据不能够被PC机所识别,所以在这里交换机2要把封装在数据上的标签给它去掉,最终数据从PC1发送到了PC3而不会发送到vlan 20 的PC2 跟PC4。