可靠傳輸機制與無差錯接受的區別
在數據鏈路層如果僅僅使用循環冗余碼檢驗差錯檢測技術,只能做到對幀的無差錯接受,即 “凡是接收端數據鏈路層接受的幀,都能以非常接近 1 的概率認為這些幀在傳輸過程中沒有產生差錯”。
注意:現在並沒有要求數據鏈路層向網絡層提供“可靠傳輸”的服務。所謂“可靠傳輸”,就是數據鏈路層的發送端發送什么,接收端就接受什么。傳輸差錯可以分為兩大類,一類就是比特差錯(可以通過CRC來檢錯),另一類傳輸差錯更復雜,這就是收到的幀並沒有出現比特差錯,但是出現了 幀丟失(例如發送 1,2,3,收到 1,3)、幀重復(例如發送 1,2,3 ,收到 1,2,2,3)、幀失序(例如發送 1,2,3,收到1,3,2)。這三種情況都屬於出現傳輸差錯,但都不是這些幀里有比特差錯。
幀丟失比較容易理解,但是幀重復、幀失序的情況比較復雜。
總而言之“無比特差錯”和“無傳輸差錯”並不是同樣的概念,在數據鏈路層使用 CRC 檢驗只能實現無比特差錯的傳呼是,但這並不是可靠傳輸。
也許會有人提出:既然會丟失那就是讓接收端不管收到還是沒收到都給回復,即確認。如果沒有接收到回復就再發一次,直到對方確認。對於幀失序只要給發的幀的編號,等到所有幀均接收到再排序。以上說的都是對的,但為什么不采用以上方法?原因有二:1. 以前在數據鏈路層使用這種方式是因為以前的通信質量太差了,所以確定和重傳機制會起到很好的效果,但是如今的通信質量已經大大提高,由通信鏈路質量不好引起的差錯的概率大大降低,再使用這種機制的代價太大,不合算。2. 即時數據鏈路層能夠實現無差錯的傳輸,端到端的傳輸也可能出現差錯,這樣得不償失,還不如把數據鏈路層做的簡單一點,可靠的傳輸由上層協議來完成。為了更清楚數據鏈路層的可靠傳輸移到高層的原因,我們可以先看一下網絡層的一個知識。
互聯網使用的 IP 是無連接的,因此其傳輸時不可靠的。這樣容易使得人們感到互聯網很不可靠,那么為什么當初不把互聯網的傳輸設計成為可靠的?
答:這個問題很重要。打個比方:郵局寄送的平信很像無連接的 IP 數據報。每封平信都可能走不同的傳送路徑,因此平信也不保證不丟失。當發現收信人沒有收到寄出的平信時,找郵局索賠時沒有用的,郵局會答復:平信不保證不丟失,如果擔心丟失,請您寄掛號信。但是大家並不會將所有信件都是用掛號信的方式基礎,這是因為丟失平信的概率不大,況且掛號信的成本較高。總之,盡管寄平信可能會丟失,但是絕大多數信是平信,因為平信方便,實惠。
在我們生活中,傳統的電信網的最主要的用途之一就是進行電話通信,普通的電話機很簡單,只有電話功能,電信公司就不得不把電信網設計的非常好,進而保證用戶通話時質量。但是電信公司卻付出了很大的代價,例如使用昂貴的程控交換機和網管系統。
當時,在數據傳輸的過程中,對於哪部分應該負責數據傳輸的可靠性,工程師們有兩個意見 :其一,主張像電信網絡一樣由網絡負責數據傳輸的可靠性;其二,主張用戶的主機負責數據傳輸的可靠性。第二種思路更容易實現,因為具有智能的主機使得計算機網絡和電信網絡有兩個重要的區別。