この場合、奇妙な状況が見られます。
- HTTP リクエストは、TCP フラグ NO_DELAY (つまり、Nagle アルゴリズムが無効) で送信されます。
- WireShark は、HTTP 動詞とヘッダーを含む TCP パケットをキャプチャしません。HTTP 本文を含むパケットのみが表示されます (パケットは失われますか?)。
- リモート ホストは、すべてのデータが確認されているわけではないことを示す ACK で応答します。
- TCP 再送信が発生し、HTTP 動詞とヘッダーが WireShark によってキャプチャされるようになりました。
その他の注意事項:
- Nagle アルゴリズムが ON の場合、パケットの損失や再送信は見られません。
- この問題は 2 つの異なるネットワークで検証されているため、この問題はネットワーク環境とはほとんど関連していません (ホストが仮想マシンであるという事実を除いて)。
- リクエストは c# HttpClient (.NET 4) を使用して行われます。
- HTTP 本体のサイズが役割を果たしているようです - 比較的小さなパケットでは問題ありません。
そのため、NO_DELAY によって、HTTP ヘッダー/動詞が内部にある TCP パケットが失われるという奇妙な動作が発生するようです。
何かアドバイス?