クライアントソケットが送信する場合:
- パケット A - ドロップ
- パケット B
- パケット C
サーバー ソケットは B と C を受信してキューに入れ、A が受信されるとすぐに B と C がサーバー アプリケーションに渡されますか? それともBとCも再送されますか?それとも、A が配信されるまでパケットはまったく送信されませんか?
TCP は、現在のネットワーク状態に応じて多くのパラメーターを変更する洗練されたプロトコルであり、この件について書かれた本がたくさんあります。あなたの質問に答える最も明確な方法は、TCP は通常、特定の送信「ウィンドウ」サイズをバイト単位で維持していると言うことです。これは、以前に送信された確認応答が正常に返されるまでに送信されるデータの量です。
古い TCP 仕様では、そのウィンドウ内でパケットがドロップされると、ドロップされたパケット以降のデータが完全に再送されます。明らかに少し無駄が多いため、この問題を解決するために、TCP は現在、選択的確認応答 (SACK) オプション ( RFC 2018 ) を採用しています。これにより、失われた/破損したパケットだけが再送信されます。
例に戻ると、ウィンドウ サイズが 3 つのパケットすべてを包含するのに十分な大きさであると仮定し、最新の TCP 標準を利用している場合 (そうしない理由はわかりません)、パケット A がドロップされた場合、パケット A のみがドロップされます。再送されます。すべてのパケットが個別にウィンドウよりも大きい場合は、パケットを順次送信して確認する必要があります。
レイテンシーに依存します。通常、最初に A が再送信されます。クライアントがそれを取得し、すでに B と C を持っている場合は、それらも確認できます。
これが十分に速く発生した場合、B と C は再送信されないか、B のみが再送信される可能性があります。