周進(jìn)松,李正宇,吳小艨
(中國電子科技集團公司第三十研究所,四川 成都 610041)
?
基于HDLC協(xié)議的通信通道設(shè)計
周進(jìn)松,李正宇,吳小艨
(中國電子科技集團公司第三十研究所,四川 成都 610041)
為對在E1信道上采用HDLC(高級數(shù)據(jù)鏈路控制)幀格式傳輸?shù)臄?shù)據(jù)進(jìn)行有效控制,信道兩端的管理設(shè)備需要進(jìn)行數(shù)據(jù)通信。通信通道均通過HDLC鏈路實現(xiàn),不額外增加通信信道。目前的通信通道,大多通過解析HDLC幀,在HDLC凈荷中加入通信數(shù)據(jù)的方法來實現(xiàn)。為降低設(shè)計難度,通過分析HDLC鏈路的特點,提出用通信數(shù)據(jù)替換標(biāo)志字段的方法建立通信通道。這種方法不解析HDLC幀、不增加凈荷開銷。與目前的方法相比更優(yōu),能降低設(shè)計難度,同時降低對信道的干擾,并便于后期維護(hù)。
HDLC;管理;標(biāo)志字段;通信通道;解析
HDLC是一個在同步網(wǎng)上傳輸數(shù)據(jù)、面向比特的數(shù)據(jù)鏈路控制協(xié)議,由國際標(biāo)準(zhǔn)化組織(ISO)提出。在通信領(lǐng)域中,HDLC協(xié)議是應(yīng)用最廣泛的協(xié)議之一[1],其工作方式可以支持半雙工、全雙工傳送,支持點到點、多點結(jié)構(gòu),支持交換型、非交換型信道。
近年,在電信網(wǎng)中,隨著SDH(同步數(shù)字體系)系統(tǒng)的大量普及,PDH(準(zhǔn)同步數(shù)字體系)系統(tǒng)開始逐漸退役,為充分利用這些已有資源,通過PDH系統(tǒng)的E1資源來傳輸以太網(wǎng)業(yè)務(wù)成為廣泛的應(yīng)用[2]。該應(yīng)用方式利用協(xié)議轉(zhuǎn)換器將以太網(wǎng)數(shù)據(jù)進(jìn)行HDLC協(xié)議封裝,采用HDLC鏈路點到點的工作方式,為小型以太網(wǎng)交換提供服務(wù)。
根據(jù)使用需求,運營商在線路上增加管理設(shè)備,實現(xiàn)對傳輸數(shù)據(jù)的控制。管理設(shè)備的增加,要求對原線路的影響盡量小,且管理設(shè)備相互之間可以進(jìn)行通信傳輸,以實現(xiàn)對線路數(shù)據(jù)的有效控制。本文即是根據(jù)這種需求,提出的一種在管理設(shè)備之間進(jìn)行通信的方法。該方法為標(biāo)志字段替代法,利用HDLC鏈路中標(biāo)志字段的唯一性,通過替換,實現(xiàn)通信數(shù)據(jù)的交互,可滿足在對線路影響很小的情況下進(jìn)行管理設(shè)備通信的使用需求。
HDLC是面向位的鏈路控制規(guī)程,采用幀結(jié)構(gòu)傳輸數(shù)據(jù),HDLC的幀結(jié)構(gòu)如圖1所示[3]。

