趣談網絡協議 - 第6講 | 交換機與VLAN:辦公室太複雜,我要回學校

這系列相關博客,參考 極客時間-趣談網絡協議

上一次,我們在宿舍裏組建了一個本地的局域網LAN,可以愉快地玩遊戲了。這是一個非常簡單的場景,因爲只有一臺交換機,電腦數目很少。今天,讓我們切換到一個稍微複雜一點的場景,辦公室。

拓撲結構是怎麼形成的?

我們常見到的辦公室大多是一排排的桌子,每個桌子都有網口,一排十幾個座位就有十幾個網口,一個樓層就會有幾十個甚至上百個網口。如果算上所有樓層,這個場景自然比你宿舍裏的複雜多了。具體哪裏複雜呢?我來給你具體講解。

首先,這個時候,一個交換機肯定不夠用,需要多臺交換機,交換機之間連接起來,就形成一個稍微複雜的拓撲結構。

我們先來看兩臺交換機的情形。兩臺交換機連接着三個局域網,每個局域網上都有多臺機器。如果機器 1只知道機器4的IP地址,當它想要訪問機器4, 把包發出去的時候,它必須要知道機器4的MAC地址。
在這裏插入圖片描述
於是機器1發起廣播,機器2收到這個廣播,但是這不是找它的,所以沒它什麼事。交換機 A 一開始是不知道任何拓撲信息的,在它收到這個廣播後,採取的策略是,除了廣播包來的方向外,它還要轉發給其他所有的網口。於是機器3也收到廣播信息了,但是這和它也沒什麼關係。

當然,交換機B也是能夠收到廣播信息的,但是這時候它也是不知道任何拓撲信息的,因而也是進行廣播的策略,將包轉發到局域網三。這個時候,機器4機器5都收到了廣播信息。機器4主動響應說, 這是找我的,這是我的MAC地址。於是一個ARP請求就成功完成了。

在上面的過程中,交換機A和交換機B都是能夠學習到這樣的信息:機器1是在左邊這個網口的。當瞭解到這些拓撲信息之後,情況就好轉起來。當機器2要訪問機器1的時候,機器2並不知道機器1的 MAC地址,所以機器2會發起一個ARP請求。這個廣播消息會到達機器1,也同時會到達交換機A。

這個時候交換機A已經知道機器1是不可能在右邊的網口的,所以這個廣播信息就不會廣播到局域網二和局域網三。

機器3要訪問機器1的時候,也需要發起一個廣播的ARP請求。這個時候交換機A和交換機B都能夠收到這個廣播請求。交換機A當然知道主機A是在左邊這個網口的,所以會把廣播消息轉發到局域網一。同時,交換機B收到這個廣播消息之後,由於它知道機器1是不在右邊這個網口的,所以不會將消息廣播到局域網三。

如何解決常見的環路問題?

這樣看起來,兩臺交換機工作得非常好。隨着辦公室越來越大,交換機數目肯定越來越多。當整個拓撲結構複雜了,這麼多網線,繞過來繞過去,不可避免地會出現一些意料不到的情況。其中常見的問題就是環路問題。

例如這個圖,當兩個交換機將兩個局域網同時連接起來的時候。你可能會覺得,這樣反而有了高可用性。
在這裏插入圖片描述
但是卻不幸地出現了環路。出現了環路會有什麼結果呢? 我們來想象一下機器1訪問機器2的過程。一開始,機器1並不知道機器2的MAC地址,所以它需要發起一個ARP的廣播。廣播到達機器2,機器2會把MAC地址返回來,看起來沒有這兩個交換機什麼事情。

但是問題來了,這兩個交換機還是都能夠收到廣播包的。交換機A 一開始是不知道機器2在哪個局域網 的,所以它會把廣播消息放到局域網二,在局域網二廣播的時候,交換機B右邊這個網口也是能夠收到廣播消息的。交換機B會將這個廣播息信息發送到局域網一。局域網一的這個廣播消息,又會到達交換機A左邊的這個接口。交換機A這個時候還是不知道機器2在哪個局域網,於是將廣播包又轉發到局域網二。左轉左轉左轉,好像是個圈哦。

可能有人會說,當兩臺交換機都能夠逐漸學習到拓撲結構之後,是不是就可以了?

別想了,壓根兒學不會的。機器1的廣播包到達交換機A和交換機B的時候,本來兩個交換機都學會了機器1是在局域網一的,但是當交換機A將包廣播到局域網二之後,交換機B右邊的網口收到了來自交換機A的廣播包。根據學習機制,這徹底損壞了交換機B的三觀,剛纔機器1還在左邊的網口呢,怎麼又出現在右邊的網口呢?哦,那肯定是機器1換位置了,於是就誤會了,交換機B就學會了,機器1是從右邊這個網口來的,把剛纔學習的那一條清理掉。同理,交換機A右邊的網口,也能收到交換機B轉發過來的廣播包,同樣也誤會了,於是也學會了,機器1從右邊的網口來,不是從左邊的網口來。

然而當廣播包從左邊的局域網一廣播的時候,兩個交換機再次刷新三觀,原來機器1是在左邊的,過一會兒,又發現不對,是在右邊的,過一會,又發現不對,是在左邊的。

這還是一個包轉來轉去,每臺機器都會發廣播包,交換機轉發也會複製廣播包,當廣播包越來越多的時 候,按照上一節講過一個共享道路的算法,也就是路會越來越堵,最後誰也別想走。所以,必須有一個方法解決環路的問題,怎麼破除環路呢?

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

