﻿# 釐清網管型 Switch 裡與 VLAN + Tag + Untag 之間的觀念

前陣子大約有一段長達兩個月的時間被兩台網管型 Switch 折磨的不成人形，由於機房環境有切內外網，因此都用 VLAN 切開，由於我之前都沒用過網管型的 Switch 設備，因此也不太清楚原來有這麼多細節需要注意，原本網路通了就應該放棄研究的（就是不切 VLAN 即可），但一顆心懸在一個無法理解的問題讓我十分難受，最後還是花了兩個月時間不斷抽空跑機房、做測試、打電話尋求支援，最後終於徹底釐清觀念，但我不保證這篇文章可以寫的有多詳盡就是了，但可以供有興趣的人參考。

**問題描述**

以下是我第一台 Switch 的 VLAN 與接線示意圖與設定描述：( 廠牌為 D-Link，假設名稱為 **Switch 1** )

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5d3351c67400b1d982ee-image_thumb_53.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/191c8206bc8c22862eaf-image_594.png)

-   Port 1 是 **Router Port** ( 也就是從 ISP 的 Router 接到我們機櫃的那條線 )
-   Port 01 ~ 08 為 VLAN 1
-   Port 09 ~ 16 為 VLAN 2

以下是我第二台 Switch 的 VLAN 與接線示意圖與設定描述：( 廠牌為 Intel，假設名稱為 **Switch 2** )

[![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6612473b498465187e5d-image_thumb_54.png "image")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/623749453a762ccd078c-image_595.png)

-   Port 01 ~ 08 為 VLAN 1
-   Port 09 ~ 16 為 VLAN 2
-   Port 01 接上 Switch 1 的 Port 02
-   Port 09 接上 Switch 1 的 Port 10

由於兩台都已經設定了 VLAN，我原本以為說設定了 VLAN 就等同於在 Switch 實體隔離了這些 Ports，當我只接上 Switch 1 的 Port 02 接上 Switch 2 的 Port 01 是沒問題的，Switch 兩邊的網路會通，而且兩邊又是同樣的 VLAN 所以不覺得有異。

但是當我 Switch 1 的 Port 10 接上 Switch 2 的 Port 09 之後，VLAN 2 的網路就完全不通，可是 VLAN 1 的網路都是正常的！

就是這個詭異的問題卡了我兩個月才解決，各位可以在繼續看下去之前看能不能想到解決的方向或知道解決的方式與發生的原因。

**連續的錯誤觀念導致錯誤假設**

首先，我不認為我的接線方式有錯，畢竟兩台都已經切 VLAN 了，封包應該已經隔離了啊。 (錯誤觀念)

