Networking

VLAN 是如何工作的?

  • June 4, 2013

什麼是 VLAN?他們解決了什麼問題?

我正在幫助一位朋友學習基本網路,因為他剛剛成為一家小公司的唯一系統管理員。我一直在向他指出與各種網路主題相關的關於 Serverfault 的各種問題/答案,並註意到一個差距——似乎沒有一個答案可以從第一原則解釋什麼是 VLAN。本著子網如何工作的精神,我認為在這裡提出一個帶有規範答案的問題會很有用。

答案中要涵蓋的一些潛在主題:

  • 什麼是 VLAN?
  • 他們打算解決什麼問題?
  • 在 VLAN 之前,事情是如何運作的?
  • VLAN 如何與子網關聯?
  • 什麼是 SVI?
  • 什麼是中繼埠和訪問埠?
  • 什麼是 VTP?

編輯:需要明確的是,我已經知道 VLAN 是如何工作的——我只是認為 Serverfault 應該有一個涵蓋這些問題的答案。如果時間允許,我也會送出我自己的答案。

虛擬 LAN (VLAN) 是一種抽象,允許單個物理網路模擬多個並行物理網路的功能。這很方便,因為在某些情況下您可能需要多個並行物理網路的功能,但您寧願不花錢購買並行硬體。我將在這個答案中談論乙太網 VLAN(即使其他網路技術可以支持 VLAN),我不會深入探討每一個細微差別。

一個人為的例子和一個問題

作為一個純粹人為的範例場景,假設您擁有一棟出租給租戶的辦公樓。作為租約的一項好處,每個租戶都將在辦公室的每個房間獲得實時乙太網插孔。您為每個樓層購買一個乙太網交換機,將它們連接到該樓層每個辦公室的插孔,然後將所有交換機連接在一起。

最初,您將空間租給兩個不同的租戶——一個在 1 樓,一個在 2 樓。這些租戶中的每一個都使用靜態 IPv4 地址配置他們的電腦。兩個租戶都使用不同的 TCP/IP 子網,一切似乎都執行良好。

後來,一個新租戶租下了 3 樓的一半,並啟動了這些新奇的 DHCP 伺服器之一。時間過去了,一樓的租戶也決定加入 DHCP 的潮流。這是事情開始出錯的時候。3 樓的租戶報告說,他們的一些電腦從不是他們的 DHCP 伺服器的電腦上獲取“有趣”的 IP 地址。很快,一樓的租戶報告了同樣的事情。

DHCP 是一種利用乙太網的廣播功能允許客戶端電腦動態獲取 IP 地址的協議。因為租戶都共享同一個物理乙太網網路,所以他們共享同一個廣播域。從網路中的任何電腦發送的廣播數據包會將所有交換機埠泛洪到所有其他電腦。位於 1 層和 3 層的 DHCP 伺服器將接收所有 IP 地址租用請求,並將有效地決鬥,看誰能先回答。這顯然不是您希望租戶體驗的行為。不過,這是沒有任何 VLAN 的“平面”乙太網的行為。

更糟糕的是,2 樓的一位租戶購買了這款“Wireshark”軟體,並報告說,他們不時看到來自交換機的流量引用了他們從未聽說過的電腦和 IP 地址。他們的一名員工甚至發現他可以通過將分配給他的 PC 的 IP 地址從 192.168.1.38 更改為 192.168.0.38 來與這些其他電腦通信!據推測,他距離為其他租戶之一執行“未經授權的無償系統管理服務”僅幾步之遙。不好。

潛在的解決方案

你需要一個解決方案!您只需拔下地板之間的插頭,就會切斷所有不必要的通信!是的!就是這張票…

這可能行得通,除非您有一個新租戶,他將租用地下室的一半和 3 樓的空置一半。如果 3 樓開關和地下室開關之間沒有連接,則新租戶將不會能夠在他們的電腦之間進行通信,這些通信將分佈在他們的兩個樓層。拔掉插頭不是答案。更糟糕的是,新租戶帶來了另一台這樣的 DHCP 伺服器!

您考慮為每個租戶購買物理上獨立的乙太網交換機組的想法,但看看您的建築物有 30 層,其中任何一層都可以細分為 4 種方式,潛在的老鼠巢之間的地板到地板電纜大量並行乙太網交換機可能是一場噩夢,更不用說昂貴了。如果有一種方法可以讓單個物理乙太網網路像多個物理乙太網網路一樣工作,每個物理乙太網網路都有自己的廣播域。

救援 VLAN

