幫您在進入研究 Neutron 細節之前就清楚知道 Neutron 是什麼、有什麼、為什麼有,這樣您在研究這些複雜網路技術時始終清楚定位不致于迷失方向。 本文適合希望迅速瞭解 Neutron 全部特性的架構師,適合希望研究 Neutron 代碼的程式師以及希望運行 Neutron 的測試人員,也適合想瞭解基礎網路內幕知識的讀者。
本文不會講解每一種網路技術的細節,也不會講解 Neutron 網路的實現細節,而是高度概括這些基礎網路技術的技術本質,試圖幫您在這些網路技術和 Neutron 之間建立更高級別的聯繫,讓大家舉重若輕,全域系統把握 Neutron。 所以閱讀本文前,瞭解以下知識將有助於本文的理解:
瞭解 OSI 七層模型,瞭解基本的 L2 層幀轉發、L3 層路由轉發等網路基礎知識。 瞭解 Neutron 網路或者其他任何雲網路也將有助於本文的理解。
Neutron 是什麼?
一句話描述,Neutron 是 OpenStack 的一個子模組,它的實質是一個定義良好的框架用來驅動 L2-L7 層不同的底層網路技術來為協力廠商應用獨立地提供租戶隔離的虛擬網路服務。
上面的定義只是筆者對 Neutron 長期以來一個最直觀的感受,仁者見仁,智者見智,相信您在讀完本文後,對於「Neutron 是什麼」這個問題會有自己的看法。
筆者之前在 developworks 上曾發表過一篇文章,《漫步雲中網路》,在那篇文章中,筆者也沒有直接具體講 Quantum HOWTO 的問題(目前 Quantum 因為與一家公司重名,所以已更名為 Neturon),而是描述了 Qauntum 網路背後的一般原理,讀者至少可以從那篇文章獲取如下知識:
知道 Linux 下實現虛擬網卡一般使用 TAP/TUN 技術。 一個 TAP 設備就是 Linux 下的一個進程,兩個虛機通過虛擬網卡的通信,實際上就是 Linux 中兩個進程間的通信。 所以很多 Hypervisor 為了提升同一物理機中的兩台虛機之間的網路 IO 性能採用 DMA(直接記憶體存取)技術也就毫不奇怪了。 知道在 L2 層,Linux 橋接器是虛擬交換器的一種實現,知道無論是虛擬交換器還是物理交換器,原理都是一樣的。 知道 L2 層用於使用 VLAN 來做物理隔離。 知道 FLAT 網路和 VLAN 網路的根本區別。 知道在 L3 層如何通過 ipv4 forward 功能進行靜態路由轉發,知道如何使用 iptables 的 SNAT 和 DNAT 規則實現內網中的虛機訪問外網和外網訪問內網上的虛機(也就是所謂的浮動 IP)。
在我寫第一季的時候,Quantum 只實現了 L2,L3 兩層,所以在《漫步雲中網路》一文也就只涉及了 L2、L3 兩層背後的網路原理知識。 但是現在 Neutron 在 L2 和 L3 層上實現了更多的網路技術,同時在 L4-L7 層也有更多的動作,所以有必要出第二季對整個 L2-L7 層的網路進行一個全面的疏理。 本季中也會概括 L2、L3 的理論知識,但不會像第一季中那麼詳細,大家也可以結合第一季進行學習。 所以,本文的主要內容有:
L2 層:交換器的原理;為什麼會出現 VLAN;Neutron 中 FLAT 與 VLAN 的區別; L3 層:Linux 上實現靜態路由的技術(namespace + ipv4 forward + iptables);動態路由;N eutron 用 L3 層的 GRE 遂道技術克服 VLAN 大小的限制; 利用 L3 層擴展 L2 層的遂道技術:VXLAN; NVGRE; 利用 L2 層擴展 L3 層的標籤技術:MPLS; 區別于傳統路由轉發的流轉發技術:OpenFlow 以及 SDN 的實質; L4-L7 層:如 LBaaS;FWaaS; VPNaaS; NATaaS
OSI 七層模型
提到網路不得不提到 OSI 七層模型,從上到下,OSI 分為七層:
L7,應用層 L6,展示層 L5,工作階段層 L4,運輸層 L3,網路層 L2,資料連結層 L1,實體層
對於 OSI 七層模型至少得知道下列常識:
L2 層主要通過 MAC 位址進行幀轉發 L3 層主要通過 IP 位址進行包轉發 L4 層再結合埠 PORT 來唯一標誌一個應用程式 協定是通信雙方對資料的一個理解,例如在 L7 層有我們常用的協定 HTTP 協定,在 HTTP 協定上傳輸的是通信雙方都理解的 HTML 資料;在 L4 層有兩大重要協定,不需連線的 UDP 和連線導向的 TCP。 可靠傳輸可以通過 TCP 協定來實現,對於下面的 L2,L3 層並不需要實現可靠傳輸機制,像 L2 層,傳輸資料幀的過程中出了錯誤簡單丟棄就行,上層的 TCP 自然會控制它重傳。 socket 不是協定,只是 L4 層傳輸資料的一個介面定義。 當網卡接收到資料之後,硬體網卡會給 CPU 發中斷,CPU 在運算速度內指示作業系統軟體從網卡緩衝區取走資料,然後作業系統將資料交給 TCP/IP 棧來處理,到了 L2 層,解析 L2 層資料幀頭中的 MAC 位址來決定 L2 中的轉發,如需 3 層轉發就交給上面的 L3 層解析出資料包頭中的 IP 位址來決定 L3 中的轉發,依此類推。
L1
L1 是實體層,主要是涉及硬體的一些電氣特性,與偏軟體的 Neutron 虛擬網路從知識脈絡上關係甚少,不展開。
L2
FLAT
L2 資料連結層通過交換器設備進行幀轉發。 交換器在接收到幀之後(L2 層叫幀,L3 層叫包)先解析出幀頭中的 MAC 位址,再在轉發表中查找是否有對應 MAC 位址的埠,有的話就從相應埠轉發出去。 沒有,就洪泛(專業術語,即將幀轉發到交換器的所有埠),每個埠上的電腦都檢查幀頭中的 MAC 位址是否與本機網卡的 MAC 位址一致,一致的話就接收資料幀,不一致就直接丟棄。 而轉發表是通過自學習自動建立的。
這裡引出一個重要概念,混雜模式。 預設情況下電腦只接收和本機 MAC 位址一致的資料幀,不一致就丟棄,如果要求電腦接受所有幀的話,就要設置網卡為混雜模式(ifconfig eth0 0.0.0.0 promisc up)。 所以在虛擬橋接器中,如果希望虛機和外部通訊,必須打開橋接到虛擬橋接器中物理網卡的混雜模式特性。
VLAN
FLAT 中的洪泛,經常會在一個局域網內產生大量的廣播,這也就是所謂的「廣播風暴」。 為了隔離廣播風暴,引入了 VLAN 的概念。 即為交換器的每一個埠設置一個 1-4094 的數位,交換器根據 MAC 位址進行轉發的同時也要結合 VLAN 號這個數位,不同的話也要丟棄。 這樣就實現了 L2 層資料幀的物理隔離,避免了廣播風暴。
在 Neutron 中,我們知道,截止到筆者寫這篇文章之時已經實現了 FLAT、VLAN、GRE、VXLAN 四種網路拓撲。 那麼如何區分 FLAT 和 VLAN 呢? 很簡單,結合 VLAN 號和 MAC 位址進行轉發的是 VLAN 模式,只根據 MAC 位址進行轉發的是 FLAT 模式。
VLAN 的缺點與大 L2 層技術
實際上,遂道技術並不能完全歸類于 L2 層。 因為有基於 L2 層的遂道協定,例如 PPTP 和 L2TP 等;也有基於 L3 層的遂道,如 GRE、VXLAN、NVGRE 等;但是這些遂道從技術原理上講差不多,所以筆者將這些技術作為「大 L2 層」放在一塊來描述,但希望讀者不要誤解。
本文只將著重講 Neutron 中用到的 GRE 和 VXLAN 技術。