接著，D-Link 的 [Spanning tree](http://en.wikipedia.org/wiki/Spanning_tree) 預設是關閉的，如果有廣播風暴或迴路發生，應該會有更多 Ports 發生問題才是，因為我缺乏網管型 Switch 的使用經驗，因此直覺認為所有 Switch 的預設 [Spanning tree](http://en.wikipedia.org/wiki/Spanning_tree) 都是關閉的。 (錯誤觀念)

再來，我看了 ZMAN 在 [酷！學園](https://web.archive.org/web/20231116111219/http://phorum.study-area.org/index.php) 上對 VLAN 的 tagged ＆ untagged 觀念 的解釋之後，設定依然失敗 (其實是沒真正看懂，所以才設定錯誤)，這狀況再度驗證朋友跟我說的「**D-Link Switch 真的很爛**」這句話。(錯誤觀念)

錯誤發生原因是我在解決問題後才歸納出來的，解決問題的過程中沒想到會這樣。

**導正上述錯誤觀念**

1.  設定 VLAN 不代表對 Ports 的實體隔離，因此接了兩條網路線之後，其實兩條網路現都會彼此交換封包，以致於造成一個封包交換迴路，而 Intel 的 Switch 又正好啟用 [Spanning tree](http://en.wikipedia.org/wiki/Spanning_tree) 所以會將其中一個有問題的迴路給關閉，因此網路自然會斷線。
2.  原來在我的網路環境下 Intel 的網管型 Switch 預設是將 [Spanning tree](http://en.wikipedia.org/wiki/Spanning_tree) 打開的，由於已經發生了迴路，因此 [Spanning tree](http://en.wikipedia.org/wiki/Spanning_tree) 發生了作用，而 Switch 2 ( Intel ) 會把從 Switch 1 (D-Link) Port 10 傳來的 packet 全部丟棄，因此 VLAN 兩邊的網路才無法連通！
3.  學網管必須學會如何做 PoC (觀念驗證)，不要相信別人告訴你的感覺。另外 tagged & untagged 可以非常靈活的運用，不單單只是文章寫的那樣而已，在 Switch 的使用手冊裡有提到一些應用的情境，還蠻複雜的。

以下是 Intel 的網管型 Switch 預設是將 [Spanning tree](http://en.wikipedia.org/wiki/Spanning_tree) 打開的示意畫面：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/40dba0d1fcfa5e39d4e0-image_591.png)

**解決問題的方法**

由於我不相信 D-Link 的設備有問題，還好 D-Link 的技術客服還不錯，都會有專業工程師回答，對方教了我許多觀念，最後還教我學會設定 Tag VLAN。**免付費技術服務專線**：**0800-002-615**

以下是我對 Tag 與 Untag 的理解，這些就是因為解決這個問題學到的：

Tagged VLAN Ports / Tagged Packets

在複雜一點的網路架構裡，會用 VLAN 來切割網路環境，但在使用多台 Switch 之間做封包交換時如果兩邊都有設定 VLAN 的話，就很可能會遇到跟我一樣的問題。在多 Switch 的情況下，封包交換時必須依賴 Tag 資料封裝在 FRAME 最前面加一個 4 Bytes 的 TAG ( 前面 2 BYTES 固定是 8100h )，基本上來說 Tag 就代表著一個附帶的資訊，可告訴網路設備說我這次傳入的封包是一個帶有 Tag 資訊的封包。

對不支援 Tagged VLAN 的 Switch 來說，這類封包會自動丟棄 (因為看不懂)，但是對網管型的 Switch 來說透過適當的設定就可以正確的識別封包，並將該封包交換到適當的 VLAN Ports。

Untagged VLAN Ports / Untagged Packets

Switch 裡預設的情況下所有的 Ports 都是 Untagged VLAN Ports，而所有從 Switch 流入、流出的封包也都應該是 Untagged 的封包，也就是說封包本身並沒有附帶任何 FRAME 以外的資訊，所有無論網管型或一般型的 Switch 都可以認識這種格式的封包。

**實例解說**

例如說我將 Switch 1 的 Port 02 被標注為 Tagged VLAN Port 時，就代表著從這個 Port 流出的封包都會帶有 [802.1Q](http://en.wikipedia.org/wiki/802.1Q) 的 Tag 資訊，而流入的封包也會自動識別該封包是否帶有 Tag 資訊，就算流入的封包是屬於 Untagged 封包，在 Tagged VLAN Port 是可以正常識別的。

任何其他標注為 Untagged VLAN Ports 的 Port，流入的封包如果含有 Tag 資訊，該封包就會被丟棄。而從這個 Port 流出的封包如果是帶有 VLAN Tag 的，其 Tag 資訊在封包流出時會自動被剔除。

因此，在兩台 Switch 都有設定多組 VLAN ID 的情況下，在兩台 Switch 對接的那個 Port 必須都調整為 Tagged VLAN Port 才行，而且也只能有這一條對接的實體線路，這樣一來兩邊的封包就統一透過這兩個對接的 Ports 交換封包。

在我的 Switch 1 我就同時把 Port 02 設定在 VLAN ID 1 的 Untagged VLAN Ports，以及設定在 VLAN ID 2  的 Tagged VLAN Port，如此一來我的 Port 02 就可以同時交換 VLAN ID 1 與 VLAN ID 2 的封包到另一台 Switch 2 了。設定如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7851eb3b0bfa80f9e645-image_592.png)

最後，我們到 Switch 2 的 Port 01 設定為 VLAN ID 2 的 Tagged VLAN Port 即可大功告成！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/357508d338f6e96b8ae0-image_593.png)

**心得分享**

其實在這兩個月的過程中，我問過許多對網管型 Switch 有許多經驗的人，但卻沒有人知道為什麼，且也沒人能將整個觀念說清楚，還有人跟我說 D-Link Switch 真的很爛，叫我換一個牌子（但我已經過七天鑑賞期了不能退貨），不然就是說一些國內的小廠 (相較於國外的大廠啦) 實做出來的 802.1Q 不夠標準，所以**可能**是因為這樣才不能用，諸如此類的，我個人一直處於半信半疑的狀態就是了。

在這幾年間「**D-Link Switch 真的很爛**」這句話我已經聽過太多遍，即便我跟朋友說我買了 D-Link 的「網管型」 Switch，他們還是覺得不可靠，但在我的下意識裡**網管型**這三個字就是代表比較高檔的 Switch，我實在不願意相信 D-Link 會推出一個真的有問題 (不符合 IEEE 規格) 的網管型產品來賣，畢竟 D-Link 也在市場上存在這麼久了，所以這篇文章應該可以幫他平反一些些吧。 XD

走過這一遭，讓我有個很深刻的體悟，那就是網管這東西真的不簡單，但很有趣的是，只要懂了，網管工作就會變的非常非常簡單！專業的網管，應該是準時上下班，每天上班都在打屁聊天的那種 (誤)，呵呵。

**相關連結**

-   [優先權-IEEE802.1p](https://web.archive.org/web/20071226121833/http://drupal.morezman.com:80/?q=node/28)
-   [IEEE 802.1Q - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/802.1Q)
-   [Ethernet frame - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Ethernet_frame)
-   [魔力門資訊網](https://www.morezman.com/) - 網路深似海 系統高如天
-   [魔力門部落格](http://wordpress.morezman.com)
-   請問VLAN的tagged＆untagged觀念？
-   [Spanning tree - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Spanning_tree) ( [生成樹協議](http://zh.wikipedia.org/zh-tw/%E7%94%9F%E6%88%90%E6%A0%91%E5%8D%8F%E8%AE%AE) )
