2

クライアントソケットが送信する場合:

  1. パケット A - ドロップ
  2. パケット B
  3. パケット C

サーバー ソケットは B と C を受信して​​キューに入れ、A が受信されるとすぐに B と C がサーバー アプリケーションに渡されますか? それともBとCも再送されますか?それとも、A が配信されるまでパケットはまったく送信されませんか?

4

2 に答える 2

1

TCP は、現在のネットワーク状態に応じて多くのパラメーターを変更する洗練されたプロトコルであり、この件について書かれた本がたくさんあります。あなたの質問に答える最も明確な方法は、TCP は通常、特定の送信「ウィンドウ」サイズをバイト単位で維持していると言うことです。これは、以前に送信された確認応答が正常に返されるまでに送信されるデータの量です。

古い TCP 仕様では、そのウィンドウ内でパケットがドロップされると、ドロップされたパケット以降のデータが完全に再送されます。明らかに少し無駄が多いため、この問題を解決するために、TCP は現在、選択的確認応答 (SACK) オプション ( RFC 2018 ) を採用しています。これにより、失われた/破損したパケットだけが再送信されます。

例に戻ると、ウィンドウ サイズが 3 つのパケットすべてを包含するのに十分な大きさであると仮定し、最新の TCP 標準を利用している場合 (そうしない理由はわかりません)、パケット A がドロップされた場合、パケット A のみがドロップされます。再送されます。すべてのパケットが個別にウィンドウよりも大きい場合は、パケットを順次送信して確認する必要があります。

于 2013-03-20T10:57:43.967 に答える
0

レイテンシーに依存します。通常、最初に A が再送信されます。クライアントがそれを取得し、すでに B と C を持っている場合は、それらも確認できます。

これが十分に速く発生した場合、B と C は再送信されないか、B のみが再送信される可能性があります。

于 2013-03-20T11:10:32.880 に答える