wiresharkではHTTPウェブサーバーに(ファイルをアップロードして)4096バイトのデータを送信できますが、サーバーは一度に1460バイトのデータしか受信していないようです。これはなぜですか?wiresharkのパケットのTCP ACK
答えて
TCPセグメントのサイズは、基本的にMTU(Maximum Transmission Unit)からIPおよびTCPオーバーヘッドを構成するバイト数を差し引いたMSS(最大セグメントサイズ)に制限されています。典型的なイーサネットリンクでは、MTUは1500バイトであり、基本IPおよびTCPヘッダーはそれぞれ20バイトであるため、MSSは1460(1500-20-20)です。
あなたが4096バイトの長さフィールドで示されたパケットを見ている場合は、それはほぼ確実にあなたが送信ホスト上でキャプチャしていると、Wiresharkのは、それが1460個のバイトのチャンクに分割されます前に大きなパケットを手渡しされていることを意味し。受信側でキャプチャする場合、個々の1460バイトのセグメントが到着し、1つの大きな4096バイトのパケットではないことがわかります。
さらに読むために、私はあなたに、"The drawbacks of local packet captures"と題されたJasper Bongertzのブログを読むことを勧めます。デフォルトで
TCPは、パスMTUディスカバリを使用しています:
システムは、それが- 新しいMTUを含むフィードバック(RTCPフラグメンテーションの必要性)を送信するネクストホップリンクのMTUと一致するように断片化する必要があるパケット
- システムが断片化を受信すると、ICMPが調整され、
この手順は、ネットワーク全体の負荷を軽減し、各パケット配信の確率を高めるために実行されます。
これは、1460パケットが表示される理由です。
あなたの質問について:サーバーは一度に1460バイトのデータを確認しているようです。これはなぜですか?
「確認応答なしで送信できるデータのバイト数」を定義するTCP Keep Trackウィンドウ。その目的は、フロー制御メカニズム(送信側は処理できないデータをあまり送信できない)と輻輳制御メカニズム(送信側は過負荷ネットワークにあまりデータを送信できない)を提供することです。ウィンドウは受信側で定義され、TCPが実際のチャネルの帯域幅を推定するときに接続中に増加する可能性があります。したがって、いくつかのパケットを確認する1つのACKが表示されることがあります。
- 1. Wireshark、seq&ack numbers
- 2. Ack-Push後のTCP Ack-Fin
- 3. Wireshark物理パケット
- 4. Recv TCPパケットストリームでACKパケットを送信しない
- 5. パケット損失のwireshark分析
- 6. C#:アウトオブオーダーのTCPパケットを扱うには?
- 7. Scapyの不要なRST TCPパケット
- 8. Wireshark 802.11パケット解析手順
- 9. wiresharkでパケットをトレースする
- 10. ハンドシェイク後のTCPパケット
- 11. 別パケットのTCP FIN
- 12. 空のUDPパケットとTCPパケットのサイズ?
- 13. Wiresharkを使用してTCPパケットから生データを抽出する方法
- 14. Wiresharkのパケット数をカウントする
- 15. のwiresharkでネットワークトラフィックを見ながらTCPセグメント
- 16. Android 3GでのTCP ACK遅延
- 17. TCP/IPパケットのポート番号
- 18. TCPパケット損失の部分
- 19. udp対tcpパケットのドロップ
- 20. IPV6 SYN - ACKパケットをスニッフィングする問題
- 21. Linux TCP:パケット分割?
- 22. TCPパケット送信エラー
- 23. C#TCPパケット構造
- 24. TCPネットワーク - 手動でSYN、SYN ACK、ACKをプログラムしますか?
- 25. Wiresharkフィルタ:フィルタリングされたパケットの前に送信されたパケットの取得
- 26. 奇妙なWiresharkの動作(TCPとUDPの両方にラベル付けされた単一パケット)
- 27. wiresharkのパケットを理解するのに問題があります
- 28. Android:パース/クラフトTCP/IPパケット
- 29. SwiftでTCPパケットを受信
- 30. 生のtcpパケットからのライブビデオ
意味があります。したがって、本質的に受信側では、その特定のセグメントは、MTUのために有効なデータ長が1460の3つの小さいパケットに分割されていましたか? –
右。送信者は、実際にはフレーム当たり1460バイトの有効なTCPペイロードで、1500バイト(1518バイト、フレーミングバイト自体をカウントする場合)のイーサネットフレームを送信しています。それはサーバーが受け取るものです。 https://en.wikipedia.org/wiki/Ethernet_frame#Structureも参照してください。 –