1. 程式人生 > >access、trunk、vlan

access、trunk、vlan

乙太網埠有 3種鏈路型別:access、trunk、hybird

Access型別埠只能屬於1個VLAN 般用於連線計算機 埠; 

Trunk型別埠可以允許多個VLAN通過,可以接收和傳送多個VLAN 報文,一般用於交換機之間的連線;

Hybrid型別埠可以允許多個VLAN通過,可以接收和傳送多個VLAN 報文,可以用於交換機的間連線也可以用於連線使用者計算機。

Hybrid埠和Trunk埠在接收資料時處理思路方法是一樣的,唯一區別的處在於傳送資料時:Hybrid埠可以允許多個VLAN報文傳送時不打標籤,而Trunk埠只允許預設VLAN報文傳送時不打標籤。

預設VLAN:

Access埠只屬於1個VLAN 所以它預設VLAN就是它所在VLAN不用設定;

Hybrid埠和 

Trunk埠屬於多個VLAN,所以需要設定預設VLAN ID。預設情況下 Hybrid埠和Trunk埠預設VLAN為VLAN 1;

如果設定了埠預設VLAN ID當埠接收到不帶VLAN Tag報文後 則將報文轉發到屬於預設VLAN的埠;當埠傳送帶有VLAN Tag報文時,如果該報文 VLAN ID和埠預設VLAN ID相同,則系統將去掉報文VLAN Tag,然後再發送該報文。

注:對於華為交換機預設VLAN被稱為“Pvid Vlan” 對於思科交換機預設VLAN被稱為“Native Vlan”

交換機接口出入資料處理過程:
Acess埠收報文:收到個報文判斷是否有VLAN資訊:如果沒有則打上埠 PVID並進行交換、轉發,如果有則直接丟棄(預設) Acess埠發報文:將報文VLAN資訊剝離直接傳送出去

trunk埠收報文: 收到一個報文,判斷是否有VLAN資訊:如果沒有則打上埠 PVID 並進行交換轉發,如果有判斷VLAND ID是否在該trunk的允許範圍內,如果在範圍內則轉發,否則丟棄

trunk埠發報文:比較埠PVID和將要傳送報文VLAN資訊如果兩者相等則剝離VLAN資訊再發送,如果不相等則直接傳送

hybrid埠收報文: 收到一個報文,判斷是否有VLAN資訊:如果沒有則打上埠 PVID 並進行交換轉發。如果有則判斷該hybrid埠是否允許該VLAN資料進入:如果可以則轉發,否則丟棄(此時埠上untag配置是不用考慮,untag配置只對傳送報文時起作用) 

hybrid埠發報文:

1、判斷該VLAN在本埠屬性(disp erface 即可看到該埠對哪些VLAN是untag 哪些VL
AN是tag)

2、如果是untag則剝離VLAN資訊再發送如果是tag則直接傳送

Pvid和Vid經常出現於二、三層交換機裡,由於PVID和VID的設定不合理,造成VLAN劃分變得混亂。本文就對PVID和VID進行了徹底研究。

pvid是交換機上的概念,說的是進入該埠的報文如果沒有打vlan id就按pvid的值打上,
vid是報文上的vlan tag的意思.不是同個概念哦.

首先解釋一下什麼是PVID,PVID英文解釋為Port-base VLAN ID,是基於埠的VLAN ID,一個埠可以屬於多個vlan,但是隻能有一個PVID,收到一個不帶tag頭的資料包時,會打上PVID所表示的vlan號,視同該vlan的資料包處理,所以也有人說PVID就是某個埠預設的vlan ID號。

預設情況下,簡單的理解為:
ACCESS埠接PC,VID=PVID
TRUNK埠級聯,VID=全部,PVID=1

簡單的說,VID(VLAN ID)是VLAN的標識,定義其中的埠可以接收發自這個VLAN的包;而PVID(Port VLAN ID)定義這個untag埠可以轉發哪個VLAN的包。比如,當埠1同時屬於VLAN1、VLAN2和VLAN3時,而它的PVID為1,那麼埠1可以接收到VLAN1,2,3的資料,但發出的包只能發到VLAN1中

