1. 程式人生 > >網路協議 4 - 交換機與 VLAN:辦公室太複雜,我要回學校

網路協議 4 - 交換機與 VLAN:辦公室太複雜,我要回學校

    上一次,我們通過宿舍聯網打魔獸的需求,認識瞭如何通過物理層和鏈路層組建一個宿舍區域網。今天,讓我們切換到稍微複雜點的場景,辦公室。

    在這個場景裡,就不像在宿舍那樣,搞幾根網線,拉一拉,扯一扯就可以了。一個辦公室少到數十人,大至上百人,每個人都有一個網口,如果再算上整個樓層樓層、甚至整棟樓,這個網口就更多了。

    類似辦公室這樣,這些複雜場景的網路佈線就牽扯出一個專業名詞-拓撲結構

什麼是拓撲結構?

    在解釋拓撲結構前,我們要先明白什麼是拓撲。拓撲是 Topology 的音譯,直譯是地誌學,最早指研究地形、地貌相類似的有關學科。現在是研究幾何圖形或空間在連續改變形狀後還能保持不變的一些性質的一個學科。

    計算機網路的拓撲結構是引用拓撲學中研究與大小、形狀無關的點、線關係的方法,把網路中的計算機和通訊裝置抽象為一個點,把傳輸介質抽象為一條線,由點和線組成的幾何圖形就是計算機網路的拓撲結構

辦公室拓撲結構的形成

    上面說過,每個辦公室會有幾十個甚至上百個網口。這個時候,一個交換機肯定不夠用,需要多臺交換機連線,而多臺交換機連線就形成了一個稍微複雜的拓撲結構。

    我們先來看兩臺交換機的情形。兩臺交換機連線著三個區域網,每個區域網上都有多臺機器。如果機器 1 只知道機器 4 的 IP 地址,當它想要訪問機器 4 時,把包發出去的時候,它必須知道機器 4 的 MAC 地址。我們來看看這個過程:

  • 機器 1 發起廣播,機器 2 和交換機 A 都收到廣播。機器 2 收到廣播後,知道不是找它的,所以沒它什麼事。
  • 交換機 A 一開始是不知道任何拓撲資訊的,在它收到這個廣播後,採取的策略是,除了廣播包來的方向外,它還要轉發給其他所有的網口。
  • 機器 3 和交換機 B 收到了廣播資訊了,同樣的,機器 3 也知道和它沒什麼關係。
  • 交換機 B 收到廣播資訊後,這時候它也不知道任何拓撲資訊,所以也進行廣播,將包轉發到區域網三,也就是機器 4 和機器 5。
  • 機器 4 收到廣播是,它發現是找它的,就主動響應說,這是找我的,我的 MAC 地址是 XXX。

    在機器 1 收到機器 4 的 MAC 地址後,一個 ARP 請求就成功完成了。

    在上面過程中,交換機 A 和交換機 B 都是能夠學習到這樣的資訊:

  • 機器 1 是在左邊這個網口。

    當了解這樣的資訊後,如果機器 2 訪問 機器 1,機器 2 發起一個 ARP 請求獲取機器 1 的 MAC 地址,這個廣播訊息會發給機器 1 和交換機 A。這個時候交換機 A 已經知道機器 1 是在左邊的網絡卡,所以它就不會將請求廣播到區域網二和區域網三。

    就這樣,當交換機學習完所有的拓撲資訊後,兩臺交換機工作得會越來越好。

    但是隨著辦公室越來越大,交換機數量肯定會越來越多,當整個拓撲結構複雜,這麼多網線繞來繞去,不可避免的就會出現一些意料之外的情況,其中最常見的問題就是環路問題

環路與廣播風暴

    如下圖。當兩個交換機環路連線兩個區域網時,你知道會出現什麼結果嗎?

    我們來想象下機器 1 訪問機器 2 的過程。

  • 機器 1 發起 ARP 廣播
  • 機器 2 收到廣播,把 MAC 地址返回。

    咦,整個過程很順利,沒什麼問題。

    但是我們忽略了,兩個交換機也是能收到廣播包的。我們來看看兩個交換機的廣播過程:

  1. 交換機 A 開始不知道拓撲資訊,於是將廣播資訊放到區域網二
  2. 訊息在區域網二廣播,交換機 B 右網絡卡收到廣播訊息,於是將資訊放到區域網一
  3. 訊息在區域網一廣播,交換機 A 左網口收到訊息,又將廣播資訊放到區域網二
  4. ......

    看出來了嗎?這樣一直廣播,就會形成一個環路,最終成為廣播風暴,直到網路癱瘓。

