資源描述:
《基于SDN的最短路徑算法(dijkstra)實現(xiàn).docx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于SDN的最短路徑算法(dijkstra)實現(xiàn)一.實驗要求把路由算法作為APP加入到控制器中,使SDN網(wǎng)絡(luò)實現(xiàn)根據(jù)拓?fù)淝闆r自動選擇路由的功能。二.實驗環(huán)境及思路本實驗的控制器采用Floodlight,向Floodlight添加模塊zhlruote以實現(xiàn)控制器路由功能。將上題中采用的dijkstra最短路徑算法加入到控制器中,控制器根據(jù)選擇出的路由下發(fā)流表給交換機(jī),從而使主機(jī)節(jié)點能夠相互通信。實驗中各個鏈路的帶寬約束及帶寬需求bdw通過zhlroute模塊在init()方法中讀取input.txt文件獲得,源節(jié)
2、點與目的節(jié)點通過packetin消息獲得。zhlroute模塊初始化完成后,監(jiān)聽PacketIn消息,收到消息后進(jìn)行判斷,如果需要轉(zhuǎn)發(fā),則通過returnRoute()方法獲取目的節(jié)點到源節(jié)點的完整路徑,并對路徑上的節(jié)點進(jìn)行遍歷以下發(fā)流表。在獲取路由路徑時,使用floodlight提供的拓?fù)涔芾砟K(TopologyManager.java)來獲取各鏈路的連接狀態(tài)(包括連接節(jié)點及端口,存儲于clusters類集中),通過對各個節(jié)點上與其相連的鏈路的遍歷來獲取源節(jié)點到目的節(jié)點的完整路徑。模塊整體流程圖如圖1所示:
3、圖1:zhlroute模塊流程圖三.實驗步驟(1)修改第一大題中用到的創(chuàng)建拓?fù)涞膍yfirst.py文件,創(chuàng)建如下所示拓網(wǎng)絡(luò)拓?fù)洌和負(fù)渲邪?臺交換機(jī)和8臺主機(jī),交換機(jī)根據(jù)其SwitchDPID(00:00:00:00:00:00:00:00到00:00:00:00:00:00:00:08)由低到高分別標(biāo)記為s1到s8,主機(jī)h1-h8(ip)分別與s1-s8相連。圖2:網(wǎng)絡(luò)拓?fù)鋱D3:網(wǎng)絡(luò)拓?fù)洌?)啟動floodlight,注意將forwarding模塊禁止啟動加載,然后對zhlroute模塊進(jìn)行連通性測試,結(jié)果
4、如圖4。說明各主機(jī)可以進(jìn)行通信,zhlroute模塊能夠發(fā)現(xiàn)路徑并下發(fā)流表。圖4:zhlroute模塊功能測試實驗中帶寬約束及帶寬需求(bdw)通過讀取input.txt文件獲得,input.txt文件內(nèi)容如下(本實驗中的源節(jié)點與目的節(jié)點從PacketIn消息中獲得,不通過input.txt文件獲得):leftnodeID,rightnodeID,bandwidth1,3,1001,4,1002,3,1002,4,1003,4,1003,5,1003,6,1004,5,1004,6,1005,6,1005,7,
5、1005,8,1006,7,1006,8,100;srcNodeID,dstNodeID,bandwidth3,8,90(3)進(jìn)行路徑分析測試,在模塊中添加語句System.out.println(route)以輸出獲取到的Route,輸入以下命令:測試主機(jī)h1與h7能否通信并獲取經(jīng)過的路徑信息。elcipse控制臺中輸出的信息(整條路徑)如下:Route[id=RouteId[src=00:00:00:00:00:00:00:07dst=00:00:00:00:00:00:00:01],switchPorts
6、=[[id=00:00:00:00:00:00:00:07,port=1],[id=00:00:00:00:00:00:00:07,port=2],[id=00:00:00:00:00:00:00:05,port=5],[id=00:00:00:00:00:00:00:05,port=2],[id=00:00:00:00:00:00:00:03,port=5],[id=00:00:00:00:00:00:00:03,port=2],[id=00:00:00:00:00:00:00:01,port=2],[id=
7、00:00:00:00:00:00:00:01,port=1]]]Route[id=RouteId[src=00:00:00:00:00:00:00:01dst=00:00:00:00:00:00:00:07],switchPorts=[[id=00:00:00:00:00:00:00:01,port=1],[id=00:00:00:00:00:00:00:01,port=2],[id=00:00:00:00:00:00:00:03,port=2],[id=00:00:00:00:00:00:00:03,por
8、t=5],[id=00:00:00:00:00:00:00:05,port=2],[id=00:00:00:00:00:00:00:05,port=5],[id=00:00:00:00:00:00:00:07,port=2],[id=00:00:00:00:00:00:00:07,port=1]]]輸出的route中,每條完整路徑由id確定(源節(jié)點和目的節(jié)點)。完整路徑包括了路徑所經(jīng)過