圖1 HDLC幀結(jié)構(gòu)
(1)標(biāo)志(F):標(biāo)志為01111110(7E)的比特模式,用以標(biāo)志幀的起始和前一幀的終止。標(biāo)志字段也可以作為幀與幀之間的填充字符。
(2)地址(A):每一接收端地址唯一,用于判斷當(dāng)前數(shù)據(jù)幀是否發(fā)給自己。
(3)控制(C):構(gòu)成各種命令和響應(yīng),以便對鏈路進(jìn)行監(jiān)視和控制。HDLC幀中有信息幀、監(jiān)督幀和無編號幀3種不同類型的幀[4]。
(4)信息(I):信息可以是任意的二進(jìn)制比特串。比特串長度未作限定,其上限由通信緩沖器的容量決定,目前國際上用得較多的是1 000~2 000 bits。
(5)幀校驗序列(FCS):幀校驗序列可以使用16位CRC,對兩個標(biāo)志字段之間的整個幀的內(nèi)容進(jìn)行校驗。
通過HDLC鏈路發(fā)送通信數(shù)據(jù),現(xiàn)在普遍的做法是利用HDLC幀創(chuàng)建通信通道。即通過搜索或產(chǎn)生HDLC幀,將通信數(shù)據(jù)插入HDLC幀中發(fā)送,設(shè)計的基本流程如下:
發(fā)送端首先搜索并解析HDLC幀,然后將待發(fā)送的通信數(shù)據(jù)插入信息字段的特定位置,并重新進(jìn)行校驗和運算,形成新的HDLC幀發(fā)送(見圖2);
接收端則在收到HDLC幀后,同樣先進(jìn)行解析,在預(yù)先設(shè)定的位置提取通信數(shù)據(jù),然后進(jìn)行校驗和運算,恢復(fù)原HDLC幀(見圖3)。

圖2 向HDLC幀中插入通信數(shù)據(jù)

圖3 從HDLC幀中提取通信數(shù)據(jù)
該方法的設(shè)計思路較簡單,通信隨時可以進(jìn)行,通信完成后對原HDLC幀數(shù)據(jù)無損傷。但是該方法不僅收發(fā)端都需要對HDLC幀進(jìn)行解析,校驗值重新運算,而且HDLC幀的長度會隨著通信數(shù)據(jù)的插入而發(fā)生改變,設(shè)計實現(xiàn)比較復(fù)雜。
本文提出創(chuàng)建通信通道的方法,為基于HDLC鏈路標(biāo)志字段(7E)的替代方法。當(dāng)管理設(shè)備有通信需求時,持續(xù)對標(biāo)志字段進(jìn)行搜索和定位,將通信數(shù)據(jù)通過替換特定標(biāo)志字段的方式進(jìn)行傳輸。本設(shè)計不僅不需要對HDLC幀進(jìn)行解析,甚至數(shù)據(jù)長度也不發(fā)生改變,設(shè)計難度大為降低。
3.1標(biāo)志字段的利用
HDLC鏈路要求所有的幀必須以字段“7E”標(biāo)志開始和結(jié)束,所有幀中不能有“7E”出現(xiàn)。接收設(shè)備通過不斷搜尋標(biāo)志字段“7E”,實現(xiàn)幀同步,從而保證接收部分對后續(xù)字段的正確識別。另外,在幀與幀的空載期間,連續(xù)發(fā)送標(biāo)志字段“7E”,用來作時間填充。如圖4所示。