VLAN 可以解決這個混亂的問題。VLAN 允許您將乙太網交換機細分為邏輯上不同的虛擬乙太網交換機。這允許單個乙太網交換機像多個物理乙太網交換機一樣工作。例如,在您細分的 3 樓的情況下,您可以配置 48 埠交換機,使較低的 24 個埠在給定的 VLAN 中(我們將稱之為 VLAN 12),而較高的 24 個埠在給定的 VLAN 中(我們將其稱為 VLAN 13)。當您在交換機上創建 VLAN 時,您必須為它們分配某種類型的 VLAN 名稱或編號。我在這裡使用的數字大多是任意的,所以不要擔心我選擇了哪些具體數字。

將 3 樓交換機劃分為 VLAN 12 和 13 後,您會發現新的 3 樓租戶可以將其 DHCP 伺服器插入分配給 VLAN 13 的埠之一,而插入分配給 VLAN 12 的埠的 PC 不會t 從新的 DHCP 伺服器獲取 IP 地址。優秀的!問題解決了!

哦,等等……我們如何將 VLAN 13 的數據傳送到地下室?

交換機之間的 VLAN 通信

您的半樓 3 和半地下室租戶希望將地下室的電腦連接到他們在 3 樓的伺服器。您可以直接從分配給他們在 3 樓交換機的 VLAN 的埠之一連接到地下室和生活會很好,對吧?

在 VLAN(802.1Q 之前的標準)的早期,您可能會這樣做。整個地下室交換機實際上是 VLAN 13 的一部分(您選擇分配給 3 樓和地下室的新租戶的 VLAN),因為該地下室交換機將由 3 樓分配的埠“饋電”到 VLAN 13。

此解決方案將一直有效,直到您將地下室的另一半租給您的 1 樓租戶,該租戶也希望在他們的 1 樓和地下室電腦之間進行通信。您可以使用 VLAN 拆分地下室交換機(例如,VLAN 2 和 13),然後將電纜從 1 樓連接到地下室分配給 VLAN 2 的埠,但您更好的判斷會告訴您,這可能很快成為老鼠窩電纜(而且只會變得更糟)。使用 VLAN 拆分交換機很好,但是必須將多條電纜從其他交換機連接到屬於不同 VLAN 成員的埠,這似乎很麻煩。毫無疑問,如果您必須將地下室交換機在較高樓層也有空間的租戶之間劃分為 4 路,您將使用地下室交換機上的 4 個埠來端接來自樓上 VLAN 的“饋線”電纜。

現在應該清楚的是,需要某種通用方法在單根電纜上的交換機之間移動來自多個 VLAN 的流量。僅僅在交換機之間添加更多電纜以支持不同 VLAN 之間的連接並不是一種可擴展的策略。最終,有了足夠的 VLAN,您將通過這些 VLAN 間/交換機間連接佔用交換機上的所有埠。所需要的是一種沿單個連接傳輸來自多個 VLAN 的數據包的方法——交換機之間的“主幹”連接。

到目前為止,我們討論過的所有交換機埠都稱為“訪問”埠。也就是說,這些埠專用於訪問單個 VLAN。插入這些埠的設備本身沒有特殊配置。這些設備不“知道”存在任何 VLAN。客戶端設備發送的幀被傳送到交換機,然後交換機負責確保該幀僅發送到分配為 VLAN 成員的埠,該 VLAN 分配給幀進入交換機的埠。如果幀在分配為 VLAN 12 成員的埠上進入交換機,則交換機只會將該幀發送到屬於 VLAN 12 的埠。交換機“知道”分配給埠的 VLAN 編號,從該埠接收幀,並且不知何故知道僅將此幀傳遞到同一 VLAN 的埠。

如果交換機可以通過某種方式將與給定幀關聯的 VLAN 號共享給其他交換機,那麼其他交換機可以正確處理僅將該幀傳送到適當的目標埠。這就是 802.1Q VLAN 標記協議的作用。(值得注意的是,在 802.1Q 之前,一些供應商制定了自己的 VLAN 標記和交換機間中繼標準。在大多數情況下,這些準標準方法都已被 802.1Q 取代。)

當您有兩個可辨識 VLAN 的交換機相互連接並且您希望這些交換機在彼此之間將幀傳送到正確的 VLAN 時,您可以使用“中繼”埠連接這些交換機。這涉及將每個交換機上的埠配置從“訪問”模式更改為“中繼”模式(在非常基本的配置中)。

