計算機網絡筆記整理(三):數據鏈路層

數據鏈路層使用的信道主要有以下兩種類型:
(1) 點對點信道:使用一對一的點對點通信方式,常用的協議有PPP。
(2) 廣播信道:使用一對多的廣播通信方式。廣播信道上連接的主機很多,所以1必須使用專用的共享信道協議來協調這些主機的數據發送,常用的協議有CSMA/CD協議。
兩個主機通信的過程是由不連續的一段段鏈路層通信組成,不同段的鏈路層可能採用不同的數據鏈路層協議。

一、使用點對點信道的數據鏈路層

  1. 一些概念
    鏈路(link)/物理鏈路:從一個結點到相鄰結點的一段物理線路,中間沒有任何其他的交換結點。鏈路是一條路徑的組成部分。
    數據鏈路(data link)/邏輯鏈路:當需要再跳線路上傳送數據時,還需要有一些必要的通信協議來控制數據的傳輸,把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路。
    :點對點信道的數據鏈路層的協議數據單元,數據鏈路層把網絡層交下來的數據構成幀發送到鏈路上。
  2. 通信步驟
    (1) 結點A的數據鏈路層給網絡層交下來的IP數據報添加首部和尾部封裝成幀。
    (2) 結點A把封裝好的幀發送給結點B的數據鏈路層。
    (3) 若結點B的數據鏈路層收到的幀無差錯,則從收到的幀中提取出IP數據報上交給上面的網絡層,否則丟棄這個幀。
  3. 三個基本問題
    數據鏈路層協議有許多,但是有三個共同的基本問題:封裝成幀、透明傳輸和差錯檢測。
    • 封裝成幀
      在一段數據的前後分別添加首部和尾部就構成了一個幀(framing)。接收端在收到物理層上交的比特流後,就能根據首部和尾部的標記,從收到的比特流中識別幀的開始和結束。
      幀的首部和尾部的一個重要作用就是進行幀定界(即確定幀的界限),此外還有許多的必要的控制信息。各種數據鏈路層協議都要對幀首部和幀尾部的格式進行明確的規定。爲了提高幀的傳輸速率,應當使幀的數據部分長度儘可能大於首部和尾部的長度。但是,每一種鏈路層協議都規定了幀的數據部分的長度上限——最大傳送單元MTU(Maximum Transfer Unit)
      當數據是由可打印的ASCII碼組成的文本文件時,幀定界可以使用特殊的幀定界符。而ASCII碼中有33個不可打印的控制字符可以用於表示幀的開始和結束。比如控制字符SOH(Start Of Header,二進制編碼爲0000 0001)放在一幀的最前面表示幀首部開始;控制字符EOT(End Of Transmission,二進制編碼爲0000 0100)放在一幀的最後表示幀的結束。
      當數據在傳輸中出現差錯時,幀定界符的作用非常顯著。比如發送端尚未發送完一個幀時突然出現故障,中斷了發送,但隨後又恢復了正常,所以重新從頭髮送剛纔未發送完的幀。由於使用幀定界符,接收端就知道前面接收到的數據是個不完整的幀(只有SOH而沒有EOT),必須丟棄。
    • 透明傳輸
      由於幀使用了專門指明的控制字符作爲幀的開始和結束的標記,所以傳輸的數據中任何8 bit的組合一定不允許和用作幀定界的控制字符的比特編碼一樣,否則會出現幀定界錯誤。
      當傳送的幀是用文本文件組成的幀時(文本文件中的字符都是從鍵盤上輸入的),數據部分顯然不會出現SOH或EOT之類的控制字符。可見不管從鍵盤上輸入什麼字符都可以放在這樣的幀中傳輸過去,這樣的傳輸就是透明傳輸。
      對於數據部分是非ASCII碼的文本文件(如二進制代碼的計算機程序或圖像等)時,數據中的某個字節的二進制代碼就可能恰好和SOH和EOT這種控制字符一樣,數據鏈路層就會錯誤地“找到幀的邊界”。收下部分幀(誤認爲是個完整的幀),而把剩下的那部分數據丟棄。顯然這樣的傳輸就不是“透明傳輸”
      爲了解決透明傳輸問題,發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC”(其16進制編碼是1B);而接收端在將數據送往網絡層之前刪除插入的轉義字符。這種方法成爲字節填充(byte stuffing)字符填充(character stuffing)。同樣如果數據中出現轉義字符也是在前面插入一個轉義字符。
    • 錯檢測
      比特差錯:現實的通信鏈路都是不理想的,比特在傳輸過程之中可能會產生差錯,1可能變成0,0可能變成1。
      誤碼率BER(Bit Error Rate):在一段時間內,傳輸錯誤的比特佔所傳輸比特總數的比率。
      誤碼率與信噪比有很大的關係,爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各種差錯檢測措施,目前在數據鏈路層廣泛使用了循環冗餘檢驗CRC(Cyclic Redundancy Check)的檢錯技術。其原理如下:
      在發送端,先把數據劃分爲組,假定每組k個比特,現假定傳送的數據M=101001(k=6)。CRC運算就是在數據M的後面添加供差錯檢測的n位冗餘碼,雖然增大了數據傳輸的開銷,但是卻可以進行差錯檢測。
      n位冗餘碼的計算過程如下:在M後面添加n個0,得到(k+n)位的數除以收發雙方事先商定的長度爲(n+1)位的除數P,得出商是Q而餘數是R(n位,比P少一位)。餘數R就是冗餘碼。具體計算過程如圖1所示(注意用模2運算進行加法時不進位,例如1111+1010=0101,減法和加法一致):
      FCS計算
      爲了進行檢錯而添加的冗餘碼常稱爲幀檢驗序列FCS(Frame Check Sequence)
      在接收端把接收到的數據以幀爲單位進行CRC檢驗,把收到的每一個幀都除以同樣的除數P(模2運算),然後檢查得到的餘數R,若傳輸過程中無差錯,那麼經過CRC檢驗後得出的餘數R肯定是0。
      若是在數據鏈路層僅僅使用循環冗餘檢驗CRC差錯檢驗技術,則只能做到對幀的無差錯接受,即凡是接收端數據鏈路層接受的幀,我們都能以非常接近於1的概率認爲這些幀在傳輸過程中沒有產生差錯。
      只使用CRC差錯檢驗的數據鏈路層協議並沒有向網絡層提供“可靠傳輸”的服務,而OSI的觀點是數據鏈路層必須是可靠傳輸的。傳輸差錯可分爲兩大類:一類是前面所提到的最基本的比特差錯,而另一類傳輸差錯則更加複雜,就是收到的幀沒有出現比特差錯,但卻出現了幀丟失、幀重複、幀失序。因此在CRC檢錯的基礎上,增加了幀編號、確認和重傳機制。收到正確的幀就要向發送端發送確認,發送端在一定的期限內若若沒有收到對方的確認,就認爲出現了差錯,因而就進行重傳,直到收到對方的確認爲止,但是由於現在的通信線路的質量已經大大提高了,因此因特網廣泛使用的數據鏈路層協議都不使用確認和重傳機制,即不要求數據鏈路層向上提供可靠傳輸的服務(代價太高)。若在數據鏈路層傳輸數據時出現了差錯並且需要進行改正,那麼改正差錯的任務由上層協議(如運輸層的TCP協議)來完成,時間證明這樣做提高了通信效率。