圖4HDLC幀中標(biāo)志字段的傳輸
在HDLC幀中,有可能產(chǎn)生與標(biāo)志字段的碼型相同的比特組合。為了防止這種情況產(chǎn)生,保證對數(shù)據(jù)的透明傳輸,采取了比特填充技術(shù)。當(dāng)采用比特填充技術(shù)時,在數(shù)據(jù)位中如果有5個連續(xù)“1”,那么就在后面增加一個“0”[5];接收端則去除5個“1”以后的“0”,恢復(fù)原來的數(shù)據(jù)序列。
比特填充技術(shù)的采用排除了在HDLC幀中出現(xiàn)的“7E”的可能性,保證了“7E”只能在鏈路空閑時出現(xiàn)。由于“7E”的特殊性,因此通信通道利用替代“7E”的方式建立,在發(fā)送端用通信數(shù)據(jù)替代“7E”傳輸?shù)綄Χ耍邮斩烁鶕?jù)“7E”提取通信數(shù)據(jù),并插入“7E”恢復(fù)線路數(shù)據(jù)。具體為每連續(xù)3個“7E”,用通信數(shù)據(jù)替代中間的一個“7E”。采用該方法有以下一些好處:
(1)對鏈路同步影響小:替換后標(biāo)志字段依舊保持較高比例,不會造成鏈路失步。
(2)通信數(shù)據(jù)容易判斷:每兩個“7E”中間僅1字節(jié)通信數(shù)據(jù),與HDLC的幀結(jié)構(gòu)差別大,易于識別。
(3)便于鏈路恢復(fù):通信數(shù)據(jù)完成接收后,固定用“7E”替換,不需額外計算,而且數(shù)據(jù)長度未變,HDLC鏈路的恢復(fù)操作簡單。
(4)對HDLC幀無影響:由于“7E”只在非幀時出現(xiàn),因此通信數(shù)據(jù)也只會在非幀期間傳遞,不會對HDLC幀數(shù)據(jù)進(jìn)行操作。
即使由于干擾等意外原因,通信數(shù)據(jù)未能被對端正確識別,對HDLC鏈路來說,也僅僅是在空閑時段產(chǎn)生的一些誤碼,對HDLC幀無影響。因此,標(biāo)志字段替代方法對HDLC鏈路的代價,僅僅是由于通信數(shù)據(jù)的收發(fā)過程,需要對鏈路數(shù)據(jù)先進(jìn)行緩存再處理,增加了鏈路時延。不過該部分時延對終端設(shè)備幾乎無感,運營商對此完全可以接受。
3.2硬件設(shè)計
硬件設(shè)計,包括發(fā)送端和接收端兩部分,分別進(jìn)行處理。
發(fā)送端首先對線路中是否有連續(xù)的3個字符“7E”進(jìn)行檢測,即對線路中是否有字符串“7E-7E-7E”進(jìn)行檢測。一旦檢測到,就將中間的一個“7E”進(jìn)行標(biāo)識,設(shè)計代碼主要如下:
if ((cnt_7e == 0) && (bit24_temp[23:0] == 24'h7e7e7e))
begin
cnt_7e <= 1;
cnt_7e_ton <= 1;
end
else
begin
if (cnt_7e_ton == 1)
begin
if ((cnt_7e >= 1) && (8 >= cnt_7e))
begin
cnt_7e <= cnt_7e + 1;
flag <= 0;
end
else if ((cnt_7e >= 9) && (16 >= cnt_7e))
begin
cnt_7e <= cnt_7e + 1;
flag <= 1;
end
else if ((cnt_7e >= 17) && (24 >= cnt_7e))
begin
cnt_7e <= cnt_7e + 1;
flag <= 0;
end
else
begin
flag <= 0;
cnt_7e <= 0;
cnt_7e_ton <= 0;
end
end
當(dāng)發(fā)送端在有數(shù)據(jù)待發(fā)送時,即在標(biāo)識位置用待發(fā)送數(shù)據(jù)“X”對字符“7E”進(jìn)行替代,設(shè)計代碼主要如下:
if (flag_7e & flag_insert )
send_data <= insert_data;
else
send_data <= user_data;
整個通信數(shù)據(jù)的插入過程如圖5所示。

圖5 通信數(shù)據(jù)的插入
接收端對接收到的數(shù)據(jù)持續(xù)進(jìn)行檢測,每當(dāng)檢測到接收數(shù)據(jù)中存在字符串“7E-X-7E”時,一旦檢測到,就將中間的一個“X”進(jìn)行標(biāo)識,設(shè)計代碼如下。
if ((cnt_7e == 0) &&(bit24_temp[23:16] == 8'h7e) && (bit24_temp[7:0] == 8'h7e))
begin
cnt_7e <= 1;
cnt_7e_ton <= 1;
end
else
begin
if (cnt_7e_ton == 1)
begin
if ((cnt_7e >= 1) && (8 >= cnt_7e))
begin
cnt_7e <= cnt_7e + 1;
flag <= 0;
end
else if ((cnt_7e >= 9) && (16 >= cnt_7e))
begin
cnt_7e <= cnt_7e + 1;
flag <= 1;
end
else if ((cnt_7e >= 17) && (24 >= cnt_7e))
begin
cnt_7e <= cnt_7e + 1;
flag <= 0;
end
else
begin
flag <= 0;
cnt_7e <= 0;
cnt_7e_ton <= 0;
end
end
即將“X”判為通信數(shù)據(jù)取出并放入緩存中。同時將“7E”插入,恢復(fù)HDLC鏈路數(shù)據(jù),設(shè)計代碼主要如下:
if (flag_7e & flag_insert )
begin
comm_buf[127:0] <= {comm_buf[126:0], din};
send_data <= insert_7e;
end
else
send_data <= din;
通信數(shù)據(jù)是否接收完成,由硬件通過對接收數(shù)據(jù)的幀結(jié)構(gòu)解析,根據(jù)長度字段來判定數(shù)據(jù)是否接收完成。整個通信數(shù)據(jù)的接收過程如圖6所示。

圖6 通信數(shù)據(jù)的提取和HDLC幀恢復(fù)
3.3通信幀結(jié)構(gòu)
為準(zhǔn)確進(jìn)行數(shù)據(jù)的收發(fā),通信數(shù)據(jù)也必須以成幀結(jié)構(gòu)的形式進(jìn)行傳遞,以明確每幀數(shù)據(jù)的開始和結(jié)束。
通信幀由幀頭字段(F)、長度字段(L)、信息字段(I)、幀校驗序列字段(FCS)、結(jié)束字段(E)等組成,幀結(jié)構(gòu)定義如圖7所示。

圖7 通信幀結(jié)構(gòu)
1)幀頭字段(F)
由于“7E”的特殊性,在HDLC鏈路空閑時期,非“7E”碼型的數(shù)據(jù)不會出現(xiàn)。在這種狀態(tài)下,幀頭字段的碼型選擇可較隨意,只需避開“7E”碼型即可。為保證數(shù)據(jù)接收的可靠性,幀頭字段采取16 bit,用以標(biāo)志通信數(shù)據(jù)幀的開始。

圖8通信幀幀頭字段的插入
2)長度字段(L)
通信幀的總長度,用于判定幀接收是否完成。
3)信息字段(I)
由于通信數(shù)據(jù)以8 bit為單位提取,因此信息字段需要是8 bit的倍數(shù),不足需補充,倍數(shù)自定義。
4)幀校驗序列字段(FCS)
幀校驗方式本處選擇普遍使用的16位CRC進(jìn)行校驗。
5)結(jié)束字段(E)
為保證通信數(shù)據(jù)接收的可靠性,定義結(jié)束字段,用以標(biāo)志通信數(shù)據(jù)幀的結(jié)束。當(dāng)接收通信數(shù)據(jù)的長度與長度字段一致時,對該通信數(shù)據(jù)進(jìn)行判斷,若與結(jié)束字段不一致,即判斷本次通信失敗。
4.1通信數(shù)據(jù)中有“7E”
由于“7E”用以標(biāo)志幀的起始和前一幀的終止,若在幀數(shù)據(jù)中出現(xiàn),將會破壞幀數(shù)據(jù)的接收,因此HDLC鏈路采取了比特填充技術(shù)來改變幀數(shù)據(jù)中出現(xiàn)的“7E”的碼型,以避免“7E”的出現(xiàn)。
同樣,當(dāng)通信幀數(shù)據(jù)中有“7E”存在時,可能會形成“7E-7E-7E-7E-7E”的情況,此時接收端將無法對通信數(shù)據(jù)進(jìn)行準(zhǔn)確定位,造成通信失敗。
由于通信數(shù)據(jù)的接收,通過判斷線路中是否有字符串“7E-X-7E”來進(jìn)行,即對接收的數(shù)據(jù)緩存中,固定以24 bit長度為標(biāo)準(zhǔn)進(jìn)行比較。若采取HDLC鏈路的比特填充技術(shù),數(shù)據(jù)長度將會變?yōu)?5 bit,不僅給鏈路增加了額外的開銷,而且使得設(shè)計難度加大。
因此,對通信數(shù)據(jù)中有“7E”的情況,沒有采取比特填充技術(shù)進(jìn)行破壞,而是通過硬件傳輸狀態(tài)的判定,改變對通信數(shù)據(jù)的判斷流程,達(dá)到準(zhǔn)確接收“7E”的目的。
接收端在接收數(shù)據(jù)時,判定方式為每1 bit判斷1次。只要判斷到通信幀的幀頭“F1F2”,便置起相應(yīng)的標(biāo)志。在標(biāo)志置起期間,若線路中有字符串“7E-7E-7E”出現(xiàn),通信處理流程將中間的一個“7E”判定為通信數(shù)據(jù),提取到緩存中。同時對數(shù)據(jù)的接收改為每16 bit判斷一次,以防止連續(xù)的“7E”出現(xiàn)。當(dāng)線路中無“7E-7E-7E”出現(xiàn)時,恢復(fù)為每1 bit判斷1次。通信數(shù)據(jù)接收完成后,將標(biāo)志清零,此時線路中的字符串“7E-7E-7E”將不再處理。
4.2滿帶寬
HDLC鏈路中,“7E”用以標(biāo)志幀的起始和前一幀的終止。在業(yè)務(wù)量小時,鏈路中有大量“7E”存在,對通信通道不造成任何障礙。但是當(dāng)滿帶寬傳數(shù)據(jù)時,會出現(xiàn)HDLC幀連續(xù)發(fā)送的情況,鏈路中將沒有足夠的字符串“7E-7E-7E”出現(xiàn),即無法建立通信通道。
針對該情況,設(shè)計了兩種工作模式來進(jìn)行處理,由使用人員根據(jù)具體情況來配置。
1)等待模式
顧名思義,等待模式就是等待滿帶寬傳輸狀態(tài)停止,字符串“7E-7E-7E”出現(xiàn)。在此期間,即使有字符串“7E-7E-7E”的出現(xiàn),也不能保證能長期穩(wěn)定的出現(xiàn),因此,通信設(shè)計流程必須具備超時和重傳機制。
在通信遇到傳輸無法啟動、啟動后超時無法完成傳輸或傳輸完成后超時無法收到響應(yīng)等情況時,控制軟件將自動觸發(fā)重傳機制,直至通信成功。該模式適用于對實時性要求不高的數(shù)據(jù)傳遞。
2)強插模式
若通信數(shù)據(jù)的實時性要求高,也可不等待滿帶寬狀態(tài)的停止就傳遞數(shù)據(jù)。強插模式即有通信數(shù)據(jù)待傳時,若在設(shè)定閥值內(nèi)字符串“7E-7E-7E”不能出現(xiàn)時,即將字符串“7E-7E-7E”強行插入用戶數(shù)據(jù)中,為通信通道的建立創(chuàng)造條件。
強插模式會對正在傳輸?shù)臄?shù)據(jù)造成破壞,因此要求數(shù)據(jù)傳輸量要少,以對正常傳輸?shù)腍DLC鏈路的破壞盡量小,非緊急情況不使用。
根據(jù)上述方法,設(shè)計實現(xiàn)相應(yīng)的功能,并搭建相應(yīng)的實驗環(huán)境進(jìn)行測試。測試環(huán)境如圖9所示,由兩臺計算機通過協(xié)議轉(zhuǎn)換器,在PDH系統(tǒng)中進(jìn)行通信傳輸測試。