在網上發現一個比較好的解釋是:PVID並不是加在幀頭的標記,而是埠的屬性,用來標識埠接收到的未標記的幀。也就是說,當埠收到一個未標記的幀時,則把該幀轉發到VID和本埠PVID相等的VLAN中去。為了驗證這一說法,在S3026上做了以下實驗:
在S3026上選兩個埠,連線兩臺主機A、B,按照下表給埠設定不同的PVID和VID,用A ping B,並在B上抓包,記錄實驗結果。


注:結果中“有”表示抓包有ICMP的包(但ping不同),“無”表示沒有,“通”表示可以ping通。VID為“無”表示該埠沒有加到任何VLAN裡。

所有結果為“無”的可以解釋為:當埠1收到無標記的幀後,轉發到VID=PVID=1的埠去,由於埠2無VID,故主機B收不到包。
所有結果為“有”的可以解釋為:當埠1收到無標記的幀後,轉發到VID=PVID=1的埠去,由於埠2的VID=1,故主機B收到ICMP的ECHO包,併發出ECHO Reply,由於此種情況下埠1的VID不等於1,故B的Reply並不能到達A。所以只有當兩個埠的PVID和VID一樣時,才可以互通。
到此我和大家一樣有個疑問,一個VLAN幹嗎要設定PVID和VID兩種標識呀?方正只有當PVID=VID時才能互通,只有一個不就夠了嗎?請往下看。

當所有VLAN都在一個交換機裡時,確實只需要一個標識就夠了,但跨裝置的VLAN就需要另一種標識,這就是802.1Q的VLAN ID,即VID。
我們知道802.1Q的VLAN是在二層幀里加進VLAN標識,俗稱打tag,而計算機不能解析這種二層的幀,所以交換機的一個埠在分到一個VLAN時有tag和untag屬性,tag埠用來連線裝置,untag埠用來連線計算機。Tag端口出去的幀一般都打上了tag,tag中的VID有的來自PVID,有的則來自其它tag埠中本身就含有tag的幀。
裝置互連時,由tag中的VID決定了一個二層幀屬於哪個VLAN,而計算機不具備打tag的功能,所以只有給連線計算機的埠新增一個屬性,用來決定計算機發出的未標記的幀屬於哪個VLAN,這個屬性就是PVID。

我們來總結一下,S3026的VLAN轉發的機制:在一個埠接收到一個無標記幀時,僅僅由該埠的PVID決定該幀轉發到哪個VLAN中,即轉發到VID=PVID的VLAN中。
到此我們理解了PVID的含義和作用,但似乎只有untag埠下的PVID才具有意義,而實際上tag埠也有PVID屬性,PVID對tag埠會造成什麼影響呢?請看中篇。

PVID和VID徹底研究(中)
——PVID值對TAG埠影響

在上篇,我們理解了PVID的含義和作用,本篇將通過實驗,分別在S3026和S3526上研究PVID值對tag埠的影響。首先在S3026上進行實驗,如下圖所示:

我們將用到3個埠:Port 1、2、3,
各埠PVID設定如下:
Port 1:PVID = n
Port 2:PVID = 2
Port 3:PVID = 3
建立2個VLAN:
vlan2:VID = 2,包含Port 1 (tag)、Port 2 (untag)
vlan3:VID = 3,包含Port 1 (tag)、Port 3 (untag)
將3臺主機A、B、C分別接在Port 1、2、3上,
分別用主機B、C去ping主機A,在主機A上抓包。

實際上tag埠接計算機是沒有意義的,因為計算機無法解析打了tag的二層包文,但通過抓包軟體可以抓到這種二層報文,通過這種方法可以進行分析。
實驗時主機B和C可以是同一臺計算機,只不過接到不通埠上,為了方便說明,將它們分開表示。
實驗結果如下:
當n = 1時,可以看到來自B和C的包頭前都含有802.1Q的Packet,B、C都不能ping通A(ping不通的由於主機A無法解析打了tag的二層包);
當n = 2時,可以看到來自B的包頭前不含有802.1Q的Packet,而來自C的有,僅B可ping通A;;
當n = 3時,可以看到來自C的包頭前不含有802.1Q的Packet,而來自B的有,僅C可ping通A;;

