• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于OpenFlow協(xié)議的鏈路聚合控制協(xié)議的研究與實現(xiàn)

    2019-03-14 07:17:52楊曉劉琦
    現(xiàn)代計算機 2019年4期
    關(guān)鍵詞:流表交換機數(shù)據(jù)包

    楊曉,劉琦

    (西華大學(xué)計算機與軟件工程學(xué)院,成都 610039)

    0 引言

    人類社會已經(jīng)進入網(wǎng)絡(luò)無所不在的信息時代,截至2017年3月,全球互聯(lián)網(wǎng)用戶突破37.4億,全球每人平均每月的網(wǎng)絡(luò)流量也將于2021年達到61GB(從2016年的24GB)?;ヂ?lián)網(wǎng)能夠快速發(fā)展主要得益于它優(yōu)良的體系結(jié)構(gòu)和網(wǎng)絡(luò)技術(shù),然而伴隨著推廣的深入和網(wǎng)絡(luò)規(guī)模的不斷擴大,爆炸式的增長使其自身結(jié)構(gòu)的僵化問題越來越明顯,互聯(lián)網(wǎng)原有的結(jié)構(gòu)反而成為阻礙它進一步發(fā)展的最大障礙。

    SDN(軟件定義網(wǎng)絡(luò))是一種新式的網(wǎng)絡(luò)架構(gòu),這種方式給了可以破除當(dāng)前網(wǎng)絡(luò)架構(gòu)存在的瓶頸的希望。在傳統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)中,控制平面和數(shù)據(jù)平面是整合在同一個網(wǎng)絡(luò)設(shè)備中,而SDN的一個核心點就是通過打破垂直整合,將網(wǎng)絡(luò)的控制邏輯從底層的路由器和交換機中分離出來,促進網(wǎng)絡(luò)控制(邏輯)中心化,引入對網(wǎng)絡(luò)可編程的能力[1]。網(wǎng)絡(luò)策略的制定、交換硬件中的執(zhí)行以及流量的轉(zhuǎn)發(fā)之間的分離,這是我們所期望靈活性的關(guān)鍵之處。通過將網(wǎng)絡(luò)控制問題分離成一些易于解決的小部分,SDN使得在網(wǎng)絡(luò)中易于創(chuàng)造和引入新的抽象,這樣簡化了網(wǎng)絡(luò)管理,有利于網(wǎng)絡(luò)革新和發(fā)展。另外,在傳中的IP網(wǎng)絡(luò)中所有的轉(zhuǎn)發(fā)行為都是基于單一的IP地址進行轉(zhuǎn)發(fā),而在SDN中,所有轉(zhuǎn)發(fā)都是基于流(一套基于數(shù)據(jù)包頭域的規(guī)則)進行轉(zhuǎn)發(fā),這種細粒度的方式更加方便于策略的實現(xiàn)[2]。

    IEEE 802.3ax標(biāo)準(zhǔn)的 LACP(Link Aggregation Con?trol Protocol,鏈路聚合控制協(xié)議)是一個關(guān)于動態(tài)鏈路聚合的協(xié)議,它通過協(xié)議報文LACPDU(Link Aggrega?tion Control Protocol Data Unit,鏈路聚合控制協(xié)議數(shù)據(jù)單元)和相連的設(shè)備交互信息[3]。當(dāng)端口啟用LACP協(xié)議后,端口通過發(fā)送LACPDU來通告自己的系統(tǒng)優(yōu)先級、系統(tǒng)MAC、端口的優(yōu)先級、端口號和操作key等[4]。相連設(shè)備收到該報文后,根據(jù)所存儲的其他端口的信息,選擇端口進行相應(yīng)的聚合操作,從而可以使雙方在端口退出或者加入聚合組上達到一致。在傳統(tǒng)網(wǎng)絡(luò)中的交換設(shè)備,一般存在多個以太網(wǎng)口,同時在大型網(wǎng)絡(luò)中也可能會存在單點鏈路帶寬瓶頸,例如Web服務(wù)器,同一時間可能會有上千萬的訪問量,單個接口無法滿足這么大的吞吐量。LACP可以利用這些接口聚合為一個更大帶寬的邏輯接口,同時可以實現(xiàn)鏈路的容錯性,當(dāng)聚合端口中的一條或幾條鏈路故障,仍能保證鏈路的連通性。

    如何將傳統(tǒng)網(wǎng)絡(luò)架構(gòu)遷移至新的軟件定義網(wǎng)絡(luò)架構(gòu)中去,一直是近些年來討論研究的熱點。本文就嘗試探索如何傳統(tǒng)的網(wǎng)絡(luò)架構(gòu)中的鏈路聚合遷移至新的軟件定義網(wǎng)絡(luò)架構(gòu)中。本文通過SDN方式基于Ryu控制器(SDN開源控制器)研究和實現(xiàn)LACP功能,使得LACP協(xié)議可以在軟件定義網(wǎng)絡(luò)環(huán)境中實現(xiàn)。

    1 總體設(shè)計

    依據(jù)IEEE的802.1ax協(xié)議標(biāo)準(zhǔn)并基于Ryu控制器平臺,設(shè)計交換模塊、LACP解析與封裝模塊、LACP處理邏輯模塊。

    本系統(tǒng)是基于Ryu控制器的,Ryu控制器是基于事件機制的,每個OpenFlow消息在進入到Ryu控制器后,都會被封裝成一個事件;每個應(yīng)用在加載時,主動向Ryu控制器注冊在某個通信階段,自己期望的處理事件。

    本系統(tǒng)注冊事件列表如下:

    ● ofp_event.EventOFPSwitchFeatures,CONFIG_DISPATCHER

    ●lacplib.EventPacketIn,MAIN_DISPATCHER

    ●lacplib.EventSlaveStateChanged,MAIN_DISPATCHER

    ●ofp_event.EventOFPPacketIn,MAIN_DISPATCH?ER

    ●ofp_event.EventOFPFlowRemoved,MAIN_DISPATCHER

    在Ryu控制器中,通信階段分為以下四個:

    ●HANDSHAKE_DISPATCHER:連接建立階段,交換Hello信息

    ●CONFIG_DISPATCHER:等待接收交換機特性階段

    ●MAIN_DISPATCHER:正常通信階段

    ●DEAD_DISPATCHER:連接斷開階段

    程序可以指定在某個階段,來處理相應(yīng)的事件,當(dāng)在其他非指定階段出現(xiàn)注冊事件,則不會觸發(fā)相應(yīng)方法執(zhí)行。

    當(dāng)相應(yīng)的OpenFlow消息到達Ryu控制器,控制器的事件調(diào)度器會根據(jù)應(yīng)用的注冊的事件類型,來調(diào)用對應(yīng)的方法,對事件進行處理。

    本系統(tǒng)分為LACP解析與封裝模塊,LACP處理邏輯模塊、交換模塊。模塊之間彼此獨立,通過Ryu事件調(diào)度器,完成彼此之間的協(xié)作。LACP處理模塊位于Ryu事件處理中最頂層,最原始的packet-in數(shù)據(jù)包首先會觸發(fā)它的處理,以執(zhí)行與LACP相關(guān)的功能;在對原始的pack-in事件進行過濾后,將不包含LACP信息的packet-in事件重新發(fā)回到Ryu控制器系統(tǒng)中,以觸發(fā)交換模塊處理。在LACP處理邏輯模塊中,會使用LACP解析封裝模塊,來將原始的字節(jié)流轉(zhuǎn)換為可以處理的信息,同時將處理的結(jié)果序列化為可以在網(wǎng)絡(luò)中傳輸?shù)腖ACP協(xié)議數(shù)據(jù)包字節(jié)流。而交換模塊則單純處理與MAC尋址相關(guān)的功能。LACP處理邏輯模塊和交換模塊彼此之間是解耦,它們之間的通過Ryu控制器進行協(xié)作。事件之間關(guān)系如圖1所示。

    圖1 事件邏輯

    2 交換模塊

    作為交換模塊,主要實現(xiàn)學(xué)習(xí)MAC地址,并根據(jù)學(xué)習(xí)到的信息進行數(shù)據(jù)包的轉(zhuǎn)發(fā),當(dāng)有端口的LACP狀態(tài)變化的事件時,清理與LACP端口相關(guān)的流表信息。因為,為了實現(xiàn)LACP功能,控制器是通過流表來控制交換機的轉(zhuǎn)發(fā)行為,所以當(dāng)相應(yīng)接口失效,或者接口重新加入聚合組,需要清空與之相關(guān)的流表,重新建立新的轉(zhuǎn)發(fā)方式。交換模塊處理邏輯如圖2。

    交換模塊注冊對以下三個事件監(jiān)聽入口:

    ●ofp_event.EventOFPSwitchFeatures

    ●lacplib.EventPacketIn

    ●lacplib.EventSlaveStateChanged

    事件ofp_event.EventOFPSwitchFeatures會在連接建立階段,完成對tablemiss流表添加,以完成MAC地址的學(xué)習(xí)。事件lacplib.EventPacketIn會在正常通信階段,處理經(jīng)過LACP模塊過濾后的packet-in事件,這些事件經(jīng)過過濾后,所有的packet-in事件只會與數(shù)據(jù)包的交換有關(guān),屏蔽的與LACP的聯(lián)系,減少了LACP模塊與交換模塊之間的耦合性。事件lacplib.Event?SlaveStateChanged會在正常通信階段,處理交換機中端口狀態(tài)變化(從非LACP狀態(tài)到LACP狀態(tài),或LACP狀態(tài)失效),完成對交換機內(nèi)的流表清理初始化工作。

    圖2 交換模塊處理邏輯

    3 LACP協(xié)議解析與封裝

    由于在網(wǎng)絡(luò)中傳輸?shù)腖ACP數(shù)據(jù)包都是字節(jié)流,無法直接處理,所以根據(jù)IEEE 802.1ax協(xié)議標(biāo)準(zhǔn),并借助程序開發(fā)語言Python中的struct模塊來設(shè)計解析與封裝模塊,將原始LACP字節(jié)流的解析成可以處理的信息,以及將處理好的數(shù)據(jù)封裝為可以在網(wǎng)絡(luò)中傳輸?shù)淖止?jié)流。此模塊用于協(xié)助LACP模塊對協(xié)議的處理。

    在解析數(shù)據(jù)包時,當(dāng)LACP模塊調(diào)用本模塊解析協(xié)議的原始數(shù)據(jù)時,會調(diào)用struct模塊中的struct.un?pack_from,根據(jù)LACP協(xié)議字段值順序以及大小,以偏移量作為參數(shù)將原始的字節(jié)流解碼為可以處理的信息。主要解析的關(guān)鍵字表1所示。同樣在封裝數(shù)據(jù)包,使用struct模塊中的pack方法,根據(jù)LACP協(xié)議字段順序進行組裝,得到一個可以直接發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包。

    表1 LACP協(xié)議關(guān)鍵字段值

    作為在Ryu平臺實現(xiàn)鏈路聚合控制協(xié)議,主要是通過控制actor_state字段值,來與對端交互。本系統(tǒng)主要就是根據(jù)此字段值來實現(xiàn)鏈路的聚合。actor_state為一字節(jié),8個比特位,每個位對應(yīng)的含義如表2。

    ●LACP_Activity:標(biāo)志LACP活動狀態(tài),主動為1,被動為0。

    ●LACP_Timeout:標(biāo)志鏈路超時時間控制值,Short Timeout為 1,Long Timeout為 0。

    ●Aggregation:如果標(biāo)志值為1,則系統(tǒng)認為這個鏈路為可聚合;如果為0,則這個鏈路為獨立的。

    ●Synchronization:如果值為1,系統(tǒng)認為這個鏈路是IN_SYNC狀態(tài),即這個鏈路已經(jīng)分配給合適的鏈路聚合組,這個組已經(jīng)與兼容的鏈路聚合相關(guān)聯(lián);為0表示為OUT_OF_SYNC,表示該鏈路未在聚合態(tài)。

    ●Collecting:如果值為1,在這條鏈路聚集傳入的幀為enabled狀態(tài),即在沒有管理性更改,或接收消息更該的情況下,不會被禁用;否則為0。

    ●Distributing:如果值為0,在這條鏈路上分發(fā)傳出的幀為enabled狀態(tài),即 在沒有管理性更改,或接收消息更該的情況下不會被禁用;否則為0。

    ●Defaulted:如果值為1,標(biāo)志表示本端的接收計算機正在使用默認的運行對端信息,這些信息是為對端管理配置的;如果為0,已在LACPDU中收到正在使用的運行對端信息。

    ●Expired:如果值為1,表示本端的接收機是過期狀態(tài);如果為0,本端接收機為過期。

    4 LACP處理邏輯模塊

    當(dāng)有關(guān)于LACP的packet-in事件觸發(fā)時,Ryu控制器會調(diào)用這個模塊進行處理。處理邏輯關(guān)系見圖3。同時控制器中維護一個綁定信息狀態(tài)變量bond,以記錄不同交換機不同端口LACP狀態(tài)信息(是否啟用LACP,超時時間)。

    首先根據(jù)事件中的信息,在bond中查看接收此LACP數(shù)據(jù)包的交換機端口的狀態(tài),來判定這個端口是否啟用了LACP;若對應(yīng)端口未啟用LACP,則將此接口啟用,并向 Ryu控制器發(fā)送 lacplib.EventSlaveStat?eChanged事件,以通告端口的狀態(tài)改變。

    表2 actor_state控制字段

    接著,依據(jù)數(shù)據(jù)包中的LACP超時時間類型為SHORT_TIMEOUT_TIME或者 LONG_TIMEOUT_TIME,來設(shè)置流表的超時時間。因為作為被動端,交換機會根據(jù)流表的超時時間自動調(diào)整端口的狀態(tài)。當(dāng)流表的超時時間達到,但仍未收到主動端的LACP數(shù)據(jù)包,以更新超時計時器,則表示LACP超時時間到達,交換機會主動刪除這條超時的流表,并向控制器發(fā)送ofp_event.EventOFPFlowRemoved流表移除消息,在控制器收到此條消息會主動更新控制器中保存的綁定信息,并清除交換機內(nèi)與該端口相關(guān)的LACP流表信息。以此,來自動完成與主動端鏈路狀態(tài)保持。

    然后,根據(jù)LACP超時時間,來判斷超時時間是否變化,如果變化需要修改控制器中保存的綁定狀態(tài)信息,并下發(fā)指令,修改交換機內(nèi)相應(yīng)LACP流表的超時時間。

    最后,作為對packet-in消息回復(fù),構(gòu)造響應(yīng)LACP數(shù)據(jù)包,通過packet-out消息發(fā)送響應(yīng)信息給主動端,以完成和主動端的交互。

    圖3 LACP處理邏輯

    LACP模塊包含的關(guān)鍵方法:

    ●do_lacp:LACP 處理

    ●_create_response:創(chuàng)建回應(yīng)數(shù)據(jù)包,并序列化

    ●_create_lacp:構(gòu)造LACP響應(yīng)數(shù)據(jù)包

    ●_get_slave_enabled:獲取端口的LACP狀態(tài)

    ●_set_slave_enabled:設(shè)置LACP狀態(tài)

    ●_get_slave_timeout:獲取端口的超時時間信息

    ●_set_slave_timeout:設(shè)置端口的超時時間信息

    5 實驗驗證與分析

    本實驗通過仿真工具Mininet構(gòu)建一個具有一個OpenFlow交換機,四臺主機網(wǎng)絡(luò),其中主機h1與交換機之間有兩條網(wǎng)絡(luò)連接線。如圖4所示。

    圖4 實驗拓撲

    5.1 在 h1Linux主機上配置鏈路聚合

    完成后,如圖5看到邏輯接口bond0為MASTER,物理接口h1-eth0和h1-eth1為SLAVE。

    圖5 h1最終配置結(jié)果

    執(zhí)行程序,在終端中有一下信息輸出,如圖6??梢钥闯鯨ACP起用,被動端的接口也已經(jīng)UP,timeout事件從默認的0秒變?yōu)長ONG_TIMEOUT_TIME,即90秒。lacp的響應(yīng)數(shù)據(jù)包被發(fā)送出去。在最后輸出信息:“slave state changed port:2 enabled:True”表示應(yīng)用接收到了EventSlaveStateChanged事件。

    圖6 程序執(zhí)行輸出

    控制器端的輸出如圖7。

    圖7 控制器終端輸入信息

    檢查流表,如圖8,可以看出:在當(dāng)LACP數(shù)據(jù)包(類型為0x8809)從h1的eth1接口被發(fā)送(進入端口為 s1-eth2,mac 地址為 00:00:00:00:00:12),packet-in消息被發(fā)送;在當(dāng)lacp數(shù)據(jù)包從h1的eth0接口被發(fā)送出去時,packet-in消息被發(fā)送出去;同時還包含一條table-miss流表項。

    圖8 流表信息

    5.2 鏈路聚合通信功能驗證

    首先驗證鏈路可以改進鏈接速度,將去往h1的流量分布到兩個鏈路上。

    首先執(zhí)行,h2 ping h1如圖9。

    圖9

    當(dāng)繼續(xù)發(fā)送ping,檢查OpenFlow交換機的流表信息,如圖10,相比剛開始,添加了兩條流表項。從這可以看出,S1-eth 1被用于h2和h1的通信。

    圖10

    接著從h3 ping h1,結(jié)果如圖11。

    圖11

    在OpenFlow交換機中可以看到如圖12,可以看出又添加了兩條流表項,但是參數(shù)duration的值比較小。由此可以得知,交換機的eth 2接口用于h3和h1通信。

    圖12

    同樣在從h4到h1執(zhí)行ping測試??梢缘玫饺绫?的端口使用表。

    表3

    由此得出,兩條鏈路都為H1通信服務(wù)。鏈路聚聚合用成功。

    5.3 容錯性驗證

    驗證可以實現(xiàn),數(shù)據(jù)鏈路的容錯性。當(dāng)前狀態(tài)是,當(dāng)從h2和h4與h1通信,交換機的端口eth 2被使用,當(dāng)從h3與h1通信,eth1被使用。將交換機的eth 1從聚合鏈路中移除。由于H1的eth 0停止,h3與h1無法通過ping測試,當(dāng)經(jīng)過90秒后,新的消息日志會出現(xiàn),如圖13。

    圖13

    可以看出超時時間到達,斷開的接口的所有學(xué)習(xí)的MAC地址和流表項都會刪除,回到初始狀態(tài)。如果有新的通信活動在h1和h3之間,存在的聚合鏈路會學(xué)習(xí)新的MAC地址,注冊新的流表項。如圖14。

    圖14

    之前的無法ping測試,現(xiàn)在恢復(fù),如圖15。

    圖15

    由此可以看出,即使某些鏈路出現(xiàn)問題,仍然能夠?qū)崿F(xiàn)通信,實現(xiàn)了容錯性。

    6 結(jié)語

    本文根據(jù)OpenFlow協(xié)議,以及鏈路聚合控制協(xié)議LACP,在基于Ryu框架中,探索如何將鏈路聚合在軟件定義網(wǎng)絡(luò)環(huán)境中實現(xiàn)。從本實驗可以看出軟件定義網(wǎng)絡(luò)的優(yōu)勢:不用接觸底層設(shè)備,可以用過中心控制器來管控網(wǎng)絡(luò),為網(wǎng)絡(luò)管理帶來便利性;快捷的部署,對于新的技術(shù)協(xié)議,在傳統(tǒng)的環(huán)境中去驗證十分困難,但在SDN環(huán)境中,屏蔽底層細節(jié),通過統(tǒng)一的流表樣式來控制交換機的數(shù)據(jù)包轉(zhuǎn)發(fā)行為,為以后的網(wǎng)絡(luò)發(fā)展與技術(shù)革新帶來新的動力。本設(shè)計在一定程度上實現(xiàn)了鏈路聚合控制協(xié)議,但并未實現(xiàn)主動式的,交換機只作為一種被動式角色。今后的研究可以嘗試,設(shè)計一套完整的LACP協(xié)議的實現(xiàn)。

    猜你喜歡
    流表交換機數(shù)據(jù)包
    基于時序與集合的SDN流表更新策略
    SmartSniff
    基于緩存策略的OpenFlow流表存儲優(yōu)化方案研究
    電子測試(2018年21期)2018-11-08 03:09:34
    修復(fù)損壞的交換機NOS
    簡析yangUI流表控制
    軟件定義網(wǎng)絡(luò)中一種兩步式多級流表構(gòu)建算法
    使用鏈路聚合進行交換機互聯(lián)
    PoE交換機雷擊浪涌防護設(shè)計
    基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計與實現(xiàn)
    羅克韋爾自動化交換機Allen-Bradley ArmorStratix 5700
    自動化博覽(2014年9期)2014-02-28 22:33:16
    云林县| 景东| 南江县| 集安市| 泗阳县| 平远县| 大厂| 都匀市| 凉城县| 太仓市| 宿松县| 邹平县| 景宁| 吉首市| 霍林郭勒市| 岢岚县| 安康市| 吴堡县| 封丘县| 额济纳旗| 霍州市| 长白| 弋阳县| 阳江市| 湖北省| 蕉岭县| 乐安县| 喀喇沁旗| 屏东市| 汶上县| 临猗县| 兴业县| 恩施市| 横山县| 绩溪县| 图木舒克市| 河池市| 冷水江市| 额尔古纳市| 汕头市| 葫芦岛市|