此為中國大學MOOC上溫州大學所開設的SDN軟件定義網絡課程配套實驗。
鏡像地址:https://pan.baidu.com/s/1qYN_MtUboPmruHda1DgrTA 提取碼:mhfi
實驗指導書地址:鏈接:https://pan.baidu.com/s/1XpDrV2car4qH-sXJq1zbPA 提取碼:s8un
實驗步驟:
1、利用可視化界面搭建拓撲
2、開啟各機器,打開wireshark進行抓包,查看交換機與控制器通訊過程
控制器端口為6633,所以源端口為6633的是控制器。
(1)交換機和控制器建立完Socket通道后,會互相發送Hello報文來協商協議版本。
(2)控制器向交換機下發 Features Request 報文,交換機則需回復 Feature Reply 報文。SET_CONFIG報文為控制器向交換機發送的配置報文。PORT_STATUS為交換機向控制器發送的端口狀態改變報文。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
(3)交換機對於沒有匹配到流表的流向控制器發送packet-in報文。
(4)控制器向交換機返回Packet-out報文指明動作或發送flow-MOD報文
1)Packet_out報文
2)Flow_mod報文
(5)控制器和交換機通過ECHO_REQUEST和ECHO_REPLY報文維持連接。
1)ECHO_REQUEST
2)ECHO_REPLY
3、OpenFlow協議報文說明
OpenFlow 協議支持三種信息類型:Controller-to-Switch,Asynchronous 和 Symmetric,
每一個類型都有多個子類型。Controller-to-Switch 信息由控制器發起並且直接用於檢測交換機的狀態。Asynchronous 信息由交換機發起並通常用於更新控制器的網絡事件和改變交換機的狀態。Symmetric 信息可以在沒有請求的情況下由控制器或交換機發起。
1)Controller-to-Switch 報文
Controller-to-Switch 報文是由控制器初始化並下發給交換機的報文類型,其可能會要求交換機回復相應的報文,此類型報文包含的主要報文類型介紹如下:
- Features 類型的報文分為 Request 和 Reply 兩種,其中控制器可以主動初始化並發送 Features_Request 報文,請求交換機回復其特性信息,其報文只有數據報頭,沒有消息體(Body)。交換機在收到 Features_Request 報文之后,將通過 Features_Request 報文回復交換機的特性和交換機端口的特性信息.通常,控制器會在交換機的 Openflow 連接建立完成之后馬上發送一個請求報文來獲取交換機的特征信息。
- Configuration:其包含請求、回復和設置三種報文。控制器可以設置和請求交換機的配置信息,交換機則需執行配置和回復配置報文。
- modify-state:修改狀態型報文由控制器下發,用於修改交換機的流表、組表、Meter 表及端口狀態 。
- Read- State:讀取狀態信息由控制器發出,用於獲取交換機的狀態信息,包括流表、組表、 Meter Table 及端口的統計信息。
- packet-out: packet-out 類型報文由控制器發出,用於將數據包發送到交換機的指定端口。 Packet-out 報文一般用於響應 packet-in 報文的處理,經常跟隨在 Flow-mod 報文之后,用於指揮交換機將緩存數據發送或直接發送數據。 packet-out 必須攜帶一個 Buffer id 來定位緩存在交換機上的數據,當 Buffer id 為-1 時,表明該數據包沒有被交換機緩存。此外, Packet-out還需要攜帶指導數據處理的動作集,如果動作集為空則交換機會將數據包丟棄。
- Barrier: Barriers Request/Reply 用於確保操作順序執行。控制器可以向交換機發送Request 報文。交換機接收到 Request 報文之后,將 Request 報文之前所有的報文處理完成之后,處理 Barrier Request 請求:回復控制器一個 Barrier Reply 報文,其報文 ID 和請求報文一致,告知控制器在 Barrier Request 報文之前到來的報文已經處理完成。 Barrier 類型的報文類似設置一個障礙或者觸發器,用來告知控制 Barrier 之前的動作均已執行,其通常用來確保動作執行順序,保持策略一致性。
- Role-request:此類型報文用於控制器請求其自身在交換機端的角色,也可以用於設置控制器的角色。一般用於交換機與多控制器有連接的場景。
- asynchronous-configuration:異步配置報文可以用來設置異步報文的過濾器,從而使得在多控制器場景下,控制器可以選擇性過濾異步報文,只接收感興趣的報文。一般在 Open Flow連接建立完成之后進行設置。
2) Asynchronous 報文
Asynchronous 報文是由交換機異步發送給控制器的報文,無須等待控制器請求。交換機通過異步報文告知控制器新數據包的到達和交換機狀態的改變。主要的異步報文類型描述如下。
- packet-in:將數據包發送給控制器。在支持單流表的 Open Flow 協議版本中,觸發 Packet-in的原因可能是流表項的動作指導,也可能是因為匹配不到流表項。但在高版本的多級流表設計下,將默認下發一條 Table-Miss 流表項,其匹配域均為空,任何報文都能匹配成功。
- Table-Miss 的作用是將匹配其他流表失敗的數據發送給控制器。若交換機配置信息中指示將數據包緩存在交換機中,則 Packet-in 報文還將攜帶着指定長度的數據包數據及其在交換機上緩存的 Buffer id,攜帶的數據包默認長度是 128 字節。若交換機不緩存數據包,則由 Packet-n報文攜帶全部數據並發送給控制器。 packet-in 報文通常會觸發 packet-out 報文或者flow-mod 報文。
- Flow- Removed:當 OFPFF SEND FLOW REM 標志位被置位時,交換機將會在流表項失效時通知控制器流表項被移除的消息。觸發流表項失效的原因可以是控制器主動刪除或者流表項超時。
- Port-status:當端口配置或者狀態發生變化時,用於告知控制器端口狀態發生改變Role- status:當控制器的角色發生變化時,交換機告知控制器其角色變化。Controller- Status:當 OpenFlow 連接發生變化時,告知控制器這個變化。Flow- monitor:告知控制器流表的改變。控制器可以設置一系列監視器來追蹤流表的變化。
3) Symmetric 報文
- Symmetric 可以由控制器和交換機雙方任意一方發送,無須得到對方的許可或者邀請。主要類型的介紹如下。
- Hello:Hello 報文用於交換機和控制器之間的 Open Flow 通道建立初期,用於協商版本等內容。
- Echo: Echo Request/Reply 可以由交換機和控制器任意一方發出。每個 Request 報文都需要一個 Reply 報文回復。其主要用於保持連接的活性,但同時也支持攜帶消息內容,可用於時延或帶寬測試。
- Error:錯誤報文用於交換機或控制器,告知對方錯誤。一般而言,多被用於交換機告知控制器請求發生的錯誤。
- Experimenter:實驗報文是提供 OpenFlow 報文功能范圍之外功能的標准方式可以用於實驗場景。