通過分析,得出S3026轉發機制大致如下:
1、由主機B發出的包到介面2(由於此時B不知道A的MAC地址,會發出arp廣播包)
2、根據介面2的PVID的值(PVID=2),發往VID=2的VLAN中的所有介面
3、介面1屬於VLAN 2,所以介面1能收到此包
4、此時如果VLAN 2中介面1是tag埠,則將介面1的PVID值和VID進行比較:
如果PVID=VID則從介面1出去的包不打tag
如果PVID!=VID則從介面1出去的包打tag

由此可見,以前設為tag埠的PVID不起作用的說法在S3026上並不適用,正確的說法應該是:S3026上的某個VLAN中的tag埠,在轉發在此VLAN中包時出去前,先檢查該tag埠的PVID是否等於VID,若相等則發出的包不打tag,若不等則打上tag。

而在S3526上重複這個實驗時,得到了不同的結果:在S3526上,只要某個VLAN中的埠設為tag埠,在轉發來在此VLAN中包時出不管該埠的PVID值是多少,都打上tag。(不同廠家裝置的實現方式不一樣,需要注意!)
到此,我們都只是在單獨一個裝置上研究PVID的影響,下篇將結合一個故障例項,解釋跨裝置時PVID的影響。

PVID和VID徹底研究(下)
——一個故障例項的分析


某網組網結構如下圖所示,某路由器下掛S3526,S3526下掛S3026,S3026下面接了4個使用者:


其中S3526的介面1上接路由器,打tag標記;介面2接S3026,打tag標記,PVID為1。
S3026的配置是這樣的:
S3026的介面1上接S3526,打tag標記,屬於VLAN 2、3、4、5,PVID為2;
介面2接使用者2,屬於VLAN 2,PVID為2;
介面3接使用者3,屬於VLAN 3,PVID為3;
介面4接使用者4,屬於VLAN 4,PVID為4;
介面5接使用者5,屬於VLAN 5,PVID為5;

故障現象為:使用者2的使用者無法上網,而其它的使用者可以上網;如果將S3026的上連口的PVID值配置為3,那麼使用者3的使用者無法上網,其它的使用者可以上網;
最後我們將S3026的上連口的PVID值設定為1,4個使用者的使用者就都可以上網了。

根據前兩篇的結論,我們發現,介面1的PVID=2,故從VLAN 2來的包從介面1出去後不打tag,而此時S3526的介面2的PVID=1,收到未標記得包後,將其送到VLAN 1裡。原本VLAN 2的包送到了錯誤的VLAN裡,所以VLAN 2下的使用者上不了網。

當我們將S3026介面1的PVID設為1時,它不等於所屬任何VLAN地VID,送出去的包都打了tag,此時S3526能根據tag將接受到的包送到正確的VLAN裡,故所有VLAN下使用者都能上網了。

我們可以補充一個實驗,將S3026的介面1和S3526的介面2的PVID都設為2,此時所有使用者都能正常上網,原因是這樣的:S3026將VLAN 2的包不打tag的從介面1送出去,S3526的介面2收到的包有打tag的(VLAN 3、4、5),也有不打tag的(VLAN 2)。S3526的介面2對於打tag的包,能夠發往正確的VLAN;不打tag的包,根據介面2的PVID值,送到VID=PVID的VLAN裡,而此時介面2的PVID=2,也恰巧正確的送到了VLAN 2裡。所有VLAN的包在跨裝置後,通過不同的方式,都正確的發往所在的VLAN,於是所有使用者都能正常上網,只不過VLAN 2和其它的VLAN途徑有點不同。可見,裝置兩端的PVID一致時,在解決問題的同時,也把潛在問題給隱藏起來。例如在把S3526隔接為其它裝置時,可能會又造成某個VLAN的使用者上不了網,而此時故障原因不容易找到。

我們來總結一下,交換機的PVID和VID給VLAN配置帶來了靈活性,同時也帶來了一些麻煩,配置的不好可能帶來問題很隱蔽。所以我們以後在配置VLAN時要注意以下幾點:
1、 對於untag埠,PVID要和所屬VLAN的VID一致;
2、 對於tag埠,PVID要不同於所有所屬VLAN的VID;
3、 兩臺裝置互聯時,兩端介面的PVID保持一致時,有弊也有利;

到此,我們真正意義上理解了基於埠的VLAN,也理解了PVID的作用,希望本文能給困惑於PVID和VID的人帶來一點幫助。