首先聲明我沒研究過交換機底層實作,以下結論都是我的個人了解。不保證正确,但是有助于了解trunk和access。以下言論可能你在哪裡都沒有看到過。
先說觀點:我認為trunk與access并沒有本質的差別。
access收到帶vlan的幀和自己所屬vlan比較,相同轉發,不相同丢棄。(1)
trunk 收到帶vlan的幀和自己所屬vlan比較,相同轉發,不相同丢棄。(2)
access收到不帶vlan的幀,打上自己所屬vlan的tag進行轉發。 (3)
trunk 收到不帶vlan的幀,打上自己所屬vlan的tag進行轉發。 (4)
下面對以上四句話進行解釋:
(1)可在模拟器做如下實驗
sw1的1口配置成access劃入vlan 10,連接配接pc1,ip配置為10.0.0.1/24
sw1的2口配置成trunk并允許所有vlan通過,連接配接sw2的1口。
sw2的1口配置成access劃入vlan 10,連接配接sw1的1口。
sw2的2口配置成access劃入vlan 10,連接配接pc2,ip配置為10.0.0.2/24

此時pc1 ping pc2,資料進入sw1的1口打上vlan10的tag,由于sw1的2口trunk允許此vlan通過會轉發給sw2的1口(此時不會去掉tag),此時滿足上面的第(1)句(access收到帶vlan的幀和自己所屬vlan比較,相同轉發,不相同丢棄。),會把資料轉發給2口,此時在sw2的2口上抓包可以看到pc1發送的arp請求和pc2的arp應答。但pc1無法ping通pc2原因後面會說明,到此僅為說明access收到帶vlan的幀的處理方法。
(2)這句需要解釋的有兩點
第一,trunk所屬的vlan是一種不規範說法,或者說沒有這種說法,實際上就是本征vlan,或者說trunk的pvid。隻是說成trunk所屬的vlan比較好了解。
第二,後面的說法并不嚴謹,隻是為了和(1)做比較,實際上trunk收到帶vlan的幀和自己的vlan(pvid)不相同,則比較是否是自己允許通過的vlan,是轉發,不是丢棄。
總結:trunk配置成隻允許本征vlan(pvid)通過此時和access并無不同之處。
(3)這句無需解釋就是正常的處理過程
(4)這句還可以參考(1)中的實驗
pc2到pc1的通信過程,pc2發資料給pc1時,sw2的2口收到資料打上vlan10的tag轉給sw2的1口,sw2的1口在發送時去掉tag轉發,此時sw1的2口(trunk)收到不帶vlan的幀,打上自己的pvid,此時自己的vpid是1,而pc1屬于vlan10是以pc1無法ping通pc2,因為資料回不去。此時修改trunk的pvid為10,pc1和pc2即可互相ping通(access和trunk口相連可以實作通信也變相說明兩者無本質差別)。
由上可見,trunk和access并無本質差別,所謂的本征vlan,native vlan,pvid本質上就是trunk所屬的vlan而已。trunk和access在處理資料時也沒有本質上的差別,過程上完全相同。隻是access不允許多個vlan通過,是以處理資料時比trunk少了一步判别。
所屬vlan | 允許通過vlan | |
---|---|---|
access | 隻能 1個 (即劃入的vlan) | 隻能1個即劃入的vlan |
trunk | 隻能1個(即pvid) | 任意個 |
之是以設計成這樣,我覺得和底層的實作有關,access和trunk在程式處理過程中是一樣的,隻是access少了一步判别而已。
再次說明,以上隻是本人猜測。不對之處還請大家指出,多謝!