以 OpenFlow 實 作 區 域 網 路 管 理 模 組 陳 昶 禎 * 高 勝 助 國 立 中 興 大 學 資 訊 科 學 與 工 程 學 系 g101056004@mail.nchu.edu.tw, sjkao@cs.nchu.edu.tw 摘 要 隨 著 雲 端 運 算 的 概 念 普 及, 終 端 使 用 者 得 以 透 過 網 際 網 路 連 接 高 效 能 伺 服 器 達 到 隨 時 隨 地 的 服 務 需 求 為 了 有 效 地 提 升 服 務 品 質 及 增 加 系 統 設 備 的 使 用 率, 除 了 使 用 虛 擬 化 技 術 外, 資 料 中 心 的 為 了 及 時 處 理 動 態 的 網 路 需 求, 網 路 架 構 也 由 傳 統 的 分 散 式 管 理 架 構 演 變 為 將 控 制 層 集 中 管 理 的 新 型 架 構, 本 論 文 基 於 OpenFlow 協 定, 分 析 傳 統 區 域 網 路 服 務 模 組, 並 透 過 OpenFlow 控 制 器, 探 討 將 傳 統 網 路 功 能 模 組 以 OpenFlow 協 定 描 述 時 會 產 生 的 問 題, 並 以 Python 語 言 提 供 系 統 管 理 者 的 網 路 管 理 平 台 本 管 理 平 台 主 要 為 提 供 系 統 管 理 者 一 有 效 率 且 方 便 的 網 路 管 理 方 式, 在 考 量 以 traffic flow 交 換 的 網 路 環 境 下, 達 到 如 流 量 監 控 負 載 平 衡 及 IP 共 享 等 動 態 網 路 管 理 功 能 的 應 用 關 鍵 詞 : 虛 擬 化 Open vswitch SDN OpenFlow Abstract With the popularity in cloud computing, end users can ubiquitously request services to high -performance servers through Internet. In order to provide better quality of service and usage, the virtualization technique is widely adopted. A centralized approach for network operations in the data center adds a new management complexity. This paper introduces a method to resolve the challenges by translating common network management functions into flows based implementation using OpenFlow protocol. Our implementation also provides an efficient and easy way for the administrator. Through the adoption of traffic flow, our implementation is able to provide traffic monitoring, load balancing and IP sharing function. Keywords: Virtualization, Open vswitch, SDN, OpenFlow. 1. 前 言 在 資 訊 產 業 快 速 的 發 展 下, 伺 服 器 朝 著 多 核 心 的 架 構 發 展, 為 了 最 佳 化 伺 服 器 的 使 用 率 並 保 持 各 種 服 務 間 的 隔 離 性 (isolation), 利 用 虛 擬 化 技 術 已 是 服 務 提 供 者 常 用 的 策 略 為 了 降 低 建 置 高 效 能 虛 擬 機 的 成 本, 由 Intel 與 AMD 兩 家 CPU 大 廠 所 提 出 的 硬 體 輔 助 虛 擬 化 設 計 (hardware-assisted virtualization) Intel-VT 與 AMD-V, 使 服 務 提 供 者 取 得 高 效 能 的 虛 擬 機 器 成 本 大 幅 降 低, KVM(kernel-based virtual machine) 即 是 全 虛 擬 化 技 術 加 上 硬 體 輔 助 虛 擬 化 的 虛 擬 機 器 管 理 界 面 (Virtual Machine Monitor) 另 外, 為 提 供 虛 擬 機 器 交 換 網 路 封 包 之 能 力, 需 要 在 實 體 伺 服 器 中 建 置 虛 擬 交 換 器 來 提 供 虛 擬 機 器 與 實 體 網 路 的 封 包 交 換 路 徑, 並 透 過 虛 擬 交 換 器 的 管 理 工 具 進 行 VLAN QoS(Quality of Service) 及 流 量 的 監 測 與 控 管 有 別 於 傳 統 網 路, 虛 擬 交 換 器 的 數 量 往 往 十 分 龐 大, 管 理 上 也 較 為 複 雜 由 美 國 史 丹 佛 大 學 提 出 的 新 型 網 路 架 構 : 軟 體 定 義 網 路 (Software-Defined Networking, SDN), 基 於 OpenFlow 協 定, 將 網 路 分 為 資 料 層 (Data Plane) 與 控 制 層 (Control Plane), 將 虛 擬 交 換 器 的 行 為 管 理 統 一 交 由 控 制 層 的 控 制 器 (Controller) 軟 體 負 責 這 個 架 構 可 以 讓 網 路 管 理 者 借 由 單 一 的 控 制 器, 用 程 式 規 劃 虛 擬 交 換 器 之 間 的 網 路 拓 撲, 進 而 簡 化 管 理 的 複 雜 度 1.1 問 題 描 述 與 動 機 本 論 文 基 於 OpenFlow 協 定, 探 討 將 傳 統 網 路 管 理 技 術 轉 換 成 flow-based 的 規 則 時, 形 成 flow 優 先 權 序 列 性 flow 和 平 行 性 flow 問 題 提 出 以 多 個 Flow Table 為 基 礎 架 構 的 解 決 方 案, 並 實 作 出 不 同 的 flow set 組 合, 進 行 網 路 管 理 技 術 及 網 路 區 塊 [1][2] (network slice) 之 管 理 2. 相 關 研 究 為 了 建 構 以 SDN 架 構 為 基 礎 之 環 境 架 構, 我 們 需 先 了 解 如 何 使 用 Open vswitch 來 管 理 以 KVM 建 立 的 虛 擬 化 叢 集, 以 及 實 現 SDN 架 構 的 OpenFlow 協 定, 以 軟 體 的 方 式 管 理 網 路, 並 以 探 討 管 理 者 在 以 OpenFlow 協 定 為 基 礎 的 網 路 管 理 議 題 相 關 的 技 術 如 下 : 2.1 KVM virtio vhost Kernel-based Virtual Machine (KVM)[3] 是 結 合 硬 體 輔 助 虛 擬 化 技 術 的 Linux 全 虛 擬 化 解 決 方 案, 主 要 是 透 過 動 態 載 入 模 組 (loadable kernel module), 將 Linux 核 心 轉 換 為 一 個 系 統 程 序 (process),kvm 讓 虛 擬 機 器 的 位 址 空 間 獨 立 於 核 心, 虛 擬 機 的 運 算 請 求 得 以 在 核 心 空 間 (kernel-space) 使 用, 而 其 他 的 影 裝 置 模 擬, 則 是 透 過 執 行 於 使 用 者 空 間 (user-space) 的 模 擬 軟 體 QEMU 執 行 由 於 I/O 指 令 皆 是 透 過 QEMU 模 擬, 容 易 造 成 效 能 瓶 頸, 以 網 路 卡 效 能 為 例, 透 過 QEMU 模 擬 之 網 路 卡 頻 寬 約 為 100 Mb/s, 但 在 KVM-60 與 Linux kernel 2.6.25 以 上 的 版 本 提 供 了 virtio 的 核 心 模 組, 使 得 KVM 的 虛 擬 網 卡 可 以 提 供 1Gb/s 的 頻 寬 而 在 Linux kernel 3.0 提 供 了 vhost_net 模 組, 173
讓 單 一 虛 擬 機 器 的 可 用 頻 寬 再 度 提 高 2.2 Open vswitch Open vswitch[4][5] 是 一 個 Apache 2.0 授 權 下 的 開 放 原 始 碼 軟 體, 透 過 軟 體 模 擬 出 一 個 多 層 虛 擬 交 換 器 功 能, 借 由 對 於 多 種 虛 擬 化 技 術 支 援 的 多 樣 性, 提 供 方 便 管 理 和 配 置 虛 擬 機 器 的 網 路 架 構 由 於 其 變 動 性 小, 可 減 少 網 管 人 員 之 負 擔 目 前 Linux 已 提 供 了 基 於 Layer 2 之 封 包 交 換 模 組 Linux Bridge, 但 Open vswitch 與 Linux Bridge 仍 有 不 少 差 異 以 下 列 舉 出 Open vswitch 的 主 要 特 性 : 子 網 路 隔 離 機 制 : 借 由 對 於 封 包 進 入 的 路 由 器 埠 (switch port) 進 行 VLAN Tag 的 標 記, 標 記 方 式 與 802.1Q VLAN Model 相 同 且 支 援 VLAN Trunking 機 制 支 援 生 成 樹 協 定 (Spanning Tree Protocol,STP): 可 防 止 在 虛 擬 機 封 包 之 間 產 生 環 路 即 廣 播 風 暴, 並 可 提 供 備 用 路 徑 QoS 管 理 : 針 對 每 一 個 路 由 器 埠 進 行 流 量 決 策 支 援 多 種 通 道 協 定 : 可 利 用 GRE IPsec GRE 與 VXLAN over IPsec 與 交 換 器 建 立 路 由 支 援 OpenFlow 協 定 : 支 援 OpenFlow 1.0, 1.2, 1.3 版 2.3 Software-Defined Networking (SDN) Software-Defined Networking[6] 為 近 年 來 興 起 的 網 路 架 構, 具 有 動 態 可 管 理 低 成 本, 並 可 適 應 各 式 各 樣 環 境 的 網 路 架 構 此 架 構 將 傳 統 網 路 架 構 切 割 為 控 制 層 (control plane) 及 資 料 傳 輸 層 (data plane), 其 中 控 制 層 可 透 過 控 制 器 程 式 攥 寫 達 成 客 製 化 網 路 需 求, 並 有 許 多 開 源 的 控 制 器 專 案 如 NOX/POX[12], Beacon[13] 及 Ryu SDN Frame work[8] 等 SDN 之 主 要 定 義 如 下 [6]: 可 直 接 程 式 化 : 由 於 控 制 層 與 傳 輸 層 的 分 離, 網 路 控 制 層 可 經 由 程 式 管 理 敏 捷 性 : 對 於 封 包 轉 送 進 行 抽 象 控 制, 可 因 應 快 速 變 動 的 網 路 需 求 集 中 式 控 制 : 所 有 網 路 裝 置 皆 可 透 過 一 個 SDN 控 制 器 管 理, 達 到 集 中 化 的 網 路 管 理 機 制 可 程 式 化 設 定 : 網 路 管 理 者 可 以 透 過 動 態 且 自 動 的 SDN 程 式 對 自 己 的 網 域 進 行 管 理 即 最 佳 化 網 路 資 源 開 放 標 準 : 管 理 者 容 易 開 發 SDN 程 式 並 適 用 在 所 有 支 援 SDN 標 準 之 設 備 上, 而 不 用 考 慮 設 備 的 品 牌 系 統 等 問 題 2.4 OpenFlow OpenFlow[7] 是 一 個 由 史 丹 佛 大 學 所 開 發 的 開 放 協 定, 可 以 讓 管 理 人 員 自 行 定 義 與 設 計 OpenFlow 交 換 器 的 網 路 行 為, 藉 以 測 試 模 擬 及 管 理 網 域 在 OpenFlow 協 定 下 的 所 有 交 換 器, 其 封 包 傳 遞 流 程 皆 是 以 Flow 呈 現 並 記 錄 於 Flow Table 中 OpenFlow 交 換 器 主 要 是 透 過 控 制 器 (Controller) 來 控 制 網 路 行 為, 並 透 過 OpenFlow 協 定 與 安 全 通 道 (Secure Channel) 與 OpenFlow 交 換 器 溝 通, 如 圖 1 所 示 圖 1 OpenFlow 協 定 組 成 架 構 圖 一 個 OpenFlow 交 換 器 總 共 包 含 Flow Table Secure Channel 以 及 OpenFlow Protocol 三 個 主 要 部 分 Flow Table 包 含 Flow 中 個 欄 位 的 資 訊, 當 OpenFlow 交 換 器 處 理 封 包 時, 便 會 查 詢 表 格 中 的 Flow 資 訊, 並 以 對 應 的 規 則 處 理 封 包 當 交 換 器 無 法 查 到 與 該 封 包 特 徵 相 符 的 規 則 時, 則 會 透 過 Secure Channel 與 控 制 器 以 Packet-In Message 傳 遞 封 包 進 入 訊 息, 當 控 制 器 決 定 封 包 處 理 方 式 後, 也 會 透 過 Secure Channel 傳 送 Flow-Modify Message, 告 知 交 換 器 加 入 或 修 改 Flow 而 所 有 傳 輸 的 訊 息 (message) 皆 會 透 過 OpenFlow Protocol 定 義 的 訊 息 事 件 及 資 料 內 容 傳 輸, 因 訊 息 內 容 為 唯 一 的 語 法, 可 避 免 因 網 路 裝 置 的 廠 牌 不 同 而 造 成 不 相 容 的 問 題 在 Flow Table 中, 進 行 封 包 比 對 及 行 為 設 定 的 的 欄 位 主 要 有 三 個 部 分, 如 表 1 中,Match Fields 記 錄 該 Flow 要 比 對 的 封 包 特 徵, 若 封 包 的 欄 位 (header) 與 欄 位 上 的 值 相 符, 則 代 表 該 封 包 被 分 類 至 該 Flow 中 Counters 用 以 記 錄 符 合 該 Flow 的 封 包 數 與 資 料 大 小 而 Instruction 則 定 義 交 換 器 對 於 該 Flow 的 所 有 封 包 所 應 採 取 的 動 作 表 1 Flow Table 進 行 封 包 比 對 的 主 要 欄 位 Match fields Counters Instructions 目 前 OpenFlow 的 發 展 已 由 單 一 個 Flow Table 成 長 至 多 個 Flow Tables, 如 圖 2 中, 封 包 進 入 交 換 器 後, 會 從 Table 0 開 始,Flow Table 的 執 行 次 序 依 其 Table ID, 由 小 至 大, 以 管 線 化 (Pipeline) 的 方 式 執 行, 直 至 封 包 被 送 出 交 換 器, 或 被 交 換 器 丟 棄 174
圖 2 多 個 Flow Table 的 管 線 處 理 2.5 Ryu SDN Framework Ryu SDN Framework[8] 是 一 個 Apache 2.0 授 權 下 的 開 放 原 始 碼 軟 體 利 用 Python 實 作 OpenFlow 協 定 中 控 制 器 之 功 能, 並 透 過 API 的 方 式, 提 供 開 發 者 方 便 開 發 網 路 管 理 及 控 制 之 程 式 Ryu 完 整 支 援 OpenFlow 1.0, 1.2, 1.3, 1.4 以 及 Nicira Extensions 3. 研 究 方 法 在 每 個 虛 擬 路 由 器 執 行 進 階 網 路 管 理 功 能 時, Flow Table 會 產 生 相 同 特 徵 分 類 問 題 本 論 文 探 討 在 進 行 OpenFlow 協 定 (OpenFlow 1.3.3[9]) 管 理 區 域 網 路 時 會 遭 遇 到 的 問 題, 並 利 用 多 個 的 Flow Tables 的 管 線 機 制 (pipeline), 制 定 對 應 的 策 略 解 析 方 式, 實 作 出 基 於 OpenFlow 之 進 階 網 路 管 理 模 組, 實 踐 基 於 OpenFlow 協 定 的 流 量 監 控 封 包 修 改 及 轉 送 流 程 3.1 相 同 特 徵 分 類 問 題 為 了 對 封 包 進 行 分 類,OpenFlow Switch 會 對 進 入 交 換 器 的 封 包 進 行 特 徵 比 對, 當 其 特 徵 符 合 其 Flow 的 Match 欄 位 描 述 時, 便 會 執 行 該 Flow 的 行 動 (actions) 然 而 在 每 個 Flow 中, 若 Match 比 對 相 同 封 包 特 徵, 則 可 能 產 生, 語 意 錯 誤, 如 表 2 中, 管 理 者 希 望 丟 棄 所 有 目 標 為 B 的 封 包, 但 如 果 是 從 A 至 B 的 封 包 則 正 常 傳 遞 然 而 實 際 上 在 OpenFlow 交 換 器 會 丟 棄 所 有 送 至 B 的 封 包, 包 含 由 A 送 往 B 的 封 包, 造 成 管 理 策 略 與 實 際 行 為 不 符 合 的 現 象 [9] 為 避 免 封 包 行 為 錯 誤, 本 論 文 在 各 個 Flow Table 中, 將 Flow 制 定 固 定 的 優 先 權, 確 保 過 濾 封 包 的 正 確 性 Ryu 控 制 器 與 OpenFlow 交 換 器 連 線 成 功 時, 會 先 以 優 先 權 (Priority)100 的 方 式 插 入 Flow, 而 當 管 理 者 啟 用 進 階 網 路 管 理 功 能 時, 所 有 Flow 會 以 優 先 權 1000 插 入 Flow Table 中, 並 將 同 時 進 行 的 Flow 放 入 不 同 的 Flow Table 中, 以 避 免 相 同 的 優 先 權 卻 無 法 執 行 的 問 題 3.2 序 列 性 Flow 執 行 分 析 將 進 階 網 路 功 能 分 析 成 Flow Table 的 Flow 時, 會 在 Flow 的 actions 欄 位 上 增 加 許 多 不 同 的 行 動 雖 然 可 於 一 個 Flow 中 執 行 完 所 有 的 行 動, 但 也 造 成 動 態 規 劃 的 困 難 如 表 3 中, 若 IP 為 C 的 機 器 實 體 網 路 卡 位 址 改 變, 則 控 制 器 必 須 修 改 上 述 所 有 Flow 所 對 應 的 行 動 為 降 低 因 封 包 特 徵 改 變, 使 得 Flow 必 須 大 量 修 改 的 情 況, 本 論 文 利 用 Flow Table 的 管 線 特 性, 將 進 階 網 路 功 能 依 其 必 須 修 改 的 OSI model 分 層, 以 管 線 方 式 依 序 修 改, 並 加 入 相 對 應 的 Flow Table 中, 如 圖 3 中, 網 路 模 組 可 能 會 影 響 封 包 路 徑, 故 先 檢 查 其 實 體 網 路 位 址 是 否 需 要 被 修 改, 若 有 需 要 則 產 生 一 個 flow 負 責 進 行 封 包 轉 送, 若 還 有 其 他 封 包 特 徵 需 要 被 修 改, 則 會 將 產 生 對 應 的 flow 修 改 封 包 的 特 徵 欄 位, 直 到 沒 有 修 改 封 包 特 徵 的 需 求 為 止 表 3 利 用 單 一 flow 執 行 多 個 行 動 Match Priority Instructions dst_ip=a and dst_port=22 dst_ip=b and dst_port=80 100 100 Actions=[set(dst_IP=C), set(dst_mac=x), Forward(3)] Actions=[set(dst_IP=C), set(dst_mac=x), Forward(3)] 表 2 重 複 特 徵 的 flows Match Priority Instructions src_ip=a 100 Actions=[drop] src_ip=a, dst_ip=b 100 Actions=[Forward(1)] 圖 3 序 列 性 Flow 分 析 流 程 175
Flow set Index set 表 4 Flow 分 類 對 應 到 的 OpenFlow 行 為 Modification set Route set OpenFlow action Goto-Table Set(Rewrite packet headers) Goto-Table output Goto-Table 3.3 平 行 性 Flow 執 行 分 析 為 了 增 加 管 理 的 多 樣 性, 本 論 文 利 用 額 外 的 Flow Table, 對 經 過 Flow 的 封 包 採 樣, 以 不 干 擾 原 本 的 Flow 行 為 模 式 為 前 提 下, 進 行 統 計, 達 到 平 行 性 Flow 的 應 用 3.4 Flow Table 規 劃 由 於 序 列 性 Flow 執 行 分 析 會 將 原 本 的 進 階 網 路 策 略 修 改 為 多 條 具 有 相 依 性 的 Flow 執 行, 為 妥 善 管 理 切 割 後 的 Flow 及 所 屬 的 Flow Table, 本 論 文 利 用 Ryu SDN Framework 的 API 編 寫 程 式, 將 Flow 對 於 封 包 的 特 徵 與 行 動 欄 位 分 類 為 Index set Modification set 及 Route set 三 類 Index set 僅 只 是 封 包 應 被 送 往 哪 一 個 Flow Table 進 行 比 對, Modification set 則 會 根 據 需 要 修 改 封 包 特 徵, 而 Route set 則 會 根 據 封 包 上 標 注 的 實 體 網 路 卡 位 址 或 者 IP 位 址, 決 定 封 包 送 出 的 交 換 器 埠 (switch port), 本 論 文 所 規 劃 的 行 動 分 類 對 應 到 至 OpenFlow 會 使 用 到 的 預 設 行 為 如 表 4 在 交 換 器 正 常 傳 送 封 包 的 情 況 下,Ryu 控 制 器 僅 會 對 Index set 及 Route Function 至 OpenFlow 交 換 器 中, 由 Index set 決 策 進 入 交 換 器 的 封 包 所 屬 的 網 路 區 塊 (network slice), 並 在 該 網 路 區 塊 所 屬 的 Flow Table 決 定 欲 送 出 封 包 的 交 換 器 埠, 即 執 行 Route set 若 管 理 者 需 要 對 特 定 目 標 封 包 特 徵 進 行 修 改 時, 則 目 標 封 包 會 由 Index set 導 引 至 執 行 封 包 修 改 功 能 Flow Table, 執 行 完 Modification set 後, 在 送 入 網 路 區 塊 所 屬 的 Table 中 執 行 Route set 考 量 序 列 性 Flow 的 執 行 次 序 與 平 行 性 Flow 中 皆 須 比 對 執 行 Flow 的 需 求, 本 論 文 將 所 有 的 Flow Tables 分 類 為 以 下 五 個 類 別 :Index Table, Function Table, Slice Table, Route Table, Statistic Table 在 設 定 交 換 器 時,Ryu 控 制 器 讀 取 管 理 者 所 規 劃 的 交 換 器 設 定 檔 後, 會 將 進 入 OpenFlow 交 換 器 的 封 包 分 成 需 進 入 Modification set 的 待 修 改 封 包, 以 及 只 需 進 行 一 般 路 由 的 Route set 封 包, 將 這 兩 類 的 封 包 規 則 加 上 欲 對 應 到 下 一 個 Table 的 資 訊, 以 Flow 的 形 式 寫 入 Index Table, 完 成 初 始 化 的 設 定 當 OpenFlow 交 換 器 接 收 到 封 包 後, 會 先 將 封 包 送 進 Index Table 進 行 比 對, 比 對 的 特 徵 欄 位 會 根 據 管 理 者 所 需 有 所 不 同, 若 是 屬 於 需 要 修 改 特 徵 的 封 包, 會 將 封 包 送 入 Function Table 中 進 行 特 徵 欄 位 修 改, 若 在 Function Table 可 以 找 到 對 應 的 規 則, 則 會 套 用 符 合 Modification set, 反 之 則 會 傳 送 一 個 Packet-In Message 給 Ryu 控 制 器, 將 例 外 交 給 Ryu 控 制 器 處 理 在 修 改 過 欄 位 後,Modification set 會 將 封 包 轉 交 給 交 給 Slice Table 進 行 網 路 區 塊 的 分 類, 並 將 封 包 交 給 屬 於 該 網 路 區 塊 的 Route Table, 並 根 據 實 體 網 路 位 址 決 定 交 換 器 埠, 進 行 封 包 轉 發 封 包 從 進 入 交 換 器 至 送 出 交 換 器 的 流 程 如 圖 4 所 示, 當 封 包 進 入 後, 交 換 器 會 先 將 封 包 送 至 Index Table 比 對, 若 管 理 者 想 統 計 該 封 包 出 現 的 次 數 或 是 大 小, 則 交 換 器 會 先 產 生 一 個 封 包 的 副 本 送 往 Statistic Table 進 行 統 計, 而 Statistic Table 會 將 封 包 副 本 統 計 後 丟 棄, 並 等 待 管 理 者 調 閱 統 計 資 訊 時, 將 統 計 資 訊 回 傳 在 確 認 完 統 計 事 件 後, 若 該 封 包 特 徵 會 被 修 改, 則 封 包 會 送 入 Function Table, 並 根 據 管 理 者 需 求 決 定 是 否 進 行 統 計, 若 封 包 屬 於 Function Table 中 的 任 何 一 個 Modification set, 則 封 包 欄 位 會 被 修 改, 再 送 入 Slice Table 中 若 在 Function Table 中 沒 有 發 現 任 何 Flow 上 的 特 徵 欄 位 與 封 包 特 徵 相 符, 則 會 將 封 包 送 入 Ryu 控 制 器, 由 控 制 器 讀 取 管 理 者 設 定, 進 行 封 包 處 理 以 及 增 加 Flow 規 則 最 後, 封 包 會 經 由 Slice Table 分 配 至 各 個 網 路 區 塊 中, 借 由 建 立 實 體 網 路 位 址 與 交 換 器 埠 的 對 應 關 係, 決 定 封 包 送 出 的 路 徑 為 了 動 態 管 理 實 體 網 路 位 址 與 交 換 器 埠 的 對 應 關 係, 當 有 任 何 的 ARP 請 求 封 包 經 過 交 換 器 時, 皆 會 以 Packet-In 訊 息 方 式 通 知 控 制 器, 在 進 行 ARP 封 包 的 廣 播 前, 控 制 器 會 記 錄 來 源 端 實 體 網 路 位 址 對 應 到 的 交 換 器 埠 關 係 [10] 後, 將 該 次 的 關 係 加 入 該 Route Table 的 Route set 中, 完 成 對 應 關 係 的 記 錄 3.5 Ryu 控 制 器 之 設 計 規 劃 為 符 合 管 理 者 所 提 出 來 的 策 略 以 及 因 應 快 速 變 化 的 網 路 架 構, 本 論 文 在 控 制 器 之 設 計 規 劃 分 為 靜 態 及 動 態 兩 種 策 略 靜 態 策 略 負 責 規 劃 基 本 或 變 動 性 低 的 Flow 借 由 與 管 理 者 的 互 動 界 面, 進 行 靜 態 路 由 規 劃, 以 及 進 階 功 能 隻 基 本 策 略 規 劃, 並 將 其 策 略 儲 存, 已 對 應 動 態 的 策 略 規 劃 而 動 態 策 略 則 處 理 由 OpenFlow 交 換 器 送 至 控 制 器 的 策 略, 並 經 由 靜 態 策 略 加 入 新 的 Flow 或 修 改 原 有 的 Flow 當 控 制 器 開 始 執 行 時, 會 產 生 兩 個 執 行 緒 (Thread):S-Thread 與 D-Thread S-Thread 負 責 與 管 理 者 進 行 靜 態 策 略 管 理, 並 將 讀 取 到 的 策 略 轉 換 為 Flow 並 傳 送 加 入 Flow 至 Flow Table 的 訊 息 給 OpenFlow 交 換 器, 或 轉 換 為 特 徵 清 單, 並 將 其 特 徵 清 單 分 享 給 D-Thread D-Thread 會 接 收 由 OpenFlow 路 由 器 送 給 控 制 器 的 Packet-In 訊 息, 並 經 由 S-Thread 分 享 的 特 徵 清 單 產 生 Flow 物 件, 並 傳 送 加 入 Flow 至 Flow Table 的 訊 息 至 OpenFlow 交 換 器 中 176
控 制 器 操 作 交 換 器 中 的 前 11 個 Table, 並 對 於 其 Flow Table 做 與 章 節 3.4 相 同 的 規 劃 Ryu 控 制 器 會 將 Host A 與 Host B 的 Open vswitch 的 Flow Table 0 定 義 為 Index Table, 並 寫 下 Index set 至 Index Table 中, 並 將 Table 1 至 Table 4 的 功 能 記 錄 為 Function Table, 提 供 封 包 特 徵 修 改 的 Modification set 皆 會 寫 至 Function Table 上, 如 Table 1 是 用 來 進 行 Load Balancing 要 修 改 的 封 包 特 徵 的 Modification set 會 被 寫 入 至 Table 1, 若 有 其 他 需 求 如 NAT, Firewall 等 功 能 則 會 依 其 功 能 模 組 寫 入 相 對 應 的 Function Table 中 無 論 是 否 會 進 行 封 包 特 徵 的 修 改, 封 包 皆 會 被 送 入 Slice Table 中, 即 Table 5, 並 透 過 Slice Table 上 的 Index set 進 行 分 群, 將 封 包 送 入 對 應 網 路 區 塊 的 Route Table(Table 6 ~ Table 9), 此 時 封 包 經 由 本 身 實 體 網 路 位 址 對 應 到 交 換 器 埠 號 碼, 完 成 封 包 轉 送 程 序 若 管 理 者 有 統 計 需 求, 則 會 透 過 控 制 器 在 備 份 一 份 原 始 封 包 至 Statistic Table 中 統 計 圖 4 交 換 器 利 用 Flow Table 處 理 封 包 之 流 程 圖 5 實 作 環 境 之 架 構 圖 4. 方 法 實 作 與 分 析 為 驗 證 將 高 階 網 路 功 能 模 組 轉 換 為 基 於 OpenFlow 協 定 的 Flow 其 正 確 性, 測 試 之 網 路 模 組 以 流 量 監 控 功 能 負 載 平 衡 功 能 及 常 見 網 路 位 址 轉 換 功 能 (Network Address Translation, NAT) 的 進 行 功 能 檢 測 與 分 析 4.1 實 驗 環 境 本 論 文 利 用 KVM 虛 擬 化 技 術 部 署 一 虛 擬 伺 服 器 叢 集, 並 將 所 有 的 虛 擬 交 換 器 定 位 為 多 網 域 之 閘 道 器, 如 圖 5 中,Ryu 控 制 器 會 控 制 兩 個 扮 演 閘 道 器 角 色 的 Open vswitch 由 於 虛 擬 機 器 傳 輸 封 包 仍 需 透 過 虛 擬 交 換 器, 故 虛 擬 交 換 器 可 以 透 過 控 制 器 進 行 QoS 管 理 NAT(Network Address Translation) 負 載 平 衡 (Load balanc) 等 功 能 由 於 Open vswitich 可 用 的 Flow Table 最 大 數 量 為 254 個 (Table 0 ~ Table 253), 本 論 文 利 用 Ryu 圖 6 虛 擬 交 換 器 上 的 Flow Table 配 置 177
4.2 流 量 監 控 功 能 在 進 行 流 量 監 控 時, 必 須 先 設 定 欲 監 控 的 對 象 目 標, 本 次 實 作 為 確 認 負 載 平 衡 功 能, 將 監 控 目 的 端 IP 設 定 為 實 作 負 載 平 衡 之 兩 部 機 器 開 始 監 控 時, 可 以 透 過 直 接 觀 察 特 定 Flow Table 之 方 式 進 行 流 量 查 詢, 如 圖 7, 控 制 器 透 過 搜 集 durarion n_bytes 等 欄 位, 可 以 計 算 出 區 間 內 送 至 192.168.20.3 或 192.168.20.4 的 流 量 圖 7 虛 擬 交 換 器 上 的 流 量 統 計 情 形 4.3 負 載 平 衡 功 能 管 理 者 利 用 本 論 文 實 作 所 提 供 的 負 載 平 衡 模 組, 並 借 由 OpenFlow 協 定 實 作 負 載 平 衡 之 功 能, 設 定 兩 部 機 器 提 供 相 同 的 服 務 在 管 理 者 操 作 的 過 程 中, 會 輸 入 以 下 設 定 至 OpenFlow 控 制 器 : { "Balance": { "Group": [ { "Datapath": "Switch_ID", "Cond": "tcp_src_port", "Dst": "192.168.20.1:5001", "Set": mod_2 } ] } } 從 控 制 器 的 S-Thread 開 始, 控 制 器 程 式 分 析 語 法 中 的 Datapath 欄 位, 由 此 欄 位 取 得 OpenFlow 交 換 器 的 Datapath ID, 並 得 知 此 規 則 的 目 標 對 象 利 用 讀 取 Cond 欄 位 分 析 平 衡 策 略, 由 src_port 得 知 利 用 不 同 的 來 源 port 進 行 負 載 平 衡, 並 從 Set 欄 位 中 取 得 平 衡 規 則 並 加 入 靜 態 flows 至 Index table, 加 入 的 flows 如 下 所 示 : OFPMatch(oxm_fields= {'eth_type': 2048, 'ip_proto':6, tcp_dst =5001 }), [OFPInstructionGotoTable(len=8,table_id=2,type=1)] ) 其 中,OFPInstructionGotoTable 代 表 將 封 包 送 入 Table ID 為 2 的 Flow Table, 即 負 責 Load balance 功 能 的 Function Table 由 於 使 用 負 載 平 衡 功 能 後, 並 無 法 預 知 何 時 會 有 符 合 條 件 之 客 戶 端 來 訪, 故 S Thread 新 增 之 後 的 Flow 至 此 結 束 一 旦 有 符 合 條 件 的 客 戶 端 來 訪, 進 入 Index Table 後, 會 符 合 上 述 之 flows 的 Match 條 件, 而 傳 入 負 責 負 載 平 衡 的 Function Table, 本 例 假 設 來 訪 客 戶 端 的 的 來 源 port 為 40001, 由 於 在 Function Table 中 沒 有 任 何 的 Flow 規 則 可 以 處 理 目 前 的 封 包, 故 會 傳 送 Packet-In 訊 息 至 控 制 器 控 制 器 的 D-Thread 接 收 到 Packet-In 訊 息 後, 會 先 檢 查 該 封 包 是 由 交 換 器 的 哪 個 Flow Table 發 出, 如 本 例 發 出 訊 息 的 Flow Table 之 ID 為 1, 則 控 制 器 對 於 此 Flow Table 的 功 能 實 作 為 負 載 平 衡, 即 開 始 讀 取 S-Thread 所 提 供 的 特 徵 清 單, 並 將 產 生 的 flow 加 入 至 負 責 Load balance 功 能 的 Function Table, 加 入 的 Flows 如 下 所 示 : OFPMatch( oxm_fields= {'eth_type': 2048, 'ip_proto':6, tcp_src =40001}), [OFPInstructionActions( actions=ofpactionsetfield(eth_dst='11:22:33:44:55: 66'),type=4), OFPInstructionActions( actions=ofpactionsetfield(ipv4_dst='192.168.20.3'),type=4), OFPInstructionGotoTable(len=8,table_id=5,type=1)]) 上 述 的 flow 規 則 會 將 所 有 由 來 源 port 40001 送 至 192.168.20.1:5001 的 封 包 修 改 為 送 至 192.168.20.3:5001 的 封 包 此 外, 由 於 區 域 網 路 內 的 封 包 路 由 為 Layer 2 Learning, 故 必 須 將 其 封 包 的 目 標 實 體 網 路 位 址 修 改, 亦 即 將 eth_dst 欄 位 修 改 為 '11:22:33:44:55:66', 然 後 再 將 修 改 過 的 封 包 送 入 Slice Table(table_id=7) 最 後 交 換 器 在 Slice Table 中, 透 過 封 包 的 目 標 實 體 網 路 位 址 送 入 其 所 屬 的 Route Table, 然 後 再 往 目 標 主 機 所 屬 的 交 換 器 埠 送 出 由 上 述 流 程, 可 以 成 功 執 行 負 載 平 衡 之 功 能 由 於 網 路 功 能 與 封 包 傳 送 路 徑 的 規 劃 被 切 割, 即 便 提 供 服 務 的 目 標 主 機 位 址 改 變, 也 不 會 影 響 到 封 包 傳 送 路 徑 的 規 劃 為 檢 視 其 負 載 平 衡 的 正 確 性, 本 論 文 利 用 一 部 虛 擬 機 器 發 出 多 個 request session, 考 量 client 端 有 10-Gbit 的 網 路 交 換 能 力, 且 server 端 上 的 每 部 機 器 皆 具 有 1-Git 的 網 路 交 換 能 力 進 行 負 載 平 衡 測 試 本 次 測 試 由 1 個 request 開 始, 逐 步 測 試 至 同 時 發 出 32 個 request, 並 統 計 server 端 可 以 提 供 的 最 大 流 量 之 吞 吐 量 測 試 結 果 以 圖 8 表 示, 在 只 有 1 個 request 的 情 況 下, 只 會 利 用 到 一 部 機 器 提 供 服 務, 故 只 會 有 1Gbits/s 的 流 量, 而 在 2 個 或 者 是 更 多 個 request 時, 利 用 Load Balancing 功 能 皆 可 有 效 利 用 兩 部 機 器 的 頻 寬, 且 不 會 因 為 request 數 量 的 增 加 而 造 成 效 能 瓶 頸 178
頻 寬 (Mbits/s) server 提 供 之 最 大 流 量 (Gbits/s) 頻 寬 (Mbts/s) 第 十 三 屆 離 島 資 訊 技 術 與 應 用 研 討 會 論 文 集 2.8 3 2.6 2.4 2.2 1.8 2 1.6 1.4 1.2 1 1 2 4 8 16 32 同 時 發 出 的 request 數 圖 8 request 數 與 server 端 可 提 供 之 最 大 流 量 關 係 圖 4.4 IP 共 享 IP 共 享 為 區 域 網 路 上 常 用 的 功 能, 借 由 一 個 公 開 的 IP 位 址 (Public IP) 對 應 到 多 個 私 有 IP 位 址 (Private IP), 可 解 決 IP 位 址 不 足 及 區 域 網 路 防 護 等 問 題 本 論 文 將 IP 共 享 機 制 將 傳 統 NAT(Network Address Translation) 功 能 轉 換 為 OpenFlow 協 定 中 的 Multiple Flows 架 構, 並 與 以 VyOS[14] 為 基 礎 的 傳 統 閘 道 器 系 統 進 行 NAT 在 TCP port 轉 換 以 及 UDP port 轉 換 的 執 行 效 率 比 較, 如 圖 9 10 在 TCP 的 轉 換 效 率 上, 傳 統 閘 道 器 的 轉 換 效 率 平 均 為 942 Mbits/s, 而 本 論 文 方 法 的 轉 換 效 率 為 941 Mbits/s, 表 示 在 經 過 多 個 Flow Table 之 後, 轉 換 效 能 的 衰 退 仍 在 可 接 受 的 範 圍 UDP 轉 換 效 率 的 測 試 中, 傳 統 閘 道 器 的 轉 換 效 率 平 均 為 804 Mbits/s, 而 本 論 文 實 作 之 效 率 為 807 Mbits/s, 其 轉 換 效 率 略 優 於 傳 統 閘 道 器 相 較 於 傳 統 閘 道 器, 利 用 OpenFlow 所 實 作 的 網 路 功 能 還 具 備 切 割 子 網 域, 將 一 個 大 型 區 域 網 路 再 切 割 成 數 個 小 的 虛 擬 區 域 網 路, 並 在 其 中 提 供 負 載 平 衡 之 功 能, 提 供 多 功 能 且 高 效 率 的 網 路 管 理 5. 結 論 由 於 SDN 架 構 的 提 出, 對 於 網 路 功 能 的 管 理 帶 來 龐 大 的 改 變 由 於 控 制 層 與 資 料 層 的 分 離, 管 理 者 可 透 過 單 一 控 制 器 對 所 有 的 交 換 器 下 達 同 步 的 設 定, 也 可 以 針 對 每 個 交 換 器 進 行 個 別 的 最 佳 化, 借 由 比 對 封 包 特 徵, 管 理 者 對 於 區 域 網 路 的 管 理 不 再 僅 限 於 特 定 的 條 件, 而 是 可 以 透 過 開 發 人 員 所 編 寫 的 軟 體, 進 行 客 制 化 區 域 網 路 拓 樸 監 控 與 管 理 本 論 文 基 於 OpenFlow 網 路 管 理 協 定, 針 對 其 特 性 分 析, 借 由 多 個 Flow Tables, 將 衝 突 的 封 包 特 徵 進 行 排 序, 解 決 Flow 規 劃 與 管 理 者 預 期 不 符 之 問 題, 並 將 傳 統 網 路 架 構 中 常 使 用 的 模 組 轉 換 為 基 於 OpenFlow 協 定 的 Flow set, 並 將 Flow 插 入 規 劃 的 Flow Table 中, 除 了 可 以 滿 足 網 路 模 組 所 需 執 行 的 功 能, 也 可 避 免 因 Flow 的 增 刪 而 造 成 交 換 器 邏 輯 錯 誤 或 封 包 轉 送 失 效 等 問 題 未 來 可 將 路 由 器 (router) 的 網 路 功 能 加 入 探 討, 分 析 其 封 包 特 徵, 並 以 此 方 法 為 基 礎, 發 展 屬 於 路 由 器 的 Flow 分 析 策 略 與 設 定 平 台 990 980 970 960 950 940 930 1 6 11 16 21 26 31 36 41 46 51 56 圖 9 VyOS 與 本 論 文 方 法 在 TCP port 轉 換 比 較 809 808 807 806 805 804 803 802 801 800 799 時 間 (s) OpenFlow TCP VyOS TCP 1 6 11 16 21 26 31 36 41 46 51 56 時 間 (s) OpenFlow UDP VyOS UDP 圖 10 VyOS 與 本 論 文 方 法 在 UDP port 轉 換 比 較 參 考 文 獻 [1] R. Sherwood, G. Gibb, K.-k. Yap, M. Casado, N. McKeown, G. Parulkar, Can the production network be the testbed?, Proceedings of the 9th USENIX conference on Operating systems design and implementation, Vancouver, BC, Canada, Oct 2010. [2] S. Gutz, A. Story, C. Schlesinger, N. Foster, Splendid isolation: a slice abstraction for software-defined networks. Proceedings of the first workshop on Hot topics in software defined networks, Helsinki, Finland, Aug 2012. [3] Y. Goto, Kernel-based Virtual Machine Technology. Fujitsu Scientific & Technical Journal, vol. 47, pp. 362-368, July 2011. [4] B. Pfaff, J. Pettit, et al., Extending networking into the virtualization layer. Proc. HotNets, Oct. 2009. [5] Open vswitch, Available from: http://openvswitch.org/ (Date of access: April, 2013). [6] Open Networking Foundation, Software-Defined Networking: The New Norm for Networks. ONF White Paper, April 12, 2012. 179
[7] N. McKeown, T. Anderson, H. Balakrishnan, G. Parulkar, L. Peterson, J. Rexford, S. Shenker, and J. Turner, OpenFlow: enabling innovation in campus networks. SIGCOMM Computer Communication Review, vol. 38, no. 2, pp. 69-74, Apr. 2008. [8] Ryu SDN Framework, Available from: http://osrg.github.io/ryu/ (Date of access: April, 2014). [9] Open Networking Foundation, OpenFlow Switch Specificstion 1.3.3. ONF Specification, Dec 18, 2013. [10] Nate Foster, Rob Harrison, Matthew L. Meola, Michael J. Freedman, Jennifer Rexford, and David Walker, Frenetic: A high-level langauge for OpenFlow networks. Proceedings of the Workshop on Programmable Routers for Extensible Services of Tomorrow, Nov 2010. [11] J. Matias, B. Tornero, A. Mendiola, E. Jacob, N. Toledo, Implementing Layer 2 Network Virtualization Using OpenFlow: Challenges and Solutions. Software Defined Networking (EWSDN) on 2012 European Workshop, vol., no., pp.30,35, 25-26 Oct. 2012. [12] POX, Available from: http://www.noxrepo.org/pox/about-pox/ (Date of access: Oct, 2013). [13] The Beacon Controller, Available from: https://openflow.stanford.edu/display/beacon/h ome (Date of access: Dec, 2013). [14] VyOS, Available from: http://vyos.net/wiki/main_page (Date of access: Mar, 2014) 180