SDN應用路由算法實現工具之Networkx

2020-12-19 51CTO

SDN(Software Defined Networking)是一種新型的網絡架構,通過集中式的控制平面管理數據層面的轉發等操作。網絡的連通性是最基礎的需求,為保證網絡連通,控制器需應用相應的圖論算法,計算出轉發路徑,完成數據轉發。在開發SDN應用時,為完成基礎的路徑計算,時常需要開發者獨立編寫網絡算法,不僅麻煩,性能和代碼可復用性還受開發者個人編程水平影響。所以本篇文章將介紹網絡算法工具networkx,用於完成路徑算法的開發工作。

networkx是用於創建、操作和研究複雜網絡動態、結構和功能的Python語言包。networkx支持創建簡單無向圖、有向圖和多重圖(multigraph);內置許多標準的圖論算法,節點可為任意數據,如圖像文件;支持任意的邊值維度,功能豐富,簡單易用。

由於Networkx代碼經過多次測試,性能方面也做了很多的工作,使用Networkx內置的多種圖論算法能給開發SDN應用帶來很多的便利,可以節省開發時間,降低代碼故障率。networkx的安裝和使用,讀者可從官網文檔中快速得到,不加贅述。接下來的內容將簡要介紹Networkx的經典圖論算法內容, 包括最短路徑, KSP(K Shortest Paths)算法和Traversal(遍歷)算法BFS(Breadth First Search)/DFS(Depth First Search)。

最短路徑算法Dijkstra和Floyd

計算單源到其他所有節點的最短路徑的Dijkstra算法和計算所有節點之間最短路徑的Floyd算法是最經典的網絡算法之一。在networkx中對於二者的實現將在如下介紹。

Dijkstra

無論有向圖還是無向圖均可以使用Dijkstra算法,G為networkx生成的圖數據結構。source為起點,target為終點。起點、終點和權重均為可選參數。

networkx.shortest_path(G, source=None, target=None, weight=None)

無權圖

networkx.single_source_shortest_path(G, source[, cutoff])

有權圖

networkx.dijkstra_path(G, source, target, weight='weight')

Floyd

對於Floyd算法,有無權圖和有權圖兩種實現:

無權圖

networkx.all_pairs_shortest_path(G[, cutoff])

有權圖

networkx.all_pairs_dijkstra_path(G[, cutoff, weight])

對於路徑的長度計算可以調用network.XXX_length函數獲得,XXX為對應的路徑計算算法名稱。除了以上提到的幾個算法以外,networkx還針對很多需求設計了變種的函數,如返回同樣長度的多條***路徑算法等,讀者可根據需求自定義學習內容。

K-Shortest paths

在研究網絡路由算法/轉發算法時,除了使用跳數作為計算***路徑的標準以外,還會使用到很多其他的指標,如帶寬、時延等,也有可能根據多種指標,建立多維度評價系統,計算加權值,從而計算***路徑。例如,當涉及到帶寬為標準時,計算量就會很大。首先,獲取網絡鏈路的剩餘帶寬數據,然後從源頭開始,選途徑路徑中帶寬***的路徑。由於一條鏈路中的***剩餘帶寬取決與剩餘帶寬最小的那一條,若使用貪心算法逐跳排除,很可能計算錯誤,所以每遇到一個分支就需要選擇一個路徑,並保存其他未選擇的路徑數據。每一個節點都需要對所有的數據進行對比,從而選擇當下***的路徑,直至所有的鏈路都比較完成。這樣的算法可以通過修改Dijkstra算法完成,邏輯不困難,但效率並不高,具體實現不加贅述,讀者可查看筆者在網上找到的一個介紹文章:基於SDN的最短路徑算法(迪傑斯特拉)dijkstra。

在研究的過程中,發現許多論文提到的方法都是基於拓撲信息算法K條最短路徑,然後在根據帶寬計算***路徑。根據算法可以直接在這K條中選擇***的路徑最為***,也可以設置權重,計算跳數和帶寬的加權值,再選擇***。由於跳數的數值和帶寬的數值相差甚遠,所以二者均需進行歸一化/正則化。