圖9 實驗環(huán)境
測試通過ping包和飛秋傳輸?shù)姆绞竭M(jìn)行,測試結(jié)果如圖10和圖11所示。

圖10 ping包測試結(jié)果

圖11 飛秋傳輸文件測試結(jié)果
將測試結(jié)果與沒加實驗設(shè)備的測試結(jié)果進(jìn)行比較后,二者幾無差別,實驗結(jié)果證明了設(shè)計方法的可行性和對用戶的影響小,可滿足管理設(shè)備在HDLC設(shè)備上的通信使用需求。
本文設(shè)計的標(biāo)志字段替代方法,針對采用HDLC鏈路點到點的使用模式,通過E1信道和傳輸協(xié)議轉(zhuǎn)換器進(jìn)行通信的信道管理設(shè)備。通過本設(shè)計,在已有幀數(shù)據(jù)傳輸?shù)腍DLC鏈路通道上,成功開辟了一條新的通信通道,使管理設(shè)備能夠在對鏈路影響較小的情況下完成通信數(shù)據(jù)交互。目前該設(shè)計
方法已成功應(yīng)用到產(chǎn)品中,在大量用戶中使用穩(wěn)定可靠,收到了滿意的效果。
由于本文設(shè)計主要面對通信數(shù)據(jù)量小,占用信道時間短,對通信的實時性要求不高,且通信設(shè)備需為點對點成對使用的情況。因此在使用方式上有一定的限制,我們下一步的研究方向?qū)⒏倪M(jìn)為通信設(shè)備為點對多點情況使用時,如何在不增加或少量增加開銷的情況下,通過HDLC鏈路完成通信數(shù)據(jù)的傳遞。
[1]張文博,左勇,徐浩然等.支持HDLC協(xié)議的紫外通信系統(tǒng)設(shè)計[J].光通信技術(shù), 2012(09):53-56.ZHANG Wen-bo,ZUO Yong,XU Hao-ran,et al. Design of HDLC-Enabled Ultraviolet Communication System[J].Optical Communications Technology,2012(09):53-56.
[2]劉宇,張斌,徐東明.符合中國移動標(biāo)準(zhǔn)協(xié)議轉(zhuǎn)換器中的HDLC協(xié)議的FPGA設(shè)計與實現(xiàn)[J].電子產(chǎn)品世界, 2011(06):58-60.
LIU Yu,ZHANG Bin and XU Dong-ming. FPGA Design and Implementation of HDLC Protocol for China Mobile Standard Protocol Converter[J].Electronic Engineering & Product World, 2011(06):58-60.
[3]王雅榮,鮑民權(quán),邱智亮.HDLC協(xié)議控制器IP核的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用, 2007(02):33-35.WANG Ya-rong,BAO Min-quan and QIU Zhi-liang.Design and Implementation of HDLC Protocol Controller IP Core[J].Application of Electronic Technique,2007(02):33-35.
[4]彭圻平,胡國慶,王立瑩.基于FPGA的HDLC規(guī)程模塊實現(xiàn)[J].計算機與網(wǎng)絡(luò), 2013(10):64-67.
PENG Qi-ping,HU Guo-qing and WANG Li-yingl. Implementation of HDLC Procedures Module based on FPGA[J].Computer & Network, 2013(10):64-67.
[5]高希權(quán).異步傳輸方式的HDLC協(xié)議的實現(xiàn)[J].通信技術(shù), 2008,41(11):78-90.
GAO Xi-quan. Implementation of HDLC based on the Asynchronous Transmission Mode[J]. Communications Technology, 2008,41(11):78-90.