當埠配置為中繼模式時,交換機從該埠發出的每個幀都會在該幀中包含一個“VLAN 標記”。這個“VLAN 標籤”不是客戶端發送的原始幀的一部分。相反,此標籤是由發送交換機在將幀發送出中繼埠之前添加的。此標記表示與幀源自的埠關聯的 VLAN 號。

接收交換機可以查看標籤以確定幀源自哪個 VLAN,並根據該資訊僅將幀轉發到分配給原始 VLAN 的埠。因為連接到“訪問”埠的設備不知道正在使用 VLAN,所以必須從幀中刪除“標記”資訊,然後才能將其發送到配置為訪問模式的埠。標記資訊的這種剝離導致整個 VLAN 中繼過程對客戶端設備隱藏,因為它們接收的幀將不包含任何 VLAN 標記資訊。

在現實生活中配置 VLAN 之前,我建議在測試交換機上為中繼模式配置一個埠,並使用嗅探器(如 Wireshark)監控從該埠發出的流量。您可以從另一台電腦創建一些範例流量,插入訪問埠,然後查看離開中繼埠的幀實際上會大於測試電腦發送的幀。您將在 Wireshark 的幀中看到 VLAN 標記資訊。我發現值得真正看看嗅探器中發生的事情。在這一點上閱讀 802.1Q 標記標準也是一件不錯的事情(特別是因為我不是在談論諸如“本地 VLAN”或雙重標記之類的東西)。

VLAN 配置噩夢和解決方案

隨著您在建築物中租用越來越多的空間,VLAN 的數量也在增加。每次添加新 VLAN 時,您都會發現必須登錄越來越多的乙太網交換機並將該 VLAN 添加到列表中。如果有某種方法可以將該 VLAN 添加到單個配置清單並讓它自動填充每個交換機的 VLAN 配置,那不是很好嗎?

像 Cisco 專有的“VLAN 中繼協議”(VTP) 或基於標準的“多 VLAN 註冊協議”(MVRP——以前拼寫為 GVRP) 等協議實現了這一功能。在使用這些協議的網路中,單個 VLAN 創建或刪除條目會導致協議消息被發送到網路中的所有交換機。該協議消息將 VLAN 配置的更改傳達給其餘交換機,這些交換機反過來修改其 VLAN 配置。VTP 和 MVRP 不關心哪些特定埠被配置為特定 VLAN 的訪問埠,而是在將 VLAN 的創建或刪除傳達給所有交換機時很有用。

當您熟悉 VLAN 後,您可能會想回去閱讀有關“VLAN 修剪”的內容,它與 VTP 和 MVRP 等協議相關聯。目前,沒有什麼可非常擔心的。(維基百科上的 VTP 文章有一個很好的圖表,解釋了 VLAN 修剪及其好處。)

在現實生活中什麼時候使用 VLAN?

在我們走得更遠之前,重要的是考慮現實生活而不是人為的例子。代替在這裡複製另一個答案的文本,我將向您推薦我的答案:何時創建 VLAN。它不一定是“初學者級別”,但現在值得一看,因為在回到一個人為的範例之前,我將簡要介紹一下它。

對於“tl;dr”人群(無論如何,他們肯定都已經停止閱讀了),上面那個連結的要點是:創建 VLAN 以使廣播域更小,或者當您出於某些特定原因(安全、政策等)。使用 VLAN 確實沒有任何其他好的理由。

在我們的範例中,我們使用 VLAN 來限制廣播域(以保持 DHCP 等協議正常工作),其次,因為我們希望在各個租戶的網路之間進行隔離。

旁白:IP 子網和 VLAN

一般來說,VLAN 和 IP 子網之間通常存在一對一的關係,這是為了方便、便於隔離以及 ARP 協議的工作方式。

正如我們在這個答案開頭看到的那樣,兩個不同的 IP 子網可以毫無問題地在同一個物理乙太網上使用。如果您使用 VLAN 來縮小廣播域,您將不希望與兩個不同的 IP 子網共享同一個 VLAN,因為您將合併它們的 ARP 和其他廣播流量。

如果您出於安全或策略原因使用 VLAN 來隔離流量,那麼您也可能不希望在同一個 VLAN 中組合多個子網,因為您將違背隔離的目的。

IP 使用基於廣播的協議,地址解析協議 (ARP),將 IP 地址映射到物理(乙太網 MAC)地址。由於 ARP 是基於廣播的,將同一 IP 子網的不同部分分配給不同的 VLAN 將是有問題的,因為一個 VLAN 中的主機將無法從另一個 VLAN 中的主機接收 ARP 回复,因為廣播不會在 VLAN 之間轉發。您可以通過使用代理 ARP 來解決這個“問題”,但最終,除非您有充分的理由需要在多個 VLAN 之間拆分 IP 子網,否則最好不要這樣做。

