1. 程式人生 > >(四)資料鏈路層------(上)

(四)資料鏈路層------(上)

一、資料鏈路層基本概念及基本問題
  1、基本概念

   先來看一張圖,理解一下:資料鏈路層之間的運輸、資料鏈路層之間的通道。說的是什麼意思?看圖中的註釋,我們應該注意的就是這裡說的資料鏈路層之間的通道等語句,是不考慮物理層中運輸的問題。直接考慮鏈路層這一層。要注意這個事情。

     

            鏈路:一條點到點的物理線路段,中間沒有任何其他的交換結點,通俗的將,就是一根線,其中不經過任何東西,這樣的就是鏈路,一條鏈路只是一條通路的一個組成部分
   資料鏈路:除了物理線路外,還必須有通訊協議來控制這些資料的傳輸。若把實現這些協議的硬體和軟體加到鏈路上,就構成了資料鏈路。 通俗講,就是經過了一些交換機呀,什麼的,最終到達目的地,所有路段就是資料鏈路,而資料鏈路中就包含了多段鏈路。  
   介面卡:也就是網絡卡,就是用來實現資料鏈路上一些協議。
   幀:資料鏈路層上傳送的就是幀,
     


     2、三個基本問題    
     封裝成幀、透明傳輸、差錯控制
     講解如何封裝幀,封裝完後幀的傳輸問題、傳輸到達目的地,如何檢驗該段幀是否完整, 就是這三個問題。
     ①、封裝成幀
       看圖就理解了。資料鏈路層就是在ip資料報的前面後末尾加了一個首部和尾部來代表ip資料包的開始和結束,首部和尾部都市由8位二進位制數表示的,可以一樣也可以不一樣
     
        ②、透明傳輸
    就是為了解決一個問題, 在ip資料包中如果有一個跟幀尾部一樣的8位二進位制數,則會提前結束接受資料包,這樣資料就被破壞了。出現瞭如下圖這樣的問題

     

        解決辦法:
   看圖:通過在特殊字元前面增加一個轉義字元ESC,就可以解決上面所遇到的問題,在接收端,將資料包中所有ESC的字元刪除,遇到兩個ESC的,就刪除第一個,這樣一開始傳輸的時候有ESC轉義字元,接受完就沒了,所以說的是透明傳輸

     

         ③、差錯檢測
     問題:傳輸過程中可能會產生位元差錯:1可能會變成0而0也可能變成1。在一段時間內,傳輸錯誤的位元佔所傳輸位元總數的比率稱為誤位元速率 BER (Bit Error Rate)。為了檢測傳送的幀中ip資料包是否完整,是否沒有被損壞,所以需要差錯檢測
     解決:迴圈冗餘檢測CRC,截個圖,把概念性的文字截下來,看到這個人都暈了,其實很簡單,

     

           按照下圖中的7步走,理解一下,然後再看上面的文字,就理解了。

     

      檢測:
   若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受(accept)。
   若餘數 R ≠ 0,則判定這個幀有差錯,就丟棄。
      生成多項式:也很簡單,例如上面的除數1101  就用P(X)=X3+X2+1 (X3是x的三次方的意思)  最高位是2的三次方,就是x的三次方這樣算,例如,101101 P(X)=X5+X3+X2+1     
      
   這種冗餘差錯校驗的特點:
    ①這種檢測方法並不能確定究竟是哪一個或哪幾個比特出現了差錯
    ②只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的概率就很小很小。
    ③只能是無差錯接受:凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認為這些幀在傳輸過程中沒有產生差錯”。也就是說:“凡是接收端資料鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)
    ④這是”不可靠“的,是無位元差錯,而不是無傳輸差錯的檢測機制,要做到可靠的還要加上確認和重傳機制。即考慮幀重複、幀丟失、幀亂序的情況。

    3、可靠傳輸    

        在有些情況下,我們需要資料鏈路層向上的網路層提供“可靠傳輸”的服務,就是傳送端傳送什麼,在對應的接收端就收到什麼, 前面的CRC只能檢測出位數的差錯,不能正確的檢測出更精準的錯誤。
  ①、停止等待協議
    停止等待就是每傳送完一個分組就停止傳送,等待對方的確認。在收到確認後再發送下一個分組,詳細的可以看書上的文字性描述,很簡單,        
    超時重傳:解決上面如果資料分組或確認分組丟失時,傳送方將會一直等待接收方的確認分組的問題,設定一個超時計時器,弱到了超時計時器所設定的重傳時間,而傳送方仍收不到接收方的任何確認分組,則會重傳原來的分組。
    重複分組:如果只使用超時重傳來解決,不用傳送確認分組,那麼會出現重複分組的問題,就是當接收方收到分組後,發回確認分組時,確認分組丟失,那麼會觸發超時重傳,則接收方會收到兩個重複的分組,這裡需要注意的是,是確認分組丟失。第一次傳送的分組已經正確接收了。
  ②、停止等待協議的演算法
    因為手寫實在太麻煩,所以截圖過來看一下這個演算法的具體步驟

     

     

         通過畫圖分析了一下正確的過程,其他依葫蘆畫瓢

     

      ③、回退N步協議
   其實跟停止等待協議差不多,只是使用的是流水線傳輸方式,傳送方不間斷的傳送分組,每次傳送的分組大小有限制,如果不限制,可能會使接收方或網路來不及處理這些分組,導致分組的丟失,所以每次傳送的分組大小可能是5,6或者更多。這種限制就是回退N步協議。
   回退N步協議:利用傳送視窗來限制傳送方連續傳送分組的個數。要是傳送視窗為1就是我們上面所討論的停止等待協議。
   分析如何工作的

     

         這個就是回退N步協議,根據這個原理圖,也能看出,為什麼叫回退N步協議了,在哪裡出錯了,就必須回退到哪裡全部重傳,為了解決這個,又有了選擇重傳協議
 4、選擇重傳協議
   也就是改進回退N布協議,  方式都是一樣, 在接受方必須逐一確認, 但是出現錯誤,只需要重傳出現錯誤的那一個分組,不用全部重傳,這裡的全部,指的是在出現錯誤的分組之後的所有分組,前提是在同一個傳送視窗中。
 5、總結可靠傳輸
   不可靠的鏈路上,通過各種協議,就能達到可靠傳輸,來保證資料的準確性。