數據鏈路層和傳輸層提供的可靠傳輸問題


  我們知道數據鏈路層和傳輸層都提供可靠傳輸服務,傳輸層是一定要提供的,比如TCP就是可靠傳輸協議,保證了端到端的可靠傳輸,確保每一個報文段都能按序送達對方,如果下層傳輸丟失,也能及時通過ARQ協議來重傳,那么為什么會丟失呢,可能是因為網絡層的路由器負載過高,導致后來的數據報被丟棄,那么傳輸層就需要重傳了,因為有定時器的存在,一段時間沒收到確認就重傳,還有一種丟失的可能就是數據鏈路層檢測數據幀傳輸出錯,被丟棄了,因為我們知道數據鏈路層是提供節點到節點之間的可靠交付,那么這時候傳輸層的報文就沒有正確傳輸到對方,也會重傳。
  所以傳輸層是保證傳輸無誤的最高層次,任何下層導致的傳輸錯誤,傳輸層都要重傳來處理,來達到讓對方能正確接收數據的目的,傳輸層就是保證端到端的可靠傳輸,就是應用之間的通信可靠。
  那么數據鏈路層提供的是什么呢,數據鏈路層也規定了可以提供可靠傳輸,但具體實不實現得按具體情況來分析,只是給出了這個框架說你可以這么去做,但具體實現得具體分析。
  我們假設它是提供可靠傳輸的,而且是點對點的可靠傳輸,也就是兩個網絡節點,節點之間只有通信鏈路,沒有其他節點。那么問題來了,它是為誰提供可靠傳輸的?是傳輸層嗎,不對,傳輸層的報文都封裝在IP數據報里,IP數據報又封裝在數據鏈路層的數據幀里,那么鏈路層提供的可靠服務是為物理層來服務的,因為最終數據還是要經過物理層來傳輸,而物理層的傳輸過程中是可能出錯的,比如噪聲的影響導致比特傳輸錯誤,傳輸到對面的節點還原鏈路層數據幀,發現出錯,這時候鏈路層的可靠傳輸就體現出來了,數據幀會通過一些手段對數據進行校驗,來發現數據幀是否錯誤,如果錯誤,可以檢錯重發,向前糾錯,反饋校驗,檢錯丟棄等手段來保證兩個節點之間傳輸的數據幀向上層提供的數據是無差錯的。
  這樣就從底層的傳輸又加了一層保險,數據鏈路層的差錯控制是一定要的,不然上層不知道是否傳輸錯誤,但數據鏈路層的可靠傳輸不只是差錯控制,還可以通過可靠交付,比如傳輸層的滑動窗口協議等都是適用於鏈路層的,但並不是所有數據鏈路層的協議都需要設計成可靠交付的,支持可靠交付的鏈路層協議里多應用於高出錯率的鏈路中,對於低出錯率,例如光纖、雙絞線鏈路等,采用可靠交付似乎沒有必要,因此,通常有線鏈路的數據鏈路層協議,不提供可靠交付服務,但是差錯控制是要有的。
  說到這里,就有個大概的了解了,數據鏈路層是為物理層提供可靠服務的,因為物理層可能導致比特傳輸差錯,數據鏈路層保證向上層提供的數據是無差錯的;傳輸層是為網絡層提供可靠傳輸服務的,因為數據報在核心網傳輸過程中,可能會在路由器那里因負載過高導致丟棄,然后傳輸層重傳,來保證可靠傳輸,這樣傳輸層能保證向上層(也就是應用層)提供的數據是無誤且按序交付的。

如有問題,還請指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM