1. 程式人生 > >第三章 數據鏈路層(一)

第三章 數據鏈路層(一)

哪裏 還要 發送 數據鏈路層 這一 都是 簡單 包含 封裝成幀

      序言

        我是一只菜鳥,又來了。開始今天數據鏈路層的學習吧。

                                                                                  ---WH

一、數據鏈路層基本概念及基本問題

      基本概念 和 三個基本問題 的講解

     1、基本概念

        先來看一張圖,理解一下:數據鏈路層之間的運輸、數據鏈路層之間的信道。 說的是什麽意思?

            看圖中的註釋,我們應該註意的就是這裏說的數據鏈路層之間的信道等語句,是不考慮物理層中運輸的問題。直接考慮鏈路層這一層。要註意這個事情,不然

                技術分享

              

        鏈路:一條點到點的物理線路段,中間沒有任何其他的交換結點,通俗的將,就是一根線,其中不經過任何東西,這樣的就是鏈路,一條鏈路只是一條通路的一個組成部分

        數據鏈路:除了物理線路外,還必須有通信協議來控制這些數據的傳輸。若把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路。 通俗講,就是經過了一些交換機呀,什麽的,最終到達目的地,所有路段就是數據鏈路,而數據鏈路中就包含了多段鏈路。

        適配器:也就是網卡,就是用來實現數據鏈路上一些協議。

        幀:數據鏈路層上傳送的就是幀,

            技術分享

    2、三個基本問題    

       封裝成幀、透明傳輸、差錯控制

        講解如何封裝幀,封裝完後幀的傳輸問題、傳輸到達目的地,如何檢驗該段幀是否完整, 就是這三個問題。

      1、封裝成幀

        看圖就理解了。數據鏈路層就是在ip數據報的前面後末尾加了一個首部和尾部來代表ip數據包的開始和結束,首部和尾部都市由8位二進制數表示的,可以一樣也可以不一樣

            技術分享

      2、透明傳輸

         就是為了解決一個問題, 在ip數據包中如果有一個跟幀尾部一樣的8位二進制數,則會提前結束接受數據包,這樣數據就被破壞了。出現了如下圖這樣的問題

              技術分享

         解決辦法:

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

              技術分享 

          

      3、差錯檢測

          問題:

            傳輸過程中可能會產生比特差錯: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     

      

           這種冗余差錯校驗的特點:

                1這種檢測方法並不能確定究竟是哪一個或哪幾個比特出現了差錯

                2只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麽出現檢測不到的差錯的概率就很小很小。

                3只能是無差錯接受:凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認為這些幀在傳輸過程中沒有產生差錯”。也就是說:“凡是接收端數據鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)

                4這是”不可靠“的,是無比特差錯,而不是無傳輸差錯的檢測機制,要做到可靠的 還要加上確認和重傳機制。即考慮幀重復、幀丟失、幀亂序的情況

                

3、可靠傳輸

      在有些情況下,我們需要數據鏈路層向上的網絡層提供“可靠傳輸”的服務,就是發送端發送什麽,在對應的接收端就收到什麽, 前面的CRC只能檢測出位數的差錯,不能正確的檢測出更精準的錯誤。

      1、停止等待協議

          停止等待就是每發送完一個分組就停止發送,等待對方的確認。在收到確認後再發送下一個分組,詳細的可以看書上的文字性描述,很簡單,        

        超時重傳:解決上面如果數據分組或確認分組丟失時,發送方將會一直等待接收方的確認分組的問題,設置一個超時計時器,弱到了超時計時器所設置的重傳時間,而發送方仍收不到接收方的任何確認分組,則會重傳原來的分組。

        重復分組:如果只使用超時重傳來解決,不用發送確認分組,那麽會出現重復分組的問題,就是當接收方收到分組後,發回確認分組時,確認分組丟失,那麽會觸發超時重傳,則接收方會收到兩個重復的分組,這裏需要註意的是,是確認分組丟失。第一次發送的分組已經正確接收了。

     2、停止等待協議的算法

          因為手寫實在太麻煩,所以截圖過來看一下這個算法的具體步驟

        技術分享

          技術分享

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

      技術分享

    

     3、回退N步協議

         其實跟停止等待協議差不多,只是使用的是流水線傳輸方式,發送方不間斷的發送分組,每次發送的分組大小有限制,如果不限制,可能會使接收方或網絡來不及處理這些分組,導致分組的丟失,所以每次發送的分組大小可能是5,6或者更多。這種限制就是回退N步協議。

         回退N步協議:利用發送窗口來限制發送方連續發送分組的個數。要是發送窗口為1就是我們上面所討論的停止等待協議。

      分析如何工作的

          技術分享

        這個就是回退N步協議,根據這個原理圖,也能看出,為什麽叫回退N步協議了,在哪裏出錯了,就必須回退到哪裏全部重傳,為了解決這個,又有了選擇重傳協議

    

      4、選擇重傳協議

         也就是改進回退N布協議, 方式都是一樣, 在接受方必須逐一確認, 但是出現錯誤,只需要重傳出現錯誤的那一個分組,不用全部重傳,這裏的全部,指的是在出現錯誤的分組之後的所有分組,前提是在同一個發送窗口中。

      5、總結可靠傳輸

          不可靠的鏈路上,通過各種協議,就能達到可靠傳輸,來保證數據的準確性。

第三章 數據鏈路層(一)