二、點對點協議PPP

歷史上,在通信線路質量較差的時候,在數據鏈路層使用可靠傳輸協議是主流的,比如能夠實現可靠傳輸的高級數據鏈路控制HDLC(High-level Data Link Control)。目前使用得最廣泛的數據鏈路層協議時點對點協議PPP。

  1. PPP協議的特點
    PPP協議是用戶計算機和ISP進行通信時所使用的數據鏈路層協議。在1994,PPP協議就已經成爲因特網的正式標準。

    • PPP協議應該滿足的需求
      (1) 簡單:IETF在設計因特網體系結構時把其中最複雜的部分放在TCP協議中,而網際協議IP則相對比較簡單,提供不可靠的數據報服務。這種情況下,數據鏈路層沒有必要提供比IP協議更多的功能。因此,對數據鏈路層的幀,不需要糾錯、序號或者流量控制。在誤碼率較高的無線鏈路上可能會需要更爲複雜的鏈路層協議。因此IETF把“簡單”作爲首要的需求
      簡單的設計使得協議在實現時不容易出錯,因而使得不同廠商對協議的不同實現的互操作性提高了,這也是協議標準化的一個主要目的。
      (2) 封裝成幀:必須規定特殊的字符作爲幀定界符。
      (3) 透明性:必須保證數據傳輸的透明性。如果數據中碰巧出現了和幀定界符一樣的比特組合,就要採用有效的措施來解決這個問題。
      (4) 多種網絡層協議:能夠在同一物理鏈路上同時支持多種網絡層協議(如IP和IPX等)的運行。
      (5) 多種類型鏈路:能夠在多種類型的鏈路上運行,如串行的(一次只發送一個比特)或並行的(一次並行地發送多個比特),同步的或異步的,低速的或高速的……點對點鏈路。
      (6) 差錯檢測(error detection):能夠對接收端收到的幀進行檢測,並立即丟棄有差錯的幀
      (7) 檢測連接狀態:擁有一種機制能夠及時(不超過幾分鐘)自動檢測出鏈路是否處於正常工作狀態。
      (8) 最大傳送單元:必須對每一種類型的點對點鏈路設置最大傳送單元MTU的標準默認值。促進各種實現之間的互操作性,若高層協議發送的分組過長並超過MTU的數值,PPP就要丟棄這樣的幀。
      (9) 網絡層地址協商:提供一種機制使通信的兩個網絡層(如兩個IP層)的實體能夠通過協商知道或能夠配置彼此的網路層地址。只有知道對方網絡層地址時,才能夠保證網絡層能夠傳送分組。
      (10) 數據壓縮協商:提供一種方法來協商使用數據壓縮算法。但是PPP協議並不要求將數據壓縮算法進行標準化。

    • PPP協議不需要的功能
      在RFC 1547中明確了PPP協議不需要的功能。
      (1) 糾錯(error correction):可靠傳輸由運輸層的TCP協議負責,而PPP協議只進行檢錯PPP協議是不可靠傳輸協議
      (2) 流量控制:端到端的流量控制由TCP負責。
      (3) 序號:PPP不是可靠傳輸協議,因此不需要使用幀的序號。
      (4) 多點線路:PPP協議不支持多點線路(即一個主站輪流和鏈路上的多個從站進行通信),而只支持點對點的鏈路通信。
      (5) 單向通信和雙向交替通信:PPP協議只支持雙向同時通信。
      1.3 PPP協議的組成
      (1) 一個將IP數據報封裝到串行鏈路的方法。PPP既支持異步鏈路(無奇偶校驗的8比特數據),也支持面向比特的同步鏈路。IP數據報作爲PPP幀中的信息部分,其長度受到最大傳送單元MTU的限制。
      (2) 一個用來建立、配置和測試數據鏈路連接的鏈路控制協議LCP(Link Control Protocol)。通信的雙方可協商一些選項。
      (3) 一套網絡控制協議NCP(Network Control Protocol),其中的每一個協議支持不同的網絡層協議,如IP、OSI的網絡層、DECnet以及AppleTalk等。

  2. PPP協議的幀格式

    • 字段的意義
      PPP的幀格式如圖2所示,PPP幀的首部和尾部分別爲四個字段和兩個字段。首部的第一個字段和尾部的第二個字段都是標誌字段F(Flag),規定爲0x7E,標誌字段表示一個幀的開始或結束。因此標誌字段就是PPP幀的定界符。連續兩幀之間只需要一個標誌字段。若出現連續兩個標誌字段,就表示這是一個空幀,應當丟棄。
      首部中的地址字段A規定爲0xFF(即1111 1111),控制字段C規定爲0x03(即0000 0011)。這兩個字段實際上並沒有攜帶PPP幀的信息。PPP首部的第四個字段是2字節的協議字段。當協議字段爲0x0021時,PPP幀的信息字段就是IP數據報。尾部中的第一個字段(2字節)是使用CRC的幀檢驗序列FCS。
      PPP的幀格式
    • 字節填充
      當信息字段中出現和標誌字段中一樣的比特組合(0x7E)時,就必須採用一些措施使這種形式上和標誌字段一樣的比特組合不出現在信息字段中。
      PPP使用異步傳輸時,定義轉義字符爲0x7D,則使用字節填充,將信息字段中出現的標誌字段0x7E轉變成2字節序列(0x7D,0x7E),轉義字符0x7D和ASCII碼的控制字符(即數值小於0x20的字符)也需要轉換。
    • 零比特填充
      PPP協議用在SONET/SDH鏈路時,是使用同步傳輸(一連串的比特連續傳送)而不是異步傳輸(逐個字符傳送)。
      先掃描整個信息字段(通常是硬件實現),只要發現有5個連續1,則立即填入一個0.接收端在收到一個幀時,先找到標誌字段F以確定一個幀的邊界,接着再用硬件對其中的比特流掃描,每當發現5個連續1時,就把這5個連續1後的一個0刪除,還原成原來的信息比特流,這就實現了透明傳輸。
      零比特填充
  3. PPP協議的工作狀態
    PPP鏈路的初始化:當用戶撥號接入ISP後,就建立了一條從用戶PC機到ISP的物理連接。
    這時用戶PC機向ISP發送了一系列的LCP分組(封裝成多個PPP幀),以便建立LCP連接。這些分組及其響應選擇了將要使用的一些PPP參數。
    接着進行網絡層配置,NCP給新接入的用戶PC機分配一個臨時的IP地址。這樣,用戶PC機就成爲因特網上的一個有IP地址的主機。
    PPP鏈路終止:當用戶通信完畢時,NCP釋放網絡層連接,收回原來分配出去的IP地址。接着,LCP釋放數據鏈路層連接。最後釋放的是物理層的連接。
    以上過程可由圖4的狀態圖來描述:
    PPP協議的狀態圖
    可見PPP協議已經不是純粹的數據鏈路層的協議,它還包含了物理層和網絡層的內容。