最後一點:VLAN 和安全性

最後,值得注意的是,VLAN 並不是一個很好的安全設備。許多乙太網交換機存在錯誤,允許將源自一個 VLAN 的幀發送到分配給另一個 VLAN 的埠。乙太網交換機製造商一直在努力修復這些錯誤,但是否會有完全沒有錯誤的實施是值得懷疑的。

在我們設計的範例中,離向另一個租戶提供免費系統管理“服務”很近的 2 樓員工可能會通過將他的流量隔離到 VLAN 中來阻止這樣做。不過,他也可能想出如何利用交換機韌體中的漏洞,讓他的流量也“洩漏”到另一個租戶的 VLAN 上。

城域乙太網提供商越來越依賴 VLAN 標記功能和交換機提供的隔離。說使用 VLAN*不能提供安全性是不公平的。*不過,可以公平地說,在 Internet 連接或 DMZ 網路不受信任的情況下,使用物理上獨立的交換機來承載這種“敏感”流量可能比使用交換機上的 VLAN 來承載您受信任的“防火牆後”流量更好。

將第 3 層帶入畫面

到目前為止,這個答案所討論的一切都與第 2 層——乙太網幀有關。如果我們開始將第 3 層帶入其中會發生什麼?

讓我們回到人為的建構範例。您已經接受了選擇將每個租戶的埠配置為單獨 VLAN 的成員的 VLAN。您已經配置了中繼埠,以便每個樓層的交換機可以將標有原始 VLAN 號的幀交換到上層和下層的交換機。一個租戶可以將電腦分佈在多個樓層,但是由於您熟練的 VLAN 配置技能,這些物理分佈的電腦都可以看起來是同一個物理 LAN 的一部分。

您的 IT 成就如此之多,以至於您決定開始為您的租戶提供 Internet 連接。你買了一個肥大的網際網路管道和一個路由器。你向所有租戶提出這個想法,其中兩個立即接受。幸運的是,您的路由器有三個乙太網埠。您將一個埠連接到胖 Internet 管道,將另一個埠連接到分配用於訪問第一個租戶 VLAN 的交換機埠,另一個連接到分配用於訪問第二個租戶 VLAN 的埠。您使用每個租戶網路中的 IP 地址配置路由器的埠,租戶開始通過您的服務訪問 Internet!收入增加,你很高興。

不過,很快,另一個租戶決定使用您的 Internet 產品。不過,您的路由器上的埠已用完。該怎麼辦?

幸運的是,您購買了支持在其乙太網埠上配置“虛擬子介面”的路由器。簡而言之,此功能允許路由器接收和解釋標有原始 VLAN 編號的幀,並為虛擬(即非物理)介面配置適合與其通信的每個 VLAN 的 IP 地址。實際上,這允許您“多路復用”路由器上的單個乙太網埠,使其看起來像多個物理乙太網埠一樣。

您將路由器連接到其中一台交換機上的中繼埠,並配置與每個租戶的 IP 定址方案相對應的虛擬子介面。每個虛擬子介面都配置有分配給每個客戶的 VLAN 編號。當一個幀離開交換機上的中繼埠,發往路由器時,它將攜帶一個帶有原始 VLAN 號的標籤(因為它是中繼埠)。路由器將解釋此標記並將數據包視為到達與該 VLAN 對應的專用物理介面。同樣,當路由器向交換機發送幀以響應請求時,它會在幀中添加 VLAN 標記,以便交換機知道應將響應幀傳送到哪個 VLAN。實際上,您已將路由器配置為“出現”

棒上的路由器和第 3 層交換機

使用虛擬子介面,您可以向所有租戶出售 Internet 連接,而無需購買具有 25 個以上乙太網介面的路由器。您對自己的 IT 成就相當滿意,因此當您的兩個租戶向您提出新要求時,您會積極響應。

這些租戶選擇了一個項目的“合作夥伴”,他們希望允許從一個租戶辦公室(一個給定的 VLAN)中的客戶端電腦訪問另一個租戶辦公室(另一個 VLAN)中的伺服器電腦。由於他們都是您的 Internet 服務的客戶,因此對核心 Internet 路由器(在其上為每個租戶的 VLAN 配置一個虛擬子介面)中的 ACL 進行相當簡單的更改,以允許流量在其 VLAN 之間流動以及從他們的 VLAN 到 Internet。您進行更改並將租戶發送到他們的路上。

