偶爾找到「計算機網絡 自頂向下方法」 一書,它從可靠數據傳輸的基本原理慢慢過渡到tcp協議的實現,我的以爲很是不錯而且容易把握重點,所以本文也算是學習筆記。緩存
計算機網絡自己可能出現數據包受損、丟失、亂序到達等問題,若是在編寫網絡應用時有一套可靠傳輸協議,就能夠避免這些複雜的底層問題;若是沒有那麼全部的網絡應用都要實現數據包的容錯機制,也算是重複解決同一個問題,所以就出現了tcp可靠傳輸協議。網絡
tcp協議自己很是複雜,它的實現依賴於可靠傳輸的基本原理,主要內容以下:tcp
一、因爲數據包可能受損,所以發送方除了發送數據自己,還需附帶數據的校驗和;接受方拿到數據後會從新計算校驗和並與接受的校驗和進行比較,若是相等則數據是完整的。學習
二、若是數據確實受損,接受方就會發送一個反饋消息要求發送方從新發送數據,反之發送一個正常接受的反饋消息要求發送下一個數據包;計算機網絡
三、因爲反饋消息也可能受損,致使發送方不能正確識別,所以須要將原先的數據再發送一遍。若是是正常接受的反饋消息受損,發送方仍會從新發送當前數據包,可是接受方如何分辨新接受的數據包是以前的數據包仍是新數據包呢(若是不分辨,接受方會處理兩份相同的數據包,在邏輯上就已經發生錯誤)?解決的方法是發送方在發送數據包時附帶一個遞增的數據編號(不過真正實現時能夠用1個bit位來表示,由於不一樣的數據包編號必定不一樣從而呈現出0和1互相交互的狀態),接收方會緩存上一個成功接收的數據包,若是數據包編號相同則直接丟棄;it
四、有了數據的校驗和、序號機制和應答機制已經能夠解決數據包的受損和亂序到達問題,但數據包還可能會丟失(包括數據包自己和反饋消息),發送方極可能永遠收不到接受方的反饋消息,此時發送方須要按期發送數據包,這個期限應該是網絡數據包正常往返的平均時間,若是超過接受期限未接受到反饋消息就從新發送數據包。效率
如今已經能夠初步實現一個可靠的數據傳輸通道了,可是還不能正式投入使用,由於還有效率問題待解決。原理