如何利用 OpenFlow 打造一個「無廣播」的網路環境
有沒有試過在實驗室網路或是公司網路內打開 wireshark 來收收看封包?就算自己什麼網路行為都沒做,還是會發現收到一大堆不是自己該收到的封包。為什麼?因為網路上充斥太多的廣播訊息了!什麼是廣播封包?首先,我們先將目光集中在同一個 subnet 中(一般來說,目前的網路設備通常不會讓廣播封包傳到 subnet 的外面),廣播封包就是一種讓同一個 subnet 裏面所有的成員都要收到的封包。常見的封包有 IP 位置為 255.255.255.255 或是 192.168.1.255 這一類的封包以及 MAC 位置為 FF:FF:FF:FF:FF:FF 的訊框。 一般來說,廣播封包的存在有兩個意義: 我不知道我想溝通的對象在哪裡,所以我只好大聲的呼喊希望那個對象會來回應我。 造成這種情況的主因是因為當初網路在設計時是採用分散式的架構。因為分散,所以沒有人知道整個網路的狀況。既然不知道,就只好所有人都去問一遍,這個行為就是廣播。常見的例子是 ARP 以及 DHCP DISCOVER 等。 所有人注意,下面是關於我的資訊 ... 這種情況通常是要招告天下關於我的資訊,所以本來就會廣播給所有人知道。常見的例子是 NetBios 以及 IPv6 Neighbor Discovery 等。 因為過去網路發展的因素,廣播信息似乎是必要的。但其實大部分的人都很討厭廣播,因為在大多數的情況下廣播信息根本不是自己要收的啊,就像是一開始提到的例子。網管人員一般來說也很討厭廣播,因為只會白白佔掉網路頻寬而已。 現在來想想 OpenFlow 的架構,OpenFlow 是一個邏輯上集中式的網路架構,並且在這網路上有個神一般的角色:OpenFlow Controller。那麼,還需要廣播信息的存在嗎? 我不知道要溝通的對象在哪裡?沒關係,Controller 應該知道 ; 招告天下,不用,告訴 Controller 就好了 。當然要改變 Host 的行為是不可能的事情,但我們可以透過 OpenFlow Entry 的設定來 透過非廣播的方式來處理廣播封包 。 在額外多討論一件事情。當網路上不存在廣播封包時, 請問一個 Loop-Free 的網路是否還是必須的?換句話說,我們還需要 Spanning Tree Protocol 嗎? 歡迎大家提出自己的意見(有人會留言嗎?) ...