第二天,您收到兩個租戶的投訴,稱一個辦公室的客戶端電腦與第二個辦公室的伺服器之間的訪問速度非常慢。伺服器和客戶端電腦都有千兆乙太網連接到您的交換機,但文件僅以大約 45Mbps 的速度傳輸,巧合的是,這大約是核心路由器連接到其交換機的速度的一半。顯然,從源 VLAN 流向路由器並從路由器返回到目標 VLAN 的流量受到路由器與交換機的連接的限制。

您對核心路由器所做的事情,允許它在 VLAN 之間路由流量,通常被稱為“棒上的路由器”(可以說是一種愚蠢的異想天開的委婉說法)。這種策略可以很好地工作,但流量只能在 VLAN 之間流動,直至路由器與交換機的連接容量。如果以某種方式,路由器可以與乙太網交換機本身的“膽量”結合起來,它可以更快地路由流量(因為根據製造商的規格表,乙太網交換機本身能夠切換超過 2Gbps 的流量)。

“第 3 層交換機”是一種乙太網交換機,從邏輯上講,它包含一個隱藏在自身內部的路由器。我發現將第 3 層交換機視為隱藏在交換機內部的微型快速路由器非常有幫助。此外,我建議您將路由功能視為與第 3 層交換機提供的乙太網交換功能截然不同的功能。出於所有意圖和目的,第 3 層交換機是封裝在單個機箱中的兩個不同設備。

第 3 層交換機中的嵌入式路由器以通常允許在 VLAN 之間以或接近線速的速度路由數據包的速度連接到交換機的內部交換結構。類似於您在“棒上路由器”上配置的虛擬子介面,該第 3 層交換機內的嵌入式路由器可以配置虛擬介面,“看起來”是“訪問”到每個 VLAN 的連接。這些從 VLAN 到第 3 層交換機內的嵌入式路由器的邏輯連接不被稱為虛擬子介面,而是被稱為交換機虛擬介面 (SVI)。實際上,第 3 層交換機內的嵌入式路由器具有一定數量的“虛擬埠”,可以“插入”到交換機上的任何 VLAN。

嵌入式路由器的執行方式與物理路由器相同,只是它通常不具有與物理路由器相同的所有動態路由協議或訪問控制列表 (ACL) 功能(除非您購買了非常好的第 3 層轉變)。然而,嵌入式路由器的優點是速度非常快,並且沒有與它所插入的物理交換機埠相關的瓶頸。

在我們這裡的“合作”租戶範例中,您可能會選擇獲取第 3 層交換機,將其插入中繼埠,以便來自兩個客戶 VLAN 的流量到達它,然後使用 IP 地址和 VLAN 成員資格配置 SVI,以便它“出現”在兩個客戶 VLAN 中。完成此操作後,只需調整核心路由器上的路由表和第 3 層交換機中的嵌入式路由器,以便租戶的 VLAN 之間流動的流量由第 3 層交換機內的嵌入式路由器路由,而不是“棒上的路由器”。

使用第 3 層交換機並不意味著仍然不會存在與互連交換機的中繼埠頻寬相關的瓶頸。不過,這與 VLAN 解決的問題是正交的。VLAN 與頻寬問題無關。通常,頻寬問題通過獲得更高速的交換機間連接或使用鏈路聚合協議將幾個低速連接“綁定”在一起形成一個虛擬的高速連接來解決。除非所有創建要由後面 3 交換機內的嵌入式路由器路由的幀的設備本身都直接插入第 3 層交換機上的埠,否則您仍然需要擔心交換機之間的中繼頻寬。第 3 層交換機不是靈丹妙藥,但通常比“

動態 VLAN

最後,某些交換機還具有提供動態 VLAN 成員資格的功能。與其將給定埠分配為給定 VLAN 的訪問埠,不如在連接設備時動態更改埠的配置(訪問或中繼,以及哪些 VLAN)。動態 VLAN 是一個更高級的主題,但知道該功能存在可能會有所幫助。

功能因供應商而異,但通常您可以根據連接設備的 MAC 地址、設備的 802.1X 身份驗證狀態、專有和基於標準的協議(例如 CDP 和 LLDP)配置動態 VLAN 成員資格,以允許 IP 電話“發現”語音流量的 VLAN 編號)、分配給客戶端設備的 IP 子網或乙太網協議類型。

引用自:https://serverfault.com/questions/188350