一種集成多控制器的可視化sdn網(wǎng)絡(luò)管理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種集成多控制器的可視化SDN網(wǎng)絡(luò)管理方法,屬于計算機(jī)應(yīng)用技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]隨著SDN網(wǎng)絡(luò)的不斷普及和發(fā)展,目前SDN網(wǎng)絡(luò)的研宄已經(jīng)成為我國一個重要的研宄課題。目前越來越多的研宄人員進(jìn)入該研宄領(lǐng)域,然而,現(xiàn)如今大多數(shù)針對SDN網(wǎng)絡(luò)的研宄都是通過Mininet等軟件虛擬出SDN網(wǎng)絡(luò)的組件(包括控制器、交換機(jī)、主機(jī)等),然后在此基礎(chǔ)上進(jìn)行實(shí)驗研宄。因此,研宄人員初次接觸該領(lǐng)域都覺得SDN網(wǎng)絡(luò)的技術(shù)很抽象,難以把握,嚴(yán)重阻礙了研宄人員對SDN網(wǎng)絡(luò)的認(rèn)識,所以研宄人員在該領(lǐng)域的研宄變得舉步維艱。其次,由于SDN網(wǎng)絡(luò)的概念提出的時間較短,因此目前還沒有統(tǒng)一的標(biāo)準(zhǔn),特別是針對SDN網(wǎng)絡(luò)控制器的研發(fā),許多不同的團(tuán)體開發(fā)了多種類型的SDN網(wǎng)絡(luò)的控制器,而不同控制器所提供的接口名稱,功能可能都不一致,因此研宄者需要學(xué)習(xí)研宄多種控制器的原理、API,然后才能在實(shí)驗中加以應(yīng)用,然而多種控制器提供的接口繁多、名稱各異,這無疑給研宄者的研宄開發(fā)帶來了難度。
【發(fā)明內(nèi)容】
[0003]為了克服上述不足,本發(fā)明提供了一種基于Java、Flex技術(shù)的集成了多控制器的SDN網(wǎng)絡(luò)管理方法。首先,該方法實(shí)現(xiàn)了對SDN網(wǎng)絡(luò)的可視化操作管理,用戶可以利用本方法提供的前端頁面實(shí)現(xiàn)如下功能:簡單快速的生成SDN網(wǎng)絡(luò);展示所生成的網(wǎng)絡(luò)拓?fù)?;展示SDN網(wǎng)絡(luò)的信息;對交換機(jī)的流表進(jìn)行管理等。
[0004]此外,該方法不僅用圖形化的界面代替了命令行,而且我們還統(tǒng)一了多控制器提供的接口,屏蔽了不同控制器帶來的差異,使用戶不用考慮SDN網(wǎng)絡(luò)中控制器的類型,也不用熟悉每種控制器操作交換機(jī)的命令,從而使初學(xué)者能夠簡單方便的使用SDN控制器相關(guān)功能,快速的認(rèn)識SDN網(wǎng)絡(luò)。
[0005]本發(fā)明采取的技術(shù)方案如下:
[0006]一種集成多控制器的可視化SDN網(wǎng)絡(luò)管理方法,方法由前端,服務(wù)器端,數(shù)據(jù)庫,SDN控制器以及交換機(jī)組成;其中服務(wù)器端由對SDN網(wǎng)絡(luò)進(jìn)行管理,負(fù)責(zé)與SDN網(wǎng)絡(luò)進(jìn)行通信,是前端與SDN網(wǎng)絡(luò)通信的橋梁;其中服務(wù)器端主要由Java語言實(shí)現(xiàn),同時應(yīng)用了spring框架的依賴注入及聲明式事務(wù)管理來管理服務(wù)器端對象的初始化和事務(wù)管理;前端主要是負(fù)責(zé)實(shí)現(xiàn)SDN網(wǎng)絡(luò)拓?fù)鋭?chuàng)建、SDN網(wǎng)絡(luò)拓?fù)湫畔⒌恼故?,流表的添加和流表的刪除等操作的可視化(結(jié)合服務(wù)器端);前端主要由Flex,Act1nScript語言實(shí)現(xiàn),其中Flex負(fù)責(zé)網(wǎng)頁的構(gòu)造和美化,Act1nScript負(fù)責(zé)網(wǎng)頁功能的實(shí)現(xiàn),同時還負(fù)責(zé)與服務(wù)器端交互數(shù)據(jù)。數(shù)據(jù)庫部分主要是存儲服務(wù)器端采集的SDN網(wǎng)絡(luò)的相關(guān)信息,以供前端查詢使用。其中前端和服務(wù)器端通過Blazeds訪問遠(yuǎn)程服務(wù)接口實(shí)現(xiàn),其中Blazeds是一個基于服務(wù)器的Java遠(yuǎn)程調(diào)用和Web消息傳遞技術(shù),使得服務(wù)器端的Java應(yīng)用程序和運(yùn)行在瀏覽器上的Flex應(yīng)用程序能夠相互通信;而服務(wù)器端通過MyBatis和Spring技術(shù)對數(shù)據(jù)庫進(jìn)行存取操作,而MyBatis和Spring之間通過MyBatis-Spring進(jìn)行整合,使用MyBatis-Spring類庫中的類,Spring將會加載必要的MyBatis工廠類和sess1n類。這個類庫也提供一個簡單的方式來注入MyBatis數(shù)據(jù)映射器和SqlSess1n到業(yè)務(wù)層的bean中,這樣就實(shí)現(xiàn)了服務(wù)器對數(shù)據(jù)庫的操作;服務(wù)器端則是通過向SDN控制器的RESTAPI發(fā)送HTTP請求來實(shí)現(xiàn)對SDN控制器的控制。
[0007]一種集成多控制器的可視化SDN網(wǎng)絡(luò)管理方法,包括SDN網(wǎng)絡(luò)拓?fù)鋭?chuàng)建、拓?fù)湫畔⒉杉?、SDN網(wǎng)絡(luò)拓?fù)湫畔⒌恼故?、流表的添加和流表的刪除;具體如下:
[0008]SDN網(wǎng)絡(luò)拓?fù)鋭?chuàng)建的方法為:
[0009](I)用戶確定所需拓?fù)洌?br>[0010](2)創(chuàng)建組件,其中包括SDN控制器,OpenFlow交換機(jī)和主機(jī)。本步驟主要是在前端頁面完成;
[0011](3)連接上述步驟中所創(chuàng)建的控制器,交換機(jī)和主機(jī)組成網(wǎng)絡(luò)拓?fù)?,其中,控制器連接交換機(jī),交換機(jī)即可連接控制器也可連接主機(jī),控制器和主機(jī)之間不存在直接鏈路,該步驟也是在前端頁面完成,網(wǎng)絡(luò)拓?fù)鋭?chuàng)建完成后,可以導(dǎo)出拓?fù)洌?br>[0012]拓?fù)?目息米集方法為:
[0013](4)確定需要采集的拓?fù)湫畔ⅲ枰@取哪些拓?fù)湫畔⒅饕怯赏負(fù)渲蠸DN控制器的種類和開發(fā)人員決定,一般包括控制器、交換機(jī)、主機(jī)、鏈路等相關(guān)信息;
[0014](5)判斷控制類型,因為不同的控制器,獲取同一類信息的命令是不一致的;
[0015](6)在確定了控制器類型和需要采集的信息之后就是拼接采集信息的命令,因為服務(wù)器端與控制器交互是通過HTTP請求實(shí)現(xiàn),因此拼接采集信息的命令其實(shí)就是拼接HTTP請求,獲取不同拓?fù)湫畔⒌腍TTP請求是不一樣的,因此獲取不同的拓?fù)湫畔⑿枰唇硬煌腍TTP請求,HTTP請求拼接具體過程是:首先確定HTTP請求類型(包括POST, GET, DELETE),在確定了 HTTP請求類型之后,再將需要請求的信息內(nèi)容加入到HTTP中,這樣一條完成的HTTP請求就拼接完成了,之后進(jìn)行下一步;
[0016](7)向控制器發(fā)送HTTP求情,控制器在接受到外部發(fā)來的HTTP請求時,先判斷其格式是否正確,若是不正確在直接返回錯誤,不再進(jìn)行其他操作,若是格式正確則進(jìn)行下一步;SDN控制器解析HTTP請求,獲取請求信息的類型,然后將需要返回的信息封裝成JSON字格式的字符串返回;
[0017](8)服務(wù)器端收到來自控制器的返回信息后,返回信息的格式是JSON字符串,需要對其進(jìn)行解析,解析過程如下:在服務(wù)器端定義一個Map對象來接收控制器返回的JSON字符串,然后通過Map取出JSON中的信息存入相應(yīng)的對象,最后再調(diào)用操作數(shù)據(jù)庫的方法將信息更新到數(shù)據(jù)庫中;
[0018](9)網(wǎng)絡(luò)中拓?fù)湫畔⑹菍?shí)時變化的,將獲取網(wǎng)絡(luò)中拓?fù)湫畔⒃O(shè)置成了定時的任務(wù),每過一個周期就獲取一次拓?fù)湫畔ⅰ?br>[0019]SDN網(wǎng)絡(luò)拓?fù)湫畔⒌恼故镜姆椒?
[0020](10)用戶選擇需要查看的拓?fù)湫畔?,確定之后進(jìn)行下一步;
[0021](11)在用戶選擇了需要顯示的拓?fù)湫畔⒑螅岸送ㄟ^調(diào)用服務(wù)器端提供的獲取特定拓?fù)湫畔⒌姆椒ㄗx取數(shù)據(jù)庫獲取所需拓?fù)湫畔⒌漠?dāng)前值,將其封裝成對象之后返回至前端,若是不存在相關(guān)拓?fù)湫畔ⅲ瑒t返回空;
[0022](12)接受到服務(wù)器端所返回的數(shù)據(jù)后,前端取出封裝的對象,然后在頁面顯示;
[0023](13)如果還想查看其他信息,返回(10)。
[0024]流表的添加的方法:
[0025](14)開始添加流表,該步驟主要在前端完成,具體操作是,設(shè)置需要添加流表的相關(guān)參數(shù),設(shè)置完成之后進(jìn)行下一步;
[0026](15)確定控制器類型,因為不同控制器添加流表的命令是不一致的;
[0027](16)在確定了控制器類型之后就是拼接添加流表的命令的HTTP請求,其過程與獲取網(wǎng)絡(luò)拓?fù)湫畔⒅衅唇親TTP請求是一致的;
[0028](17) HTTP拼接完成之后,服務(wù)器端將向控制器發(fā)送拼接完成的HTTP請求;
[0029](18)控制器在接收到來自服務(wù)器的HTTP請求后,首先判斷其格式是否正確,若不正確則直接返回錯誤信息并重新開始流表添加,若正確則進(jìn)行第六步;
[0030](19)判斷流表中是否存在與將要添加的流表同名的流表項,若存在則直接覆蓋,返回帶有entry pushed信息的JSON字符串,若不存在則判斷所要添加的流表項是否滿足依賴關(guān)系,滿足則添加新流表,向服務(wù)器返回帶有entry pushed信息的JSON字符串,否則,添加流表失敗,返回帶有entry p