tcp作為傳輸控制協議,控制著傳輸層。為了保證資料可靠傳遞,主要有兩種方法保證資料傳輸可靠性。
重新傳送也能處理超差問題,所以重試是很多通訊協議的基礎,包括了tcp。
既然有重試,那傳送方必須知道什麼時候停止重試,也就是說需要接受者的響應,一般稱之為ack。這裡又會牽扯到新的問題。
第乙個問題比較麻煩,timeout的定義最好比正常響應時間多一點點,這就涉及到了根據響應時間,動態的改變timeout。
第二個問題很簡單,傳送方會timeout,然後重發即可。
第三個問題需要接收方校驗資料的正確性(具體如何計算,傳送方和接收方統一一套計算規則即可),一旦發現資料不正確,不需要傳送ack包,傳送者等待一段時間後會再次傳送。
通過上面的分析,發現接收者可能會接到多個相同的資料報,這時候需要把多餘的資料報丟棄不處理(微服務某些介面要求冪等性),這時候需要乙個唯一的id來標識某個請求包,當傳送方重發時用的是同乙個id,接收者相同的id只會處理一次。
tcp為了提高吞吐量,一次能傳送多個請求包,這時候接收到ack包就會是雜亂無序的,每個請求還要維持乙個超時計時器,需要儲存還沒接收到ack包的請求包副本,已備重發。接收方也需要更複雜的ack機制和更複雜的快取機制(需要維護次序雜亂的分組,用來重新組合),還有一些問題,比如接收方接收訊息速率比傳送方傳送訊息速率慢怎麼辦?接受方消化不能的資料只能丟棄,然後傳送方又需要重發。這些種種的問題留到下一期講吧。
TCP協議理解
我不是計算機科班出身。記得大學的時候旁聽計算機系的網路課,當時計算機系使用教材是 計算機網路 自頂向下方法與internet特色 的影印版,這本教材與眾不同的乙個地方就是作者 james f.kurose和 keith w.ross採用了 自頂向下 的編排思路,先從應用層開始,最後講到物理層。而且這...
初步認識TCP協議 TCP的reset報文
當本次tcp接收到不正確的tcp報文 即埠號與ip位址為本機,但對方的ip位址本機不認識,或是對應埠上沒有tcp連線 時,會傳送reset報文通知對方放棄連線。tcp連線是通過socket對來標識連線的 即本機與對方的ip位址加埠號 傳送rst包關閉連線時,不必等緩衝區的包都發出去,直接就丟棄緩衝區...
TCP協議理解高階
現在我們來介紹一下tcp協議的執行問題,因為我們對tcp協議實際上是什麼樣子知道的並不多。任何一方都可以關閉乙個tcp連線,要求雙方傳送乙個fin訊號關閉自己的通訊頻道。一方可以在另一方之前關閉,或者雙方同時關閉tcp連線。因此,當一方傳送乙個fin訊號時,另一方可傳送 fin ack 開始關閉自己...