陳玉霞,程友清,劉 瓊,蘇 毅(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;.武漢烽火網(wǎng)絡(luò)有限責(zé)任公司 湖北 武漢 430074)
EVB技術(shù)中ECP協(xié)議的實(shí)現(xiàn)及改進(jìn)
陳玉霞1,2,程友清2,劉 瓊2,蘇 毅2
(1.武漢郵電科學(xué)研究院 湖北 武漢 430074;2.武漢烽火網(wǎng)絡(luò)有限責(zé)任公司 湖北 武漢430074)
為了實(shí)現(xiàn)ECP(邊緣控制協(xié)議)在數(shù)據(jù)中心EVB(邊緣虛擬橋接)技術(shù)中對(duì)VDP等發(fā)現(xiàn)協(xié)議的承載功能,本文分析該協(xié)議并給出了一種實(shí)現(xiàn)方案,能夠滿足ECP在虛擬終端和實(shí)體網(wǎng)橋之間的可靠數(shù)據(jù)傳輸,并針對(duì)ECP自身在可靠性方面的的不足,采用增加校驗(yàn)位的方法對(duì)其進(jìn)行改進(jìn),最后在Linux上進(jìn)行模擬,能夠滿足改進(jìn)需求,可有效提高ECP傳輸數(shù)據(jù)的可靠性。
ECP協(xié)議;可靠性;傳輸;校驗(yàn)
為了解決網(wǎng)絡(luò)邊緣虛擬化的問題,將服務(wù)器從復(fù)雜的網(wǎng)絡(luò)交換工作中脫離出來,回歸到原先的服務(wù)應(yīng)用功能上,轉(zhuǎn)由網(wǎng)絡(luò)設(shè)備本身去實(shí)現(xiàn),提出了一種實(shí)現(xiàn)虛擬機(jī)網(wǎng)絡(luò)通訊的方法[1],這就是IEEE802.1Qbg標(biāo)準(zhǔn)所要說明的內(nèi)容,它指定了一種EVB技術(shù)。實(shí)現(xiàn)EVB需要一系列協(xié)議,其中首先需要能夠支持發(fā)現(xiàn)和配置VSI(虛擬服務(wù)接口),即VDP協(xié)議。而ECP是為上層協(xié)議報(bào)文提供一種帶確認(rèn)機(jī)制的可靠傳輸協(xié)議,為服務(wù)器和交換機(jī)之間傳送VDP協(xié)議的TLV,所以ECP協(xié)議的實(shí)現(xiàn)是關(guān)系到整個(gè)系統(tǒng)順利建立的基礎(chǔ)。為此,文中基于IEEE802.1Qbg標(biāo)準(zhǔn)給出了一種實(shí)現(xiàn)方案,并采用增加校驗(yàn)位的方法對(duì)ECP的報(bào)文進(jìn)行改進(jìn),有效的保證ECP傳輸?shù)目煽啃约皽?zhǔn)確性。
ECP協(xié)議類似于IP協(xié)議中的TCP協(xié)議,是使用緩存重傳機(jī)制實(shí)現(xiàn)可靠傳輸?shù)囊粋€(gè)承載協(xié)議,它可以承載其上的任何二層協(xié)議ULP,在EVB中,我們以VDP為例。
1.1ECP運(yùn)作流程
VDP要發(fā)送報(bào)文時(shí),VDP的報(bào)文以TLV形遞交給ECP,ECP執(zhí)行發(fā)送過程,直到發(fā)送成功或者超過最大重傳次數(shù)后刪除為止,如圖1所示。實(shí)現(xiàn)過程有以下幾步:
圖1 ECP協(xié)議執(zhí)行過程圖
1)VDP向ECP發(fā)起傳輸請(qǐng)求處理,向ECP傳輸要發(fā)送的數(shù)據(jù)單元。這些數(shù)據(jù)單元由一系列的TLV組成。
2)ECP將這一系列的TLV封裝到自己的報(bào)文格式中,添加上序列號(hào)并發(fā)送出去,且為該報(bào)文啟動(dòng)一個(gè)低級(jí)響應(yīng)定時(shí)器L-ACK等待回應(yīng),同時(shí)ECP存儲(chǔ)本次發(fā)送緩存。
3)接收端ECP收到報(bào)文后,存于緩存中,處理還原成原來的TLV,然后交由VDP處理,上層VDP處理完成后確認(rèn)才將接收緩存清除。
4)接收緩存清除后,接收端向發(fā)送端發(fā)送一個(gè)L-ACK應(yīng)答。
5)發(fā)送端在定時(shí)器超時(shí)之前收到指定序列號(hào)的ACK報(bào)文確認(rèn),那么清除發(fā)送緩存。若發(fā)送端等待超時(shí)還未收到該ACK確認(rèn),那么查看最大重傳次數(shù)。未超過最大重傳次數(shù),那么將重新發(fā)送緩存中的報(bào)文;若超過最大重傳次數(shù),那么清空發(fā)送緩存。
1.2ECP報(bào)文格式
1)ECP的目的地址使用LLDP協(xié)議地址,當(dāng)在S-Channel上運(yùn)行時(shí)目的地址則使用01-80-C2-00-00-00,源MAC地址為發(fā)送端MAC地址。
2)ECP的EtherType在協(xié)議中暫未確定,待定。
3)ECP版本號(hào)Version取0x01[2]。
4)操作類型(Operation Type)在取值為0x00時(shí)表示數(shù)據(jù)報(bào)文發(fā)送(ECP request),在取值為0x01時(shí)表示ECP的ACK (ECP acknowledgement)。
5)子類型(Subtype)在取值為0x0001時(shí)表示VDP協(xié)議[3]。在ACK報(bào)文中可以忽略。
6)序列號(hào)(Sequence Number)對(duì)報(bào)文進(jìn)行標(biāo)識(shí),在初始發(fā)送時(shí)為一隨機(jī)數(shù),以后每次發(fā)送后加一。
7)ULPDU即ECP承載的上層報(bào)文內(nèi)容,本文中用VDP表示。
圖2 ECP報(bào)文格式
2.1實(shí)現(xiàn)設(shè)計(jì)方案
程序設(shè)計(jì)分為發(fā)送端和接收端。發(fā)送端上層觸發(fā),遞交VDP-TLVs給ECP,ECP收到后將VDP-TLVs封裝到自己的報(bào)文中成為ECPDU并發(fā)送出去;然后等待接收ACK確認(rèn)。如果ACK超時(shí)定時(shí)器超時(shí)都沒有收到對(duì)端的收包ACK確認(rèn),則查看重發(fā)計(jì)數(shù)器;如果計(jì)數(shù)器沒有超過最大重傳次數(shù)(retries<maxRetries),則將發(fā)包緩存中的發(fā)送報(bào)文重發(fā),并重啟ACK超時(shí)定時(shí)器。如果已經(jīng)達(dá)到最大重傳次數(shù) (retries= maxRetries),則發(fā)包狀態(tài)機(jī)將記錄重發(fā)ECPDU報(bào)文的總次數(shù),最后清空發(fā)包緩存,回到等待狀態(tài)。
接收端接收ECPDU報(bào)文,并解析包。首先根據(jù)報(bào)文字段中的Sequence Number判斷是否與上次接收的報(bào)文相同,如果相同則為重發(fā)報(bào)文,給發(fā)送端回應(yīng)一個(gè)ACK確認(rèn)包;如果不相同,那么說明是新的ECPDU并交給上層處理,然后發(fā)送ACK確認(rèn)給發(fā)送端。流程圖如圖3所示。
2.2實(shí)現(xiàn)數(shù)據(jù)及函數(shù)
實(shí)現(xiàn)本協(xié)議用到的一些數(shù)據(jù)如下(未全列出)。
maxRetries:發(fā)送端可重發(fā)的最大次數(shù),默認(rèn)值為3。
seqSendECPDU:當(dāng)前發(fā)送ECP請(qǐng)求報(bào)文的序號(hào)。
圖3 ECP發(fā)送端和接收端流程圖
seqRecvECPDU:最近一次收到的ECP請(qǐng)求報(bào)文的序號(hào)。
lastRecvSeq:用于記錄前一個(gè)收到的ECPDU報(bào)文的序號(hào)。
retries:當(dāng)前ECPDU報(bào)文重傳次數(shù)。
requestReceived:上層協(xié)議發(fā)送報(bào)文時(shí)設(shè)置為TRUE;發(fā)包請(qǐng)求處理完畢后設(shè)置為FALSE。
ackTimerout:ECP的ACK定時(shí)器默認(rèn)超出時(shí)間。
ackTimflg:ACK超時(shí)標(biāo)志,超時(shí)ackTimflg=TRUE;未超時(shí)ackTimflg=FALSE。
ackReceived:收到ACK報(bào)文時(shí)置為TRUE;ACK報(bào)文處理完畢后由發(fā)包狀態(tài)機(jī)置為FALSE。
ecpduReceived:是否收到了 ECPDU報(bào)文;收到請(qǐng)求ECPDU時(shí)置為TRUE;ECPDU處理完畢并回復(fù)ACK報(bào)文后由收包狀態(tài)機(jī)置為FALSE。
發(fā)送端發(fā)送程序如下:
ecpSend_Initialize()函數(shù),收端進(jìn)行一系列的初始化動(dòng)作,包括初始化狀態(tài),發(fā)送次數(shù),最大傳送次數(shù)等變量。
ecpSend_Pkt()函數(shù),將上層數(shù)據(jù)封裝到ECP報(bào)文中并發(fā)送出去。
ecpSend_AckTimer()函數(shù),定時(shí)器設(shè)置。
ecpSend_RecvProcess()函數(shù),收到ACK包處理。
ecpSend_Cache()函數(shù),保存緩存。
接收端程序如下:
ecpRecv_PktProcess()函數(shù),收到包并進(jìn)行處理并判斷是否為新ECPDU。
ecpRecv_Bind()函數(shù),回調(diào)函數(shù),即交由上層處理數(shù)據(jù)動(dòng)作。
ecpRecv_AckSend()函數(shù),組ACK確認(rèn)包,并發(fā)出去。
ECP協(xié)議是實(shí)現(xiàn)VDP等發(fā)現(xiàn)協(xié)議的一個(gè)基礎(chǔ)協(xié)議,它承載上層協(xié)議如VDP,為VDP提供可靠傳輸?shù)?,采用發(fā)送緩存重傳機(jī)制實(shí)現(xiàn)。ECP類似于TCP,與TCP不同的是,它是一個(gè)二層協(xié)議,且緩存重傳機(jī)制比較簡(jiǎn)單,沒有TCP那么高要求的可靠性。
雖說ECP可以重傳,且盡量保證送到,但是準(zhǔn)確性卻完全未知,因?yàn)樗鼪]有校驗(yàn)字段,不能檢驗(yàn)報(bào)文正確性。雖然ECP不需要像TCP那么高的準(zhǔn)確性,但是送到接收端是可能出錯(cuò)的,將錯(cuò)誤的信息交由上層VDP處理,VDP根據(jù)包信息處理一些錯(cuò)誤的數(shù)據(jù),并用錯(cuò)誤的信息工作,從而導(dǎo)致資源浪費(fèi)及整個(gè)邊緣交換機(jī)工作效率的降低。例如當(dāng)有外來攻擊時(shí),交換機(jī)端收到連續(xù)不斷的連接請(qǐng)求,事實(shí)上服務(wù)器端并未發(fā)包,因?yàn)闆]有一個(gè)檢驗(yàn)的判斷,判斷是否收到正確的報(bào)文,交換機(jī)端會(huì)不停的處理這一系列的惡意包,從而使系統(tǒng)崩潰,導(dǎo)致嚴(yán)重的后果。
圖4 改進(jìn)的ECP報(bào)文格式
如圖4所示,在填充VDP數(shù)據(jù)之前,加上一個(gè)校驗(yàn)字段。發(fā)送時(shí)封裝為這種帶校驗(yàn)字的包,收到后也在接收端進(jìn)行校驗(yàn)的,用來檢驗(yàn)包發(fā)送的完整性[4],準(zhǔn)確性。若收到錯(cuò)誤包,則清除收到緩存,不做處理;正確時(shí)再進(jìn)行進(jìn)一步的處理。
具體過程如下,首先在發(fā)端把校驗(yàn)和字段置為0。然后,對(duì)ECP首部中每個(gè)16bit進(jìn)行二進(jìn)制反碼求和 (整個(gè)首部看成是由一串16bit的字組成),結(jié)果存在檢驗(yàn)和字段中。收端收到包后,同樣對(duì)首部中每個(gè)16bit進(jìn)行二進(jìn)制反碼的求和[5]。由于接收方在計(jì)算過程中包含了發(fā)送方存在首部中的檢驗(yàn)和,因此,如果首部在傳輸過程中沒有發(fā)生任何差錯(cuò),那么接收方計(jì)算的應(yīng)該為全1。如果結(jié)果不是全1,即校驗(yàn)和發(fā)生錯(cuò)誤[6],那么丟棄收到的包。
實(shí)現(xiàn)方面只需要加上校驗(yàn)和算法就好。本文采用原始套接字,自定義協(xié)議類型進(jìn)行組包,并在linux下進(jìn)行測(cè)試,最后可以成功發(fā)包;對(duì)于接收端,采用同樣的方式解析包,可以成功接收并獲得信息,如圖5是模擬一個(gè)ECP帶校驗(yàn)字的收發(fā)包。
圖5 ECP模擬收發(fā)包截圖
文中基于IEEE802.1Qbg實(shí)現(xiàn)了ECP協(xié)議的傳輸,針對(duì)其不足采用增添校驗(yàn)和的方式提高ECP傳送數(shù)據(jù)時(shí)的可靠性,讓收端可以判斷收到包的正確性,可避免上層因?yàn)槭褂缅e(cuò)誤包而造成資源的浪費(fèi),本研究可用于數(shù)據(jù)中心EVB交換機(jī)的研究與生產(chǎn)中。
[1]銳捷網(wǎng)絡(luò).數(shù)據(jù)中心邊緣虛擬交換IEEE 802.1Qbg技術(shù)白皮書[EB/OL].(2011-11-21)http://www.ruijie.com.cn/fw/wd/ 2552.
[2]P802.1Qbg/D2.2-2012,IEEE Standard for Local and metropolitan area networks--Media Access Control(MAC)Bridges andVirtual BridgedLocal AreaNetworks--Amendment 21:Edge Virtual Bridging[S].
[3]H3C.新一代數(shù)據(jù)中心技術(shù)專題[EB/OL].(2013-10-11)http: //wenku.baidu.com/view/f9e3cc256c85ec3a87c2c5fe.
[4]徐進(jìn).USB3.0數(shù)據(jù)鏈路層的設(shè)計(jì)與驗(yàn)證[D].杭州:杭州電子科技大學(xué),2011.
[5]莫云鵬.DSP系統(tǒng)網(wǎng)絡(luò)接入技術(shù)的研究與實(shí)現(xiàn)[D].沈陽:沈陽工業(yè)大學(xué),2007.
[6]王國明,吳保奎,欒彥利.基于TCP/IP協(xié)議的嵌入式網(wǎng)絡(luò)打印服務(wù)器的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2005(4):36-38.
Implementation and improvement of edge control protocol in EVB technology
CHEN Yu-xia1,2,CHENG You-qing2,LIU Qiong2,SU Yi2
(1.Wuhan Research Institute of Posts and Telecommunications,Wuhan 430074,China;2.Wuhan FiberHome Networks Co.,Ltd.,Wuhan 430074,China)
In order to achieve the support function of ECP(Edge Control Protocol)for protocols like VDP(VSI discovery and configuration protocol)in EVB(Edge Virtual Bridging)technology in data center,the paper analyzes the protocol and gives an implementation scheme to meet the reliable data transmission between the virtual terminal and the real bridge,then as for the insufficient reliability of the ECP itself,adopts an method by increasing the check digit to improve and simulates it on Linux,which can meet the demand of improvement and can effectively improve the reliability of ECP to transmit data.
ECP;reliability;transmission;ckeck
TP302
A
1674-6236(2016)11-0081-03
2015-06-29稿件編號(hào):201506241
陳玉霞(1990—),女,四川瀘州人,碩士研究生,軟件工程師。研究方向:數(shù)字通信。