同一交換機的不同VLAN如何做到隔離?

我們知道,配置VLAN trunk的時候會選擇使用哪種協議進行封裝,常用的是802.1q。802.1q的標記中有VID記錄VLAN號。但如果不配置trunk,那也就沒有封裝,同一交換機如何實現VLAN的隔離?是否靠交換機內部的VLAN database?如果跨交換機,兩個交換機分別配置VLAN10和VLAN20,如果未配置trunk,交換機A的VLAN10能否與交換機B的VLAN20互通?


問題一:

交換機有一張map表:VLAN ID Port List ,一個access介面上收到幀,會打上其VLAN ID。

比如 VLAN10 的映射表:

VLAN 10: G0/1,G0/3…
VLAN 20: G0/2,G0/4…

幀從access mode 接收到幀,會打上介面上的VLAN Tag,然後根據其VLAN Tag查詢特定的表,做出轉發動作。

如果從access mode 介面出,在出介面去掉VLAN Tag 。

如果需要轉發到trunk mode 介面
if ( vlan ID == trunk native vlan ID )

去掉VLAN Tag

Else

保留VLAN Tag


問題二:
至於VLAN10 VLAN20 上的主機是否可以通信,要分這兩種情況:


a) 10.1.1.2 ---vlan10--SW1(vlan10)--(vlan20)--SW2-vl?an?20--10.1.1.3

這種情況可以通信,10.1.1.2 可以ping通10.1.1.3


b) 10.1.1.2 ---vlan10----SW1---vlan20----10.1.1.3

這種情況10.1.1.2 與10.1.1.3 無法通信


因為同一個交換機也不是一個簡單的整體,在這裡簡單介紹一下交換機。為了便於理解,將交換機簡化為以下模型。(實在太簡單了,自己都有點看不下去了,只為解釋本題用吧。)

入介面--------CPU--------出介面

數據包從交換機入介面進入,交換機會進行入介面的第一步操作,查看VLAN database和介面下命令配置,打標籤。
如果是默認配置,劃為native vlan,不打標籤。
如果是access vlan XX,劃為XX vlan,在以太幀包頭後打上dot1q相應標籤。
如果是trunk,檢查是否是合法流量(不合法直接drop掉)。

然後是第二步,CPU判斷複製轉發。
接第一步,CPU判斷流量是否目的地為本機(目的地為本機與此問題無關),如不是則根據數據包類型,經過交換矩陣完成數據包的複製和轉發,將流量發往允許該流量出去的相應介面。

第三步,出介面最後一步操作。
如果是默認配置,劃為native vlan,不做操作。
如果是access vlan XX,劃為XX vlan,在以太幀包頭後去除dot1q相應標籤。
如果是trunk,不做操作,帶標籤轉發。

除最後一個問題已基本回答清楚,至於最後一個問題,不做trunk是否可以完成轉發
PC1--------(vlan 10)--SW1--(vlan 10)--------(vlan 20)--SW2--(vlan 20)--------PC2
這種情形PC1和PC2是可以通信的,但除實驗外,強烈不建議進行這種配置。


我個人的理解是這樣的:
首先dot1q封裝會在乙太網幀中加入vlan tag,標識出這個幀屬於哪個VLAN。
交換機埠主要是兩種模式access和trunk,區別在於access口的報文出去不帶tag,而trunk口的報文出去仍然帶tag。在交換機內部處理的時候這些vlan tag都是存在的,交換機通過識別tag來進行邏輯隔離。

如果不配置trunk,那也就沒有封裝,同一交換機如何實現VLAN的隔離?

對於這個問題,兩個不同VLAN的access介面,在交換機外部是不帶VLAN的,報文相同,但是進方向的報文會打上tag,出方向的報文會剝離tag。在交換機內部,兩個介面的報文是帶有不同vlan tag的,與介面是access還是trunk無關。

下面說一下trunk的問題。trunk介面作為中繼介面,對進出報文的vlan tag不作處理,使得可以保留報文的vlan tag標籤,在另外一台交換機內部處理時仍然是保持之前的vlan。

如果跨交換機,兩個交換機分別配置VLAN10和VLAN20,如果未配置trunk,交換機A的VLAN10能否與交換機B的VLAN20互通?

最後說一下這個問題,我記得前兩天在其他問題下面回答過。對於access口,vlan是在交換機內部有效,出介面的時候會進行剝離,因此當A交換機VLAN10的報文經一個access口出來的時候會剝離VLAN10變成untag報文,而之後進入B交換機的access介面時會根據埠配置再次打上VLAN20的tag。
如果兩個介面都是trunk會怎麼樣?A交換機的VLAN10報文帶著VLAN tag進入交換機B,如果交換機B的trunk介面沒有permit VLAN10,那麼報文根本無法進入;如果允許,那麼VLAN10的報文會進入交換機B進行處理,此時與B交換機上的VLAN20是邏輯隔離的。


主機一般情況下發送的數據幀都是ethernet2數據幀,不含vlan tag。當數據幀進入交換機時,交換機為幀加上了vlan tag,變成802.1q數據幀,並在交換機內部轉發。當802.1q數據幀離開交換機時,交換機把vlan tag去掉,又變成了ethernet2數據幀。


我給別人說VLAN的時候就說過,你把VLAN想像成游泳池,不同VLAN號是不同的池子。
這時候你就看了,ACCESS口就是池子進/出口,既然出了,那麼對面流到哪裡是看進口到哪個池子,和你出的沒關係
所有 兩個口都是Access的話是可以通信的,不過這樣容易產生亂七八糟的問題


1.交換機上區分各vlan的數據是通過 vlan tag來區分的,數據進入acc口的話會加上相應的vlan 標籤(tag),出access口的話會剝離相應的vlan 標籤。而如果進出trunk口的話是不對標籤進行操作的(ps:如果沒有標籤的數據進入trunk一般會打上pvid的tag)。帶標籤的數據能否通過介面就是查看該介面有沒有配置相應的vlan。
2. 兩台交換機不同vlan互通的問題,可以通過A配置access vlan 10介面與B配置acc vlan 20介面實現互通(ps:這種連接方式某些交換機可能會報pvid不一致down掉介面)。三層交換機的話配置相應的路由就可以實現vlan間的互通


打個比方,一間房子里有9扇門,原本從一扇門進來隨便哪個門都可以出去。
現在立了兩堵牆讓房間劃分為三個區域,每個區域三扇門,比如區域A,B,C,現在你從一扇門進來只能從相同區域的門出去,因為其它區域被擋住了。
劃分VLAN就好比劃分區域。

第二個問題樓上已經回答了,可以通也可以不通。通的話介面用access


兩個交換機分別配置VLAN10和VLAN20,如果未配置trunk,交換機A的VLAN10能否與交換機B的VLAN20互通?

不可以互通,沒有trunk無法有標籤,交換機無法轉到對應access口。

可以通過交換機之間連線分別部署access口(自身另一個介面相同的vlan) ,此時可以通信。


推薦閱讀:

交換機下能抓包嗎?
增加帶機量是選用一個好的路由器還是增加一個核心交換機?
只有一台電腦,可以DDOS網站嗎?
如何理解 TCP/IP, SPDY, WebSocket 三者之間的關係?
RFC文檔需要細緻學習嗎?

TAG:計算機網路 | 交換機 | VLAN |