HDLC——High_level Data Link Control
資料鏈路控制規程
資料鏈路結構
資料鏈路結構可以分為兩種:點-點鏈路和點-多點鏈路,如圖1所示。圖中資料鏈路兩端DTE稱為計算機或終端,從鏈路邏輯功能的角度常稱為站,從網路拓撲結構的觀點則稱為節點。 在點-點鏈路中,傳送資訊和命令的站稱為主站,接收資訊和命令而發出確認資訊或響應的站稱為從站,兼有主、從功能可傳送命令與響應的站稱為複合站。在點-多點鏈路中,往往有一個站為控制站,主管資料鏈路的資訊流,並處理鏈路上出現的不可恢復的差錯情況,其餘各站則為受控站。
資料鏈路控制規程功能
資料鏈路層是OSI參考模型的第二層,它在物理層提供的通訊介面與電路連線服務的基礎上,將易出錯的資料電路構築成相對無差錯的資料鏈路,以確保DTE與DTE之間、DTE與網路之間有效、可靠地傳送資料資訊。為了實現這個目標,資料鏈路控制規程的功能應包括以下幾個部分:
- 幀控制
資料鏈路上傳輸的基本單位是幀。幀控制功能要求傳送站把網路送來的資料資訊分成若干碼組,在每個碼組中加入地址欄位、控制欄位、校驗欄位以及幀開始和結束標誌,組成幀來發送;要求接收端從收到的幀中去掉標誌欄位,還原成原始資料資訊後送到網路層。
- 幀同步
在傳輸過程中必須實現幀同步,以保證對幀中各個欄位的正確識別。
- 差錯控制
當資料資訊在物理鏈路中傳輸出現差錯,資料鏈路控制規程要求接收端能檢測出差錯並予以恢復,通常採用的方法有自動請求重發ARQ和前向糾錯兩種。採用ARQ方法時,為了防止幀的重收和漏收,常對幀採用編號傳送和接收。當檢測出無法恢復的差錯時,應通知網路層做相應處理。
- 流量控制
流量控制用於克服鏈路的擁塞。它能對鏈路上資訊流量進行調節,確保傳送端傳送的資料速率與接收端能夠接收的資料速率相容。常用的流量控制方法是滑動視窗控制法。
- 鏈路管理
資料鏈路的建立、維持和終止,控制資訊的傳輸方向,顯示站的工作狀態,這些都屬於鏈路管理的範疇。
- 透明傳輸
規程中採用的標誌和一些欄位必須獨立於要傳輸的資訊,這就意味著資料鏈路能夠傳輸各種各樣的資料資訊,即傳輸的透明性。
- 定址
在多點鏈路中,幀必須能到達正確的接收站。
- 異常狀態恢復
當鏈路發生異常情況時,如收到含義不清的序列或超時收不到響應等,能自動重新啟動,恢復到正常工作狀態。
資料鏈路控制規程分類
為了適應資料通訊的需要,ISO、ITU-T以及一寫國家和大的計算機制造公司,先後制定了不同型別的資料鏈路控制規程。根據幀控制的格式,可以分為面向字元型、面向位元型。
- 面向字元型
國際標準化組織制定的ISO 1745、IBM公司的二進位制同步規程BSC以及我國國家標準GB3543-82屬於面向字元型的規程,也稱為基本型傳輸控制規程。在這類規程中,用字元編碼集中的幾個特定字元來控制鏈路的操作,監視鏈路的工作狀態,例如,採用國際5號碼中的SOH、STX作為幀的開始,ETX、ETB作為的結束,ENQ、EOT、ACK、NAK等字元控制鏈路操作。面向字元型規程有一個很大的缺點,就是它與所用的字符集有密切的關係,使用不同字符集的兩個站之間,很難使用該規程進行通訊。面向字元型規程主要適用於中低速非同步或同步傳輸,很適合於通過電話網的資料通訊。
- 面向位元型
ITU-T制定的X.25建議的LAPB、ISO制定的HDLC、美國國家標準ADCCP、IBM公司的SDLC等均屬於面向位元型的規程。在這類規程中,採用特定的二進位制序列01111110作為幀的開始和結束,以一定的位元組合所表示的命令和響應實現鏈路的監控功能,命令和響應可以和資訊一起傳送。所以它可以實現不編碼限制的、高可靠和高效率的透明傳輸。面向位元型規程主要適用於中高速同步半雙工和全雙工資料通訊,如分組交換方式中的鏈路層就採用這種規程。隨著通訊的發展,它的應用日益廣泛。
HDLC基本概念
主站、從站、複合站
HDLC涉及三種類型的站,即主站、從站和複合站。
- 主站的主要功能是傳送命令(包括資料資訊)幀、接收響應幀,並負責對整個鏈路的控制系統的初啟、流程的控制、差錯檢測或恢復等。
- 從站的主要功能是接收由主站發來的命令幀,向主站傳送響應幀,並且配合主站參與差錯恢復等鏈路控制。
- 複合站的主要功能是既能傳送,又能接收命令幀和響應幀,並且負責整個鏈路的控制。
HDLC鏈路結構
在HDLC中,對主站、從站和複合站定義了三種鏈路結構,如圖2所示。
操作方式
根據通訊雙方的鏈路結構和傳輸響應型別,HDLC提供了三種操作方式:正常響應方式、非同步響應方式和非同步平衡方式。
- 正常響應方式(NRM)
正常響應方式(NRM)適用於不平衡鏈路結構,即用於點-點和點-多點的鏈路結構中,特別是點-多點鏈路。這種方式中,由主站控制整個鏈路的操作,負責鏈路的初始化、資料流控制和鏈路復位等。從站的功能很簡單,它只有在收到主站的明確允許後,才能發出響應。
- 非同步響應方式(ARM)
非同步響應方式(ARM)也適用於不平衡鏈路結構。它與NRM不同的是:在ARM方式中,從站可以不必得到主站的允許就可以開始資料傳輸。顯然它的傳輸效率比NRM有所提高。
- 非同步平衡方式(ABM)
非同步平衡方式(ABM)適用於平衡鏈路結構。鏈路兩端的複合站具有同等的能力,不管哪個複合站均可在任意時間傳送命令幀,並且不需要收到對方複合站發出的命令幀就可以傳送響應幀。ITU-T X.25建議的資料鏈路層就採用這種方式。
除三種基本操作方式,還有三種擴充方式,即擴充正常響應方式(SNRM)、擴充非同步響應方式(SARM)、擴充非同步平衡方式(SABM)它們分別與基本方式相對應。
HDLC幀結構
HDLC的幀格式如圖3所示,它由六個欄位組成,這六個欄位可以分為五中型別,即標誌序列(F)、地址欄位(A)、控制欄位(C)、資訊欄位(I)、幀校驗欄位(FCS)。在幀結構中允許不包含資訊欄位 I。
- 標誌序列(F)
HDLC指定採用01111110為標誌序列,稱為F標誌。要求所有的幀必須以F標誌開始和結束。接收裝置不斷地搜尋F標誌,以實現幀同步,從而保證接收部分對後續欄位的正確識別。另外,在幀與幀的空載期間,可以連續傳送F,用來作時間填充。
在一串資料位元中,有可能產生與標誌欄位的碼型相同的位元組合。為了防止這種情況產生,保證對資料的透明傳輸,採取了位元填充技術。當採用位元填充技術時,在信碼中連續5個“1”以後插入一個“0”;而在接收端,則去除5個“1”以後的“0”,恢復原來的資料序列,如圖4所示。位元填充技術的採用排除了在資訊流中出現的標誌欄位的可能性,保證了對資料資訊的透明傳輸。
當連續傳輸兩幀時,前一個幀的結束標誌欄位F可以兼作後一個幀的起始標誌欄位。當暫時沒有資訊傳送時,可以連續傳送標誌欄位,使接收端可以一直保持與傳送端同步。
- 地址欄位(A)
地址欄位表示鏈路上站的地址。在使用不平衡方式傳送資料時(採用NRM和ARM),地址欄位總是寫入從站的地址;在使用平衡方式時(採用ABM),地址欄位總是寫入應答站的地址。
地址欄位的長度一般為8bit,最多可以表示256個站的地址。在許多系統中規定,地址欄位為“11111111”時,定義為全站地址,即通知所有的接收站接收有關的命令幀並按其動作;全“0”位元為無站地址,用於測試資料鏈路的狀態。因此有效地址共有254個之多,這對一般的多點鏈路是足夠的。但考慮在某些情況下,例如使用分組無線網,使用者可能很多,可使用擴充地址欄位,以位元組為單位擴充。在擴充時,每個地址欄位的第1位用作擴充指示,即當第1位為“0”時,後續位元組為擴充地址欄位;當第1位為“1”時,後續位元組不是擴充地址欄位,地址欄位到此為止。
- 控制欄位(C)
控制欄位用來表示幀型別、幀編號以及命令、響應等。從圖5-11可見,由於C欄位的構成不同,可以把HDLC幀分為三種類型:資訊幀、監控幀、無編號幀,分別簡稱I幀(Information)、S幀(Supervisory)、U幀(Unnumbered)。在控制欄位中,第1位是“0”為I幀,第1、2位是“10”為S幀,第1、2位是“11”為U幀,它們具體操作複雜,在後面予以介紹。另外控制欄位也允許擴充套件。
- 資訊欄位(I)
資訊欄位內包含了使用者的資料資訊和來自上層的各種控制資訊。在I幀和某些U幀中,具有該欄位,它可以是任意長度的位元序列。在實際應用中,其長度由收發站的緩衝器的大小和線路的差錯情況決定,但必須是8bit的整數倍。
- 幀校驗序列欄位(FCS)
幀校驗序列用於對幀進行迴圈冗餘校驗,其校驗範圍從地址欄位的第1位元到資訊欄位的最後一位元的序列,並且規定為了透明傳輸而插入的“0”不在校驗範圍內。
控制欄位和引數
控制欄位是HDLC的關鍵欄位,許多重要的功能都靠它來實現。控制欄位規定了幀的型別,即I幀、S幀、U幀,控制欄位的格式如圖3所示,其中
N(S) | 傳送幀序列編號 |
N(R) | 期望接收的幀序列編號,且是對N®以前幀的確認 |
S | 監控功能位元 |
M | 無編號功能位元 |
P/F | 查詢/結束(Poll/Final)位元,作為命令幀傳送時的查詢位元,以P位出現;作為響應幀傳送時的結束位元,以F位出現。 |
下面對三種不同型別的幀分別予以介紹。
資訊幀(I幀)
I幀用於資料傳送,它包含資訊欄位。在I幀控制欄位中b1~b3位元為N(S),b5~b7位元為N®。由於是全雙工通訊,所以通訊每一方都各有一個N(S)和N(R )。這裡要特別強調指出:N(R )帶有確認的意思,它表示序號為N(R )-1以及在這以前的各幀都已經正確無誤地收妥了。
為了保證HDLC的正常工作,在收發雙方都設定兩個狀態變數V(S)和V(R )。V(S)是傳送狀態變數,為傳送I幀的資料站所保持,其值指示待發的一幀的編號;V(R )是接收狀態變數,其值為期望所收到的下一個I幀的編號。可見這兩個狀態變數的值確定傳送序號N(S)和接收序號N(R )。
在傳送站,每傳送一個I幀,V(S)→N(S),然後V(S)+1→V(S)。在接收站,把收到的N(S)與保留的V®作比較,如果這個I幀可以接收,則V(R )+1→N(R ),回送到傳送站,用於對前面所收到的I幀的確認。N(R )除了可以用I幀回送之外,還可以用S幀回送,這一點從圖5-11中可以看出來,在I幀和S幀的控制欄位中具有N(R )。
V(S)、V(R )和N(S)、N(R )都各佔3bit,即序號採用模8運算,使用0~7八個編號。在有些場合,如衛星通訊模8已經不能滿足要求了,這時可以把控制欄位擴充套件為兩個位元組,N(S)、N(R )和V(S)、V(R )都用7bit來表示,即增加到模128。
監控幀(S幀)
監控幀用於監視和控制資料鏈路,完成資訊幀的接收確認、重發請求、暫停傳送請求等功能。監控幀不具有資訊欄位。監控幀共有4種,表1是這4種監控幀的程式碼、名稱和功能。 上面四種監控幀中,前三種用在返回N連續ARQ方法中,最後一種只用於選擇重發ARQ方式中。
S幀中沒有包含使用者的資料資訊欄位,它只有48bit長,顯然不需要N(S),但S幀中N(R )特別有用,它具體含義隨不同的S幀型別而不同。其中RR幀和RNR幀相當於確認資訊ACK,REJ幀相當於否認資訊NAK。同時應當注意到,RR幀和RNR幀還具有流量控制的作用,RR幀表示已經作好表示接收幀的準備,希望對方繼續傳送,而RNR幀則表示希望對方停止傳送(這可能是由於來不及處理到達的幀或緩衝器已存滿)。
無編號幀(U幀)
無編號幀用於資料鏈路的控制,它本身不帶編號,可以在任何需要的時刻發出,而不影響帶編號的資訊幀的交換順序。它可以分為命令幀和響應幀。用5個位元位(即M1、M2)來表示不同功能的無編號幀。HDLC所定義的無編號幀名稱和程式碼見表2。
P/F位元的使用
值得注意的是在HDLC的各類幀中,均帶有查詢/結束(P/F)位元。在不同的資料傳送方式中,P/F位元的用法是不一樣的。
在NRM方式中,從站不能主動向主站傳送資訊,從站只有收到主站發出的P位元為1(對從站的查詢)的命令幀以後才能傳送響應幀。若從站有資料傳送,則在最後一個數據幀中將F位元置1;若無資料傳送,則應在回答的S幀中將F位元置1。
在ARM或ABM方式中,任何一個站都可以在主動傳送的S幀和I幀中將P位元置1。對方站收到 P=1的幀後,應儘早地回答本站的狀態並將F位元置1。
下面結合圖5的例子具體說明P/F位元的使用方法。圖中主站A和從站B、C連成多點鏈路,傳送幀的一些主要引數按照“地址,幀名和序號,P/F”的先後順序標註。這裡的地址是指地址欄位中應填入的站地址;幀名是指幀的名稱,如RR、I;序號是指監控幀中的N(R ) 或資訊幀中的N(S)N(R ),如RR4、I31(第1個數字是N(S),第2個數字是N(R ))。P/F是在其為1時才寫上P或F,表明此時控制欄位的第5位元為1。 主站A先詢問B站:“B站,若有資訊,請立刻傳送”。這時A站傳送的幀是RR監控幀,並將N®置0,表示期望收到對方的0號幀。因此在圖5-13中將這樣的幀記為“B,RR0,P ”。對主站的這一命令,B站響應以連續4個資訊幀,其序號N(S)從0到3。最後在第4個資訊幀中將F置1,表示“我要傳送的資訊已發完”。這個幀記為“B,I30,F”。A站在收到B站發來的4個資訊幀後,發回確認幀RR4(這時N(R)=4)。我們注意到這時P/F位元並未置1,所以B站收到RR4後不必應答。接下去A站輪詢C站,P=1,雖然這時C站沒有資料傳送,但也必須立即應答。C站應答也是RR幀,表示目前沒有資訊幀傳送,F=1表明這是回答對方命令的一個響應。
有了P/F位元,使HDLC規程使用起來更加靈活。在兩個複合站全雙工通訊時,任何一方都可隨時使P=1,這時對方就要立即回答RR幀,並置F=1,這樣就可以收到對方的確認了。如果不使用P/F位元,則收方不一定馬上發出確認幀,比如收方可以在傳送自己的資訊幀時,利用N(R )把確認資訊發出。
HDLC操作
在圖5中討論了主站A和從站B、C交換資訊的情況,這只是整個資料通訊的中間階段,在這個階段之前還有一個數據鏈路的建立階段,在資料傳送完畢後,還必須有一個數據鏈路的釋放階段。也就是說HDLC執行資料傳輸控制功能,一般分為3個階段:資料鏈路建立階段、資訊幀傳送階段、資料鏈路釋放階段。第2階段的完成需要用到資訊幀和監控幀,第1、3階段的完成需要用到無編號幀。
圖6畫出了多點鏈路的建立和釋放。主站A先向從站B發出置正常響應模式SNRM的命令,並將P置1,要求B站作出響應。B站同意建立鏈路後,傳送無編號確認UA的響應,將F置1。A站和B站在將其狀態變數V(S)和V(R )進行初始化後,就完成了資料鏈路的建立。接著A站開始與C站建立鏈路。 當資料傳送完畢後,A站分別向B站和C站發出斷鏈命令DISC,B站、C站用無編號確認幀UA響應,資料鏈路就釋放了。
圖7為點對點鏈路中兩個站都是複合站的情況。複合站中的一個站先發出置非同步平衡模式SABM的命令,對方回答一個無編號響應幀UA後,即完成了資料鏈路的建立。由於兩個站是平等的,任何一個站均可在資料傳送完畢後發出DISC命令提出斷鏈的要求,對方用UA幀響應,完成資料鏈路的釋放。
HDLC規程的特點
與面向字元的基本型傳輸控制規程相比較,HDLC具有以下特點:
- 透明傳輸
HDLC對任意位元組合的資料均能透明傳輸。“透明”是一個很重要的術語,它表示:某一個實際存在的事物看起來好象不存在一樣。“透明傳輸”表示經實際電路傳送後的資料資訊沒有發生變化。因此對所傳送資料資訊來說,由於這個電路並沒有對其產生什麼影響,可以說資料資訊“看不見”這個電路,或者說這個電路對該資料資訊來說是透明的。這樣任意組合的資料資訊都可以在這個電路上傳送。
- 可靠性高
在HDLC規程中,差錯控制的範圍是除了F標誌的整個幀,而基本型傳輸控制規程中不包括字首和部分控制字元。另外HDLC對I幀進行編號傳輸,有效地防止了幀的重收和漏收。
- 傳輸效率高
在HDLC中,額外的開銷位元少,允許高效的差錯控制和流量控制。
- 適應性強
HDLC規程能適應各種位元型別的工作站和鏈路。
- 結構靈活
在HDLC中,傳輸控制功能和處理功能分離,層次清楚,應用非常靈活。
最後需要指出,一般的應用極少需要使用HDLC的全集,而選用HDLC的子集。當使用某一廠商的HDLC時,一定要弄清該廠商所選用的子集是什麼。
HDLC協議和PPP協議
在資料鏈路層有兩個重要的協議,即HDLC協議和PPP協議。
-
HDLC協議是面向位元的,而PPP協議則是面向位元組的,HDLC的幀採用開頭跟結尾都是01111110作為幀的邊界,這樣當接收方接收到一串位元的時候可以根據它來判斷該幀從哪裡開始,到哪裡結束。為防止在兩個標誌欄位之間出現了01111110位元串,HDLC採用零位元填充法,所謂零位元填充法就是每當出現5個1的時候就給它新增一個0進去,而接收方接收到資料時凡出現5個1的時候去掉其後面一個0,這樣就能很好地確定幀。
-
PPP協議本來也是跟HDLC協議一樣,把01111110作為邊界符(一般稱為標誌符),但是因為PPP協議是面向位元組的,所以這裡不說01111110,而是說用7E作為邊界符。PPP協議在同步傳輸鏈路中也是採用零位元填充法,而在非同步傳輸鏈路中則採用特殊的字元填充法。
-
HDLC在控制欄位中提供了可靠的確認機制,因此它可以實現可靠傳輸,而PPP則不提供可靠傳輸,要靠上層實現保證其正確性,因此,曾經在誤位元速率比較高的鏈路中,HDLC曾起到了極大的作用,但隨著技術的發展,在資料鏈路層出現差錯的概率不大,因此現在全世界使用得最多的資料鏈路層協議是PPP協議。