周進(jìn)松(1976—),男,工程師,主要研究方向為通信網(wǎng)絡(luò);
李正宇(1981—),男,工程師,主要研究方向為通信網(wǎng)絡(luò);
吳小艨(1971—),女,高級工程師,主要研究方向為通信網(wǎng)絡(luò)。
Communication Channel based on HDLC Protocol
ZHOU Jin-song, LI Zheng-yu, WU Xiao-meng
(No.30 Institute of CETC, Chengdu Sichuan 610041, China)
In order to effectively control the transmitted data on E1 channel in HDLC(High-level Data Link Control) frame format, data communication is required of between the channel management equipment at both ends. Communication channels are all realized by HDLC link, without additional channels. Current communication channels are mostly realized by parsing HDLC frame and adding communication data to the HDLC payload. For reducing the design difficulty and based on the characteristics of HDLC link, a method for constructing communication channel by replacing flag filed with communication data is proposed. This method parses no HDLC frame, and has no increase of payload overhead. Compared with the current method, the proposed method is fairly better in reducing design difficulty and channel interference, and also enjoys convenient later maintenance.
HDLC;management;flag field;communication channel;parse
10.3969/j.issn.1002-0802.2016.03.022
2015-10-02;
2016-01-16Received date:2015-10-02;Revised date:2016-01-16
TP393
A
1002-0802(2016)03-0368-06