三、使用廣播信道的數據鏈路層

  1. 局域網的數據鏈路層
    局域網最主要的特點是:網絡爲一個單位所擁有,且地理範圍和站點數目均有限
    局域網具有如下一些優點:
    (1) 具有廣播功能,從一個站點可很方便地訪問全網。局域網上的主機可共享連接在局域網上的各種硬件和軟件資源。
    (2) 便於系統的擴展和逐漸地演變,各設備的位置可靈活調整和改變。
    (3) 提高了系統的可靠性(reliability)、可用性(availability)和生存性(survivability)。
    按照網絡拓撲進行分類,有星形網、令牌環形網、總線網、樹形網等等。
    共享信道要着重考慮的一個問題就是如何使衆多的用戶能夠合理而方便地共享通信媒體資源,這在技術上有兩種方法:
    (1) 靜態劃分信道。如前一篇介紹過的頻分複用、時分複用、波分複用和碼分複用等等。用戶只要分配到了信道就不會和其他用戶發生衝突。但這種劃分信道的方法代價較高,不適合於局域網使用。
    (2) 動態媒體接入控制,又稱爲多點接入(multiple access)。其特點是信道並非在用戶通信時固定分配給用戶。這裏又分爲兩類:
    • 隨機接入:隨機接入的特點是所有的用戶可隨機地發送信息,但如果恰巧有兩個或更多的用戶在同一時刻發送信息,那麼共享媒體上就要產生碰撞(即發生了衝突),使得這些用戶的發送都失敗。因此,必須有解決碰撞的網絡協議。
    • 受控接入(比較少用):受控接入的特點是用戶不能隨機地發送信息而必須服從一定的控制。這類的典型代表有分散控制的令牌環局域網和集中控制的多點線路輪詢(polling)。
  2. CSMA/CD協議

    • 應用環境
      最早的以太網是將許多計算機都連接到一根總線上。當一臺計算機發送數據時,總線上的所有計算機都能檢測到這個數據,這種就是廣播通信方式,可以實現一對多的廣播通信。每一臺計算機的適配器都有一個獨一無二的地址,當且僅當數據幀中的目的地址與適配器ROM中存放的硬件地址一致時,該適配器才接受這個數據幀,對於不是發送給自己的數據幀就丟棄,這樣在總線上實現一對一的通信。
      爲了通信的簡便,以太網採取了兩種措施:(1) 採用較爲靈活的無連接的工作方式,即不必先建立連接就可以直接發送數據。適配器對發送的數據幀不進行編號,也不要求對方發回確認以太網提供的服務是不可靠的交付,即盡最大努力的交付。(2) 以太網發送的數據都使用曼徹斯特(Manchester)編碼的信號(把每一個碼元再分成兩個相等的間隔。碼元1是在前一個間隔爲低電壓而後一個間隔爲高電壓,碼元0正好相反,從高電壓變到低電壓。如圖5所示,也可以採用相反的規定)。這種編碼方式的缺點就是它所佔的頻帶寬度比原始的基帶信號增加了一倍。
      曼徹斯特編碼
      總線的傳輸資源是有限的,同一時間只能允許一臺計算機發送信息,否則各計算機之間就會互相干擾,結果大家都無法正常發送數據。
      以太網採用的協調方法是使用一種特殊的協議CSMA/CD(Carrier Sense Multiple Access with Collision Detection)。
    • CSMA/CD協議的要點
      a. 多點接入:說明是總線型網絡,許多計算機以多點接入的方式連接在一根總線上。協議的實質是載波監聽和碰撞檢測。
      b. 載波監聽:發送前先監聽。即在每一個站發送數據之前要先檢測總線上是否有其他站在發送數據,等到信道空閒時再發送數據。
      c. 碰撞檢測(衝突檢測):邊發送邊監聽。即適配器便發送數據邊檢測信道上的信號電壓的變化情況,以便判斷自己在發送數據時,其他站是否也在發送數據。當幾個站同時在總線上發送數據時,總線上的信號電壓變化幅度會增大(互相疊加)。
    • CSMA/CD協議執行步驟
      a. 適配器從網絡層1獲得一個分組,加上以太網的首部和尾部,組成以太網幀,放入適配器的緩存中,準備發送。
      b. 若適配器檢測到信道空閒(即在96比特時間內沒有檢測到信道上有信號),就發送這個幀,若檢測到信道忙,則繼續檢測並等待信道轉爲空閒(加上96比特時間),然後發送這個幀。
      c. 在發送過程中繼續檢測信道,若一直未檢測到碰撞,就順利的把這個幀成功發送完畢。若檢測到碰撞,則中止數據的發送,併發送人爲干擾信號。
      d. 在中止發送後,適配器執行指數退避算法,等待一段時間後返回步驟b。

    在使用CSMA/CD協議的以太網不可能進行雙向同時通信(全雙通信工),而只能進行雙向交替通信(半雙工通信)。此外以太網還採取一種強化碰撞的措施,就是當發送數據的站一旦發現發生了碰撞時,除了立即停止發送數據外,還要再繼續發送32比特或48比特的人爲干擾信號(jamming signal),以便讓所有用戶都知道現在已經發生了碰撞。以太網號規定了幀間最小間隔爲9.6μs,相當於96比特時間,這樣使得剛剛收到數據幀1的站接收緩存來得及清理,做好接收下一幀的準備。

四、參考文獻

[1] 謝希仁. 計算機網絡(第五版)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章