1. 程式人生 > >趣談網路協議---軟體定義網路 SDN:共享基礎設施的小區物業管理辦法

趣談網路協議---軟體定義網路 SDN:共享基礎設施的小區物業管理辦法

軟體定義網路(SDN) 在這裡插入圖片描述

  • 控制與轉發分離。轉發平面是一個個虛擬或物理的網路裝置。控制平面是統一的控制中心。
  • 控制平面與轉發平面之間的開放介面。控制器向上提供介面,被應用層呼叫,向下呼叫介面,控制網路裝置。
  • 邏輯上的集中控制。邏輯上集中的控制平面可控制多個轉發裝置,即控制整個物理網路,可獲得全域性的網路狀態檢視,並根據網路全域性網路狀態檢視實現對網路的優化控制。

OpenFlow 和 OpenSwitch

OpenFlow 是 SDN 控制器和網路裝置之間互通的南向介面協議。

OpenvSwitch 用於建立軟體的虛擬交換機,支援 OpenFlow 協議。

兩者被統一的 SDN 控制器管理,從而實現物理機和虛擬機器的網路連通。 在這裡插入圖片描述

SDN 控制器如何通過 OpenFlow 協議控制網路? 在這裡插入圖片描述 在 OpenvSwitch 裡,有一個流表規則,任何通過這個交換機的包,都會經過這些規則進行處理,從而接收、轉發、放棄。

流表裡有多個表格,每個表格有多行,每行是一條規則,每條規則有優先順序。 在這裡插入圖片描述 通過流表,可對收到的網路包進行處理。 在這裡插入圖片描述 OpenvSwitch 實現 VLAN 功能

OpenvSwitch 埠 port 分兩種:

1、access port

  • 配置 tag,從此埠進來的包會被打上這個 tag。
  • 如果網路包本身帶有的 VLAN ID 等於 tag,則會從這個 port 發出。
  • 從 access port 發出的包不帶 VLAN ID。

2、trunk port

  • 不配置 tag, 配置 trunks。
  • 如果 trunks 為空,允許所有的包通過。
  • 如果 trunks 不空,則僅僅 帶著 trunks 允許的 VLAN ID 的包通過。

建立環境:

ovs-vsctl add-port ubuntu_br first_br
ovs-vsctl add-port ubuntu_br second_br
ovs-vsctl add-port ubuntu_br third_br
ovs-vsctl set Port vnet0 tag=101
ovs-vsctl set Port vnet2 tag=102
ovs-vsctl set Port first_br tag=103
ovs-vsctl clear Port second_br tag
ovs-vsctl set Port third_br trunks=101, 102

禁止 MAC 學習:

ovs-vsctl set bridge ubuntu_br flood-vlans=101, 102, 103

在這裡插入圖片描述

  • 從 192.168.100.102 ping 192.168.100.103,first_if、sencond_br 可收到包。first_br 出去的包沒有 VLAN ID,second_br 是 trunk port,出來的包頭有 VLAN ID。
  • 從 192.168.100.100 ping 192.168.100.105,second_if、third_if 可收到包,包頭裡 VLAN ID = 101。但 ping 不通,因為 third_if 不屬於某個 VLAN。
  • 從 192.168.100.101 ping 192.168.100.104,second_if、third_if 可收到包,包頭裡 VLAN ID = 102。

用 OpenvSwitch 模擬網絡卡繫結,連線交換機 bond_mode 可設定如下三個值:

  • active-backup:active 失效時,backup 替換。
  • blance-slb:流量安裝源 MAC 和 output VLAN 進行負載均衡。
  • blance-tcp:在支援 LACP 協議的情況下,可根據 L2, L3, L4 進行負載均衡。

環境: 在這裡插入圖片描述 建立 bond 連線:

ovs-vsctl add-bond br0 bond0 first_br second_br
ovs-vsctl add-bond br1 bond1 first_if second_if
ovs-vsctl set Port bond0 lacp=active
ovs-vsctl set Port bond1 lacp=active

1、預設 bond_mode 是 active-backup 模式,一開始 active 的是 first_br 和 first_if。

從 192.168.100.100 ping 192.168.100.102,從 192.168.100.101 ping 192.168.100.103,包都從 first_br 通過。

如果把 first_if 設成 down,則 second_if 開始有流量。

2、bond_mode 設為 balance-slb。

從 192.168.100.100 ping 192.168.100.102,從 192.168.100.101 ping 192.168.100.103,包會分流。

ovs-vsctl set Port bond0 bond_mode=blance-slb
ovs-vsctl set Port bond1 bond_mode=blance-slb

OpenvSwitch 如何做到?架構圖如下 在這裡插入圖片描述 (1)在使用者態,有兩個重要的程序,兩個重要的命令列工具。

  • OVSDB 程序。ovs-vsctl 命令列與之通訊,建立虛擬交換機、埠,將埠新增到虛擬交換機,OVSDB 將這些拓撲資訊儲存在一個本地檔案中。
  • vswitchd 程序。ovs-ofctl 命令列與之通訊,下方流表規則,vswitchd 將流表放在使用者態 Flow Table 中。

(2)在核心態,

  • 核心模組 OpenvSwitch.ko,為圖中的 Datapath 部分。在網絡卡上註冊一個函式,每當有網路包到達此網絡卡時,該函式被呼叫,提取各個層的重要資訊。
  • 核心態 Flow Table。核心模組在這個核心流表中匹配規則,如果匹配上,則執行操作、修改包,或轉發或丟棄。如果核心沒有匹配上,則進入使用者態,使用者態和核心態之間通過 Netlink 通訊。

核心通過 upcall,告知使用者態程序 vswitchd 在使用者態 Flow Table 匹配規則,核心 Flow Table 裡只保留部分規則,過一陣會過期。

使用者態匹配了流表規則後,在使用者態執行操作,同時將匹配成功的流表通過 reinject 下發到核心。

呼叫 openflow 協議的,是本地命令列工具或遠端的 SDN 控制器。一個重要的 SDN 控制器是 OpenDaylight。可通過 OpenDaylight,將兩個交換機之間配置通,或不通,還可配置虛擬 IP 地址,在不同機器之間實現負載均衡。

如何在雲端計算中使用 OpenvSwitch? 在這裡插入圖片描述

1、OpenvSwitch 本身支援 VLAN,所有的虛擬機器可放在一個網橋 br0 上,通過不同的使用者配置不同的 tag,就能實現隔離。

使用者 A、B 的虛擬機器都可在 br0 上,只是設定了不同的 tag。

2、建立一個虛擬交換機 br1,將物聯網絡合虛擬網路隔離。物理網路有物理網的 VLAN 規劃,虛擬機器在一臺物理機上,所有的 VLAN 都從 1 開始,一般不會超過 4096。

如圖中,上面的物理機中,使用者 A 的 tag 是 1,B 的 tag 是 2,下面的物理機中,A 的 tag 是 7,B 的 tag 是6。