本文將介紹RYU中的網絡感知服務,與基于網絡服務的最短路徑應用,主要內容包括網絡資源感知模塊,網絡監控模塊和基于網絡信息的最短路由模塊介紹。在一個真實的網絡環境下,需掌握網絡的實時動態,包括網絡的資源以及網絡流量狀況,其中網絡的信息包括交換機,端口,主機的信息,以及基于流的流量統計信息和基于端口的流量統計信息。在掌握這些關鍵的網絡信息后,控制器就可以根據這些信息作出當下最正確的路由決策,完成網絡的通信。
網絡資源感知
網絡資源感知模塊用于感知網絡資源的實時變化,包括拓撲信息以及主機信息的變化。任何網絡應用,可達性都是最基本的要求。SDN網絡的集中控制,使得控制器可以根據全局的信息作出最佳決策而無需在交換節點上采用分布式的路由算法。所以感知網絡資源是SDN應用最基礎的一項服務。
實現該模塊的類為Network_Aware類,該類描述如下:
其中數據結構與其作用關系如下:
link_to_port字典存儲交換機之間鏈路與端口的映射關系;
access_table字典存儲主機的接入信息;
switch_port_table存儲交換機端口列表;
access_ports存儲外向端口(與終端連接的接口);
interior_ports存儲內部端口;
grap存儲網絡拓撲圖;
pre_link_to_port等帶有pre前綴的數據結構用于保存上一次獲取的信息,用于和當前獲取信息做比較。
_discover函數是主循環函數
在_discover函數中,周期執行get_topology和是show_topology函數。在get_topology函數中,控制器可以獲取到網絡中的交換機和端口信息、鏈路信息、主機接入信息等。此外,控制器通過實時檢測網絡變化的異步事件來更新網絡資源信息。show_topology函數則是將網絡信息格式化地展示在終端中。由于前端開發能力有限,目前僅僅簡單將后臺數據展現在終端。
Note that:可以通過置位IS_UPDATE來控制是否輸出信息。此外,若拓撲信息不發生變化,將不打印,即僅打印拓撲一次,直至拓撲更新。可以將判斷中的and 修改為or,即可每次都打印。
圖1.網絡資源信息
網絡流量監控
網絡的信息除了物理資源信息以外,還包括邏輯鏈路等信息;獲取流表信息可獲得對應的邏輯連接信息。此外,獲取網絡的數據流量的統計情況對防止網絡故障,合理優化網絡等方面起到了重要的作用。網絡流量監控模塊實現了對端口流量和流表項流量的監控。應用可周期獲取到流量信息,并在終端中輸出展示。
實現網絡流量監控的類為:Network_Monitor,具體描述如下:
其中數據結構的作用如下:
datapaths記錄與控制器連接的datapath;
port_stats保存端口的統計信息;
port_speed保存端口的速率信息;
flow_stats保存流的統計信息;
flow_speed保存流的速率信息;
stats保存所有的統計信息;
port_link保存link的特性信息;
_monitor函數為主循環函數;
在主循環函數中,周期調用了self._request_stats和self.show_stat函數,前者用于下發統計信息請求報文,后者用于展現統計信息。統計信息回復報文處理函數為:_flow_stats_reply_handler和_port_stats_reply_handler,兩者分別使用的@set_ev_cls裝飾符,注冊監聽了對應的事件。至此流量統計模塊已經完成了閉環,可以作為底層的服務為上層的應用提供實時的流量統計信息。
圖2. 端口流量統計信息
圖3.-流表項流量統計信息
[page]基于網絡資源的最短路徑
基于以上的網絡資源感知模塊與網絡流量監控模塊提供的數據,我們可以做很多事情,比如負載均衡等流量調度應用,有比如安全接入等安全應用。本小節介紹基于網絡資源的最短路徑應用。衡量最短路徑的參考系是跳數,稍加修改可以變為剩余帶寬,延時或者多參考系加權的方案。源代碼鏈接:shortest_route最短路徑應用流程圖如下:
圖4, 最短路由流程圖
首先,查詢主機表,若查找成功,則查詢主機位置表,之后直接由控制器將ARP數據包發送給對應的端口,此時控制器并不做ARP的代理。當目標主機回復ARP時,將數據包直接發送到源主機的接入端口。從而完成了ARP的學習過程。由于此時已經掌握了主機的接入信息以及網絡信息,當ICMP或其他數據包出發packet_in事件時,則可根據源目兩個IP查詢到接入交換機,再依據拓撲信息,計算最短路徑,從而完成最短路由。若希望使用其他的參考標準來計算最短路徑,只需修改計算最短路徑的算法即可。
在網絡初始化時,控制器并沒有辦法發現沉默的主機,原因在于我們沒有進行DHCP分配,導致控制器沒有掌握主機的IP/MAC信息。所以第一步我們需要處理的數據包是ARP。處理流程具體如下所示:
圖5. ARP處理流程圖
Note that:本應用假設主機發起通信時需先發起ARP,不可通過其他途徑獲取到ARP的信息,否則控制器無法獲得目的端主機接入信息,則無法完成路由。對于域外的主機,只需在找不到目的端時,將其送給出口網關即可。此時需使用到子網掩碼,網段,路由等概念。本應用僅針對簡單局域網計算路徑。
圖6. 流表項流量統計信息
總結
網絡感知服務對于SDN網絡而言非常重要,是一切網絡應用的基礎。充分利用網絡資源的信息,可以對網絡進行優化,提高網絡的安全性。以上的Network_aware和monitor模塊均可以直接做為APP的service app(在RYU中需在_CONTEXTS添加)提供數據服務,希望可以給有需要的讀者提供一些幫助。