1

この場合、奇妙な状況が見られます。

  1. HTTP リクエストは、TCP フラグ NO_DELAY (つまり、Nagle アルゴリズムが無効) で送信されます。
  2. WireShark は、HTTP 動詞とヘッダーを含む TCP パケットをキャプチャしません。HTTP 本文を含むパケットのみが表示されます (パケットは失われますか?)。
  3. リモート ホストは、すべてのデータが確認されているわけではないことを示す ACK で応答します。
  4. TCP 再送信が発生し、HTTP 動詞とヘッダーが WireShark によってキャプチャされるようになりました。

WireShark からの TCP フロー

その他の注意事項:

  1. Nagle アルゴリズムが ON の場合、パケットの損失や再送信は見られません。
  2. この問題は 2 つの異なるネットワークで検証されているため、この問題はネットワーク環境とはほとんど関連していません (ホストが仮想マシンであるという事実を除いて)。
  3. リクエストは c# HttpClient (.NET 4) を使用して行われます。
  4. HTTP 本体のサイズが役割を果たしているようです - 比較的小さなパケットでは問題ありません。

そのため、NO_DELAY によって、HTTP ヘッダー/動詞が内部にある TCP パケットが失われるという奇妙な動作が発生するようです。

何かアドバイス?

4

0 に答える 0