考慮跳數的原因在於:每經過一個交換機,消耗的資源就多一份,所以需要考慮在內。舉例:路徑A帶寬100M,跳數為2; 路徑B帶寬110M,跳數為5,若按照帶寬選擇則選擇B,然而B經過的路徑是A的若干倍,消耗的資源更多,產生的傳輸時延,以及傳播時延(假設跳數為5的鏈路長度大於2,否則不成立)也更多,所以綜合考慮A可能是更好的路徑。

傳統的KSP算法很多,Yen, Jin Y於1971年發表的論文 "Finding the k Shortest Loopless Paths in a Network"中提出的Yen's algorithm就是經典算法之一,讀者可直接查看點擊Yen's algorithm的wiki。其算法思想並不複雜,基本思想為:

Dijkstra選擇第1條***路徑, 保存為A[0]

外循環,k從1到k。 內循環,以第k-1條(前一條)***路徑為路徑,從該路徑的***個點開始作為分叉節點,分叉節點之前的為前一條***路徑與當前路徑一致的部分,稱之為rootpaths;將分叉點上已選的***路徑分支去掉(權值設置為正無窮),然後再運算dijkstra,將路徑計算結果放到臨時數據結構B中,隨著循環的進行,分叉點不斷前進,直至終點前一跳,內循環比較,已選出多條潛在的***路徑。

對臨時數據結構B中的路徑進行排序,找到***路徑,添加到A數據結構中, 存為A[k], 外循環一輪結束。

外循環繼續,直至找到K條***路徑。

Networkx已經實現了KSP算法,該算法patch於2015年4月份左右才加入networkx項目,由於networkx中all\_shrtest\_paths名字已被使用,所以新加入的算法在networkx中對應函數命名為all_simple_pay,具體參數如下所示:

all_simple_paths(G, source, target, cutoff=None)

其中G為networkx的圖數據結構,source為起點,target為終點,cutoff為搜索深度,只返迴路徑長度短於cutoff的路徑。為優化性能,函數返回值為一個generator(生成器), 讀者可通過for循環,生成對應的K shortest paths。採用generator可以逐次計算結果,而不會一次運算全部結果都寫入內存,可以大大降低內存使用。

Traversal

在某些網絡應用場景中,會使用到遍歷算法,如BFS(Breadth First Search)/DFS(Depth First Search)算法, networkx已經定義好的對應函數,具體內容由於篇幅限制,不再介紹。讀者可查看networkx官方文檔中關於遍歷的文檔進行學習。

總結

在開發SDN應用中,網絡連通性是最基本的需求。在開發網絡應用時,可採用networkx來保存網絡數據,計算路徑等,大大提高了開發效率。在學習的過程中,從自己不斷造輪子,到逐漸使用成熟的開源軟體,接觸了很多工具,學習到了很多有用的知識。自己造的輪子很多時候,性能、適用度以及接口的穩定度都是很大的考驗,逐漸嘗試優秀的開源工具將成為我在未來編程學習的方向。

【編輯推薦】

【責任編輯:

何妍

TEL:(010)68476606】

點讚 0

