2013-12-09 69 views
3

是否有可能以錯誤順序獲取TCP數據包,用序號表示? 接收方會發生什麼? 例如,是否有任何隊列持有到達「太早」的口袋?TCP - 以錯誤的順序收到

+2

是的,當然有,否則不行,可以嗎?否則,實現只是拋出早期的數據包。問題不在話下。 – EJP

+0

'是否有任何隊列持有到達「太早」的口袋,例如?'是 - 堆棧在接收方執行。正如@EJP所提到的,這對於StackOverflow而言是非常偏離主題的,並且非常容易在網上找到(並且顯示出對TCP如何工作的基本缺乏理解)。 – admdrew

回答

2

也許吧。接收TCP引擎對於做什麼有幾個選擇。它唯一不能做的就是將這些無序數據包中的數據按順序發送到接收進程。

  • 接收TCP引擎可以丟棄無序數據。最終,發送TCP引擎將重新發送它們。在此之前,它肯定會重新傳輸差距中的數據。當間隙中的數據到達時,接收引擎可以按順序將它傳遞給接收進程。
  • 接收TCP引擎可以保存亂序數據。最終,差距中的數據將到達,或者發送TCP引擎將重新發送它。無論哪種方式,差距都會被填滿,並且接收引擎可以將所有數據按順序傳遞給接收進程。
  • 接收TCP引擎可以保存無序數據,並向發送端的TCP引擎提示它應該重傳間隙中的數據。它通過重新確認收到的最後一個有序數據字節來做到這一點。 這是大多數TCP引擎所做的。