在數據結構中,有一個方法叫作最小生成樹。有環的我們常稱爲圖。將圖中的環破了,就生成了樹。在計算機網絡中,生成樹的算法叫作STP,全稱Spanning Tree Protocol

STP協議比較複雜,一開始很難看懂,但是其實這是一場血雨腥風的武林比武或者華山論劍,最終決出五嶽盟主的方式。
在這裏插入圖片描述
在STP協議裏面有很多概念,譯名就非常拗口,但是我一作比喻,你很容易就明白了。

  • Root Bridge,也就是根交換機。這個比較容易理解,可以比喻爲"掌門”交換機,是某棵樹的老大,是掌門,最大的大哥。
  • Designated Bridges,有的翻譯爲指定交換機。這個比較難理解,可以想像成一個"小弟”,對於樹來說,就是一棵樹的樹枝。所謂"指定”的意思是,我拜誰做大哥,其他交換機通過這個交換機到達根交換機,也就相當於拜他做了大哥。這裏注意是樹枝,不是葉子,因爲葉子往往是主機。
  • 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,比我自己的心,拿自己的本事比。

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個人,全在一個會議室裏面吵吵,就會亂的不得了。

你們公司有不同的部門,有的部門需要保密的,比如人事部門,肯定要討論升職加薪的事兒。由於在同一個廣播域裏面,很多包都會在一個局域網裏面飄啊飄,碰到了一個會抓包的程序員,就能抓到這些包,如果沒有加密,就能看到這些敏感信息了。還是上面的例子,50個人在一個會議室裏面七嘴八舌的討論,其中有兩個HR,那他們討論的問題,肯定被其他人偷偷聽走了。

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

有兩種分的方法,一個是物理隔離。每個部門設一個單獨的會議室,對應到網絡方面,就是每個部門有單獨的交換機,配置單獨的子網,這樣部門之間的溝通就需要路由器了。路由器咱們還沒講到,以後再說。這樣的問題在於,有的部門人多,有的部門人少。人少的部門慢慢人會變多,人多的部門也可能人越變越少。如果每個部門有單獨的交換機,口多了浪費,少了又不夠用。

另外一種方式是虛擬隔離,就是用我們常說的VLAN,或者叫虛擬局域網。使用VLAN,一個交換機上會連屬於多個局域網的機器,那交換機怎麼區分哪個機器屬於哪個局域網呢?
在這裏插入圖片描述
我們只需要在原來的二層的頭上加一個TAG,裏面有一個VLAN ID,—共12位。爲什麼是12位呢? 因爲12位可以劃分4096個VLAN(212=40962^{12}=4096)。這樣是不是還不夠啊。現在的情況證明,目前雲計算廠商裏面絕對不止4096個用戶。當然每個用戶需要一個VLAN了啊,怎麼辦呢,這個我們在後面的章節再說。

如果我們買的交換機是支持VLAN的,當這個交換機把二層的頭取下來的時候,就能夠識別這個VLAN ID。這樣只有相同VLAN的包,纔會互相轉發,不同VLAN的包,是看不到的。這樣廣播問題和安全問題就都能夠解決了。
在這裏插入圖片描述
我們可以設置交換機每個口所屬的VLAN。如果某個口坐的是程序員,他們屬於VLAN 10;如果某個口坐的是人事,他們屬於VLAN 20;如果某個口坐的是財務,他們屬於VLAN 30。這樣,財務發的包,交換機只會轉發到VLAN 30的口上。程序員啊,你就監聽VLAN 10吧,裏面除了代碼,啥都沒有。

而且對於交換機來講,每個VLAN的口都是可以重新設置的。一個財務走了,把他所在的座位的口從VLAN 30移除掉,來了一個程序員,坐在財務的位置上,就把這個口設置爲VLAN 10,十分靈活。

有人會問交換機之間怎麼連接呢?將兩個交換機連接起來的口應該設置成什麼VLAN呢?對於支持 VLAN 的交換機,有一種口叫作Trunk 口。它可以轉發屬於任何VLAN的口。交換機之間可以通過這種口相互連接。

好了,解決這麼多交換機連接在一起的問題,辦公室的問題似乎搞定了。然而這只是一般複雜的場景, 因爲你能接觸到的網絡,到目前爲止,不管是你的臺式機,還是筆記本所連接的網絡,對於帶寬、高可用等都要求不高。就算出了問題,一會兒上不了網,也不會有什麼大事。

我們在宿舍、學校或者辦公室,經常會訪問一些網站,這些網站似乎永遠不會"掛掉”。那是因爲這些網站都生活在一個叫做數據中心的地方,那裏的網絡世界更加複雜。在後面的章節,我會爲你詳細講解。

小結

好了,這節就到這裏,我們這裏來總結一下:

  • 當交換機的數目越來越多的時候,會遭遇環路問題,讓網絡包迷路,這就需要使用STP協議,通過華山論劍比武的方式,將有環路的圖變成沒有環路的樹,從而解決環路問題
  • 交換機數目多會面臨隔離問題,可以通過VLAN形成虛擬局域網,從而解決廣播問題和安全問題

最後,給你留兩個思考題。

  1. STP協議能夠很好的解決環路問題,但是也有它的缺點,你能舉幾個例子嗎?
  2. 在一個比較大的網絡中,如果兩臺機器不通,你知道應該用什麼方式調試嗎?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章