相關焦點

  • 數據科學家應該了解的5個圖算法
    在本文中,我將討論一些我們應該了解的重要的圖形算法,並且使用Python實現。1.應該如何實現?該連通分支算法基於BFS / DFS的特殊情況。我不會討論很多算法原理,但是會使用 Networkx 庫來編寫運行代碼。
  • 算法是可以實現一切願望的工具,它是天使還是魔鬼?
    隨著算法的誕生,智人似乎終於製造出了一種可以實現一切願望的工具。 算法是可以實現一切願望的工具,它是天使還是魔鬼?如今,算法已經無孔不入,我們的工作、社交、醫療、工業、運輸、貿易無不有算法的重大參與。各種算法正改變著自然科學和人文科學,讓技術不斷突破「不可能」的極限。
  • 使用Vivado高層次綜合工具高效評估和實現所選壓縮算法
    使用Vivado高層次綜合工具高效評估和實現所選壓縮算法 Stefan Petko,Duncan 發表於 2017-11-16 20:05:41 賽靈思的 Vivado HLS 工具有助於降低無線去程網絡基礎設施不斷攀升的成本
  • 如何實現後臺管理系統的權限路由和權限菜單
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文是繼 前端如何一鍵生成多維度數據可視化分析報表 實戰的最後一篇文章, 主要介紹如何實現後臺管理系統的權限路由和權限菜單.
  • 2019智源·知乎看山杯算法大賽收官:711支隊伍共1631人參與
    該比賽從2019年9月正式啟動,為期3個月,以問題路由推薦系統為賽題,開放近200萬用戶和1000萬邀請數據的Link prediction大型數據集。比賽一共吸引了711支來自全球各個院校以及工業界的算法挑戰隊伍參與,參賽者達到1631人,最終來自騰訊的「test團隊」成功奪魁。截至2019年1月,知乎已擁有超過2.2億用戶,每天產生海量提問。
  • 浪潮升級AI開發平臺AIStation:無縫對接100+算法、工具與數據集
    北京2020年12月21日 /美通社/ -- 近日,浪潮重磅升級人工智慧開發平臺AIStation3.0,打造更加完善和快捷的生態夥伴產品對接能力,實現與元腦生態夥伴的多元化AI開發工具、模型算法與解決方案無縫對接、融合,推動AI應用在實際生產環境中的敏捷開發、快速部署與持續創新。
  • 突破傳統路由組網限制,騰達穿牆寶MW3應用實例
    想知道Mesh路由如何在中小戶型進行組網設置嗎?騰達穿牆寶MW3 兩隻裝應用實例了解一下:      一、場景描述      房屋結構:重慶一平層三室大戶型,牆壁較厚且信號阻擋較多,之前是客廳一個路由器無法滿足全屋無線覆蓋,書房以及臥室信號都比較差,平時基本屬於家庭使用;      客戶要求:滿足全屋無線覆蓋且上網流暢穩定。
  • 華為路由真雙頻體驗:100ms內無縫切換無卡頓
    1、尋找應該切換的點位包括從路由器附近遠離路由器,在該點位實現5GHz到2.4GHz的切換(P4附近小於5GHz信號強度小於-70dBm),以及從遠處向路由器靠近,在該點位實現2.4GHz到5GHz的切換(P2
  • 路由器上應用策略路由PBR功能
    一般在路由器上啟用動態路由協議動態地學習網絡拓撲,會遇到這樣的問題,當一臺非授權的網絡設備接入網絡,並發布路由協議更新時,有可能會使網絡內的設備動態的產生錯誤的路由條目,從而造成數據包的丟失或者被路由到了錯誤的地方,這時我們就要用到PBR。
  • OpenAI 開源最新工具包,模型增大 10 倍只需額外增加 20% 計算時間
    gradient-checkpointing,該工具包通過設置梯度檢查點(gradient-checkpointing)來節省內存資源。訓練深度神經網絡時,損失的梯度是在內存密集部分通過反向傳播(backpropagation)算法來計算的。在訓練模型時定義計算圖中的檢查點,並在這些檢查點之間通過反向傳播算法重新計算這些圖,可以在降低內存的同時計算梯度值。當訓練一個 n 層的深度前饋神經網絡時,可以利用這種方式將內存消耗減少到 O(sqrt(n)),代價是需要執行一個額外的前向傳遞操作。
  • 圖像處理算法有哪些_圖像處理十大經典算法
    同時,計算機已經作為一種人們普遍使用的工具為人們的生產生活服務。圖像處理概況圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。圖像處理是信號處理在圖像域上的一個應用。目前大多數的圖像是以數字形式存儲,因而圖像處理很多情況下指數字圖像處理。本文接下來將簡單粗略介紹下數字圖像處理領域中的經典算法。
  • 算法推薦|在iOS14與Android11系統上,App開發如何實現人臉識別
    【適用App的人臉識別算法選型】API和SDK是人臉識別算法的不同應用形式,與識別準確率無關,取決於算法廠商究竟是開放可以調用人臉識別功能的接口(API),還是直接提供人臉識別軟體的安裝包(SDK)。API本質上是「在線請求,返回結果」:算法廠商將算法布置在雲端,把接口向有需求的公司開放。本地端只上傳照片,並接收結果。
  • 路由協議OSPF區域路由以及外部路由
    這個路由器擁有兩個區域的lsdb,根據lsdb計算出的路由表,將路由信息直接發送給另一個區域,此時從鏈路狀態算法轉換成了距離矢量算法。那麼這樣路由信息由鄰居發送,又會出現產生環路的問題。ospf採用area0作為骨幹區域,其他區域作為非骨幹區域。任何區域進行通信,都需要經過骨幹區域轉發,那麼此時非骨幹區域之間無法通信,也就無法形成環路。
  • 360發布新品WiFi6全屋路由,三大尖端科技亮點多多
    360WiFi6全屋路由裝載多項黑科技,可充分發揮WiFi6的優勢,實現日常多設備同時高速上網。針對以往多設備同時上網存在因排隊而帶來的卡頓問題,360WiFi6全屋路由綜合MU-MIMO技術和OFDMA技術,不同設備的上網數據齊頭並進,同步傳輸,平均延時低至9毫秒。另一方面,得益於高通多用戶調度算法的加持,可進一步激發WiFi6的隱藏性能,最多實現512臺設備流暢聯網。
  • 使用Python實現凱撒加密算法
    凱撒大帝在元老院(圖片來自網絡)在當時來說,沒有工具的輔助支持,加之與凱撒作戰的敵人大多是目不識丁的人(不像現代哦,那時候可能作戰對體質方面要求更高一點),即時他們截獲這些加密的信息【加密算法Python實現】在該程序設計中,我們面臨的難點主要有兩個:一是古羅馬的字符跟我們現在使用的字符是不一樣的,我們的程序應該實現對字符表進行替換的功能,還有密鑰應該也是可以自定義的。
  • 人工智慧之ICA算法
    人工智慧機器學習有關算法內容,請參見公眾號「科技優化生活」之前相關文章。人工智慧之機器學習主要有三大類:1)分類;2)回歸;3)聚類。今天我們重點探討一下ICA算法。^_^本文引用地址:http://www.eepw.com.cn/article/201806/381805.htm  ICA獨立成分分析是近年來出現的一種強有力的數據分析工具(Hyvarinen A, Karhunen J, Oja E, 2001; Roberts S J, Everson R, 2001)。
  • 能幫你賺錢的京東雲360WiFi6全屋路由,真香
    安靜的躲在後面的則是上一代360全屋路由中的子路由,在這裡也是可以和全新的WIFI6設備進行mesh組網,實現信號放大的功能。包裝背面是這款WIFI6全屋路由的一些特點介紹圖,基本都是一些比較專業的硬體參數,但對於大部分消費者來說,其實並不怎麼關心這些,一款路由器能不能吸引購買,重要的就是價格和實際效果,花最少的錢實現最快的網速,這就夠了。
  • 360遊戲加速路由亮相
    5月23日,360安全路由發布了一款全新雙頻全千兆路由器。據悉,「360安全路由2 P4C」主打200M以上帶寬用戶,並針對各類熱門遊戲開發了加速技術,官方在懸念海報中更將這款產品比喻為遊戲玩家視作夢想的「空投」。那麼,這款路由器有著怎樣的黑科技呢?
  • 插卡就能高速上網 華為移動路由體驗
    ,帶上它隨時隨地就能享受多設備高速上網體驗,真正實現了移動即自由。 華為移動路由內置巴龍 711 晶片,機身內布有2根4G天線+2根Wi-Fi天線,支持Beamforming智能雷達,能夠定向發射Wi-Fi給終端設備,實現更好信號。同時支持LPDC無線糾錯算法,提升Wi-Fi抗幹擾性能;配備了2顆信號放大器,也可以進一步提升Wi-Fi覆蓋。
  • 【硬創邦】跟hoowa學做智能路由:外篇之目錄
    >認識設備電路開發板選型Area 2 做智能路由的基礎知識,以及相關的工具軟體使用第四章 安裝系統認識TTL認識uboot啟動流程第一次刷機第五章 先熟悉下OpenWRT系統結構基本信息基本指令>軟體包管理第六章 編輯和配置基礎vi使用方法uci使用方法scp文件管理Area 3 在系統中基本路由功能的配置方法第七章 基本路由設置包含PPPOE撥號,DHCP,STATIC, LAN DHCPServer, LAN IP, 無線配置