上面過程,可能會有人說,兩臺交換機逐漸學習到拓撲結構後 ,是不是就可以了?那就讓我們來看下它們的學習過程:

  1. 在區域網一,交換機 A、B 收到機器 1 的廣播包後,知道機器 1 都是在左網口
  2. 當廣播放到區域網二後,交換機 B 右網口又收到了來自機器 1 的廣播包,於是就誤會機器 1 換位置了,就記住了機器 1 是在右網口,把之前學習到的資訊清理掉
  3. 同理,交換機 A 右網口收到了機器 1 的廣播包,同樣誤會了,於是也學會了,機器 1 在右網口,不是在左網口

    就這樣,兩個交換機會不斷重新整理“三觀”,機器 1 是在左網口,過一會,發現不對,機器 1 是在右網口,過了一會,又發現不對,是在左網口。於是,又形成了一個“廣播風暴”。

    那麼,有什麼方法可以解決環路問題呢?這就到了 STP 協議出場的時候了。

STP 協議中那些難以理解的概念

    在資料結構中,有一個方法叫作最小生成樹。有環的我們常稱為。將圖中的環破了,就生成了。而在計算機網路中,生成樹的演算法叫作 STP(Spanning Tree Protocol)

    STP 協議比較複雜,一開始很難看懂,讓我們來通過華山論劍,決出五嶽盟主的方式看看生成樹的過程。

    在 STP 協議裡面有很多概念,譯名就非常拗口,讓我們以門派中的職位來幫助大家理解。

  • Root Bridge,也就是根交換機。可以比喻為“掌門”交換機,是某棵樹的老大。
  • Designated Bridge,也就是指定交換機。這個比較難理解,可以想象成一個“小弟”,對於樹來說,就是一棵樹的樹枝。所謂“指定”的意思是,我拜誰做大哥,其他交換機通過這個交換機到達根交換機,也就相當於拜他做了大哥。這裡注意是樹枝,不是葉子,因為葉子往往是主機。
  • Bridge Protocol Data Units(BPDU),網橋協議資料單元。可以比喻為“相互比較實力“的協議。行走江湖,比的就是武功,拼的就是實力。當兩個交換機碰見的時候,也就是相連的時候,就需要互相比比內力。BPDU 只有掌門能發,隸屬於某個掌門的交換機只能傳達掌門的指示。
  • Priority Vector,優先順序向量。可以比喻為實力(值越小越牛)。實力是啥?就是一組 ID,[Root Bridge ID, Root Path Cost, Bridge ID, and Port ID]。為什麼這樣設計呢?這是因為要看怎麼來比實力。先看 Root Bridge ID,也就是老大的 ID,發現掌門一樣,那就是師兄弟;再比 Root Path Cost,也就是我距離我老大的距離,也就是拿和掌門的關係比,看同一個門派內誰和老大關係鐵;最後比 Bridge ID,比我自己的 ID,拿自己的本事比。

    概念都準備好了,下面我們看看 STP 是怎麼工作的。

STP 的工作過程

    一開始,江湖紛爭,異常混亂。大家都覺得自己是掌門,誰也不服誰。於是,所有的交換機都認為自己是掌門,每個網橋都分配了一個 ID。這個 ID 裡有管理員分配的優先順序,當然管理員指定哪些交換機效能好,就給它們分配高的優先順序。這種交換機生下來武功就很高,起步就是喬峰。

    既然都是掌門,互相都連長網線,那就互相傳送 BPDU 來比功夫唄。這一比就發現,有人是嶽不群,有人是封不平。贏的人接著做掌門,輸的就只好做小弟了。當掌門的還會繼續發 BPDU,而輸的人就沒有機會了,它們就只有在收到掌門發的 BPDU 的時候,轉發一下,表示服從命令。

    數字表示優先順序。就像上面的圖,5 和 6 碰見了,6 的優先順序低(數字越小,優先順序越高),所以乖乖做小弟。於是,一個小門派形成,5 是掌門,6 是小弟。其他諸如 1-7、2-8、3-4 這樣的小門派也誕生了。接著,這些小的門派就好相互合併。

    合併的過程會出現以下四種情形。

情形一:掌門遇見掌門

    當 5 碰到了 1,掌門碰見掌門,1 覺得自己是掌門,5 也剛剛跟別人 PK 完,成為掌門。這倆掌門比功夫,最終 1 勝出,於是 5 就率領所有的小弟歸順。結果就是 1 成功大掌門。

情形二:同門相遇

    同門相遇可以是掌門與自己的小弟相遇,這說明存在“環”了。這個小弟已經通過其他門路拜在你門下,結果你還不認識,還 PK 了一把。結果掌門發現這個小弟功夫不錯,不應該級別這麼低,就把它招到門下親自帶,那這個小弟就相當於升職了。

    我們再來看,假如 1 和 6 相遇。6 原來就拜在 1 的門下,只不過 6 的上司是 5,5 的上司是 1。1 發現,6 距離我只有 2,比從 5 這裡過來的 5(=4+1)近多了,那 6 就直接向我彙報吧。於是,5 和 6 分別彙報給 1。

    同門相遇還可以是小弟相遇。這個時候就要比較誰和掌門的關係近。近的當大哥。剛才 5 和 6 同時向 1 彙報,後來 5 和 6 相遇比功夫的時候發現,5 你直接彙報給 1 距離是 4,如果 5 彙報給 6 再彙報給 1 ,距離只有 2+1=3,所以 5 乾脆拜 6 為上司。

情形三:掌門與其他幫派小弟相遇

    小弟拿本幫掌門和這個掌門比,贏了,這個掌門就拜入門下,輸了,就拜入新掌門,並且會主鍵拉攏和自己連線的兄弟,一起“棄暗投明”。

    例如,2 和 7 相遇,雖然 7 是小弟,2 是掌門,就個人武功而言,2 比 7 強,但是 7 的掌門是 1,比 2 牛,所以沒辦法,2 要拜入 7 的門派,並且連同自己的小弟都一起拜入。

情形四:不同小弟相遇

    各自拿掌門比較,輸了的拜入贏的門派,並且逐漸將與自己連線的兄弟拉入新門派。

    例如,5 和 4 相遇。雖然 4 的武功好於 5,但是 5 的掌門是 1,比 4 牛,於是 4 拜入 5 的門派。後來當 3 和 4 相遇的時候,3 發現 4 已經“叛變”了,4 說我現在老大是 1,比你牛,要不你也來吧,於是 3 也拜入 1。

    最紅,生成一棵樹,武林一統,天下太平。但是天下統一久了,也會有相應問題。常見的有廣播和安全問題

廣播和安全問題

    機器多了,交換機也多了,就算交換機比 Hub 智慧一些,但是還是難免有廣播的問題。一大堆機器,相關的部門、不相關的部門,廣播一大堆,效能就下來了。

    就像一家公司,創業的時候,十來個人,坐在一個會議室,有事情大家討論下,非常方便。當時如果變成了 50 個,全在一個會議室吵吵,就會亂的不得了。

    另一方面,一個公司裡,有的部門需要保密,比如人事部門,肯定要討論升職加薪的事情。但是如果在一個廣播域裡,碰到一個會抓包的程式設計師,就能看的沒有加密的敏感資訊。

    那咋辦?能咋辦,分部門,分會議室唄,讓我們來看看怎麼分。

    有兩種分的方法。一個是物理隔離。每個部門設一個單獨的會議室,對應到網路方面,就是每個部門有單獨的交換機,配置單獨的子網。這樣部門之間的溝通就需要路由器了。

    這樣的問題在於,有的部門人多,有的部門人少,而且部門的人數也會頻繁發生變化,如果每個部門有單獨的交換機,網口多了浪費,少了又不夠用。

    這時候,虛擬隔離就出來了。虛擬隔離,就是我們常說的 VLAN,或者叫做虛擬區域網

    使用 VLAN,一個交換機上會連屬於多個區域網的機器,那交換機是怎麼區分哪個機器屬於哪個區域網呢?

    我們只需要在原來的二層頭上加一個 TAG,裡面有個 VLAN ID,共 12 位,可以劃分 4096 個 VLAN。對於普通辦公室,這個數量應該是夠用的。

    如果我們買的交換機支援 VLAN,當這個交換機把二層的頭取下來的時候,就能夠識別這個 VLAN ID。這樣只有相同的 VLAN 的包,才會互相轉發,不同 VLAN 的包,是看不到的。

    這樣,廣播和安全問題就能夠解決了。

這樣,複雜的辦公室網路佈線就被我們用交換機與 VALN 搞定了。

參考:

  1. 百度百科-拓撲結構
  2. 劉超-趣談網路協議系列課