- 締切済み
TCP/IP通信時のパケット分割について、パケットがMTU以下なのになぜ分割されるの?
Linux-PCと組み込みボード間でTCP/IP(Ethernetで)で通信を行ったときの なぜ?な現象について質問です。 Linux上のプログラムでボードに対して1300バイトのデータを送信(write) しているのですがTCPDUMPでモニタしたところ1024/276バイトに分割されて 送信されています。Linux側のMTUが1500になっているのになぜパケットが 分割されてしまうのでしょうか? ちなみにCygwin上でテストしたときには1つのパケットで送信されていま した。
- みんなの回答 (3)
- 専門家の回答
お礼
自己レスです a,bとcに違いがもう1点ありました。 a,b)ではwindowサイズ=2048にしていました。 cでは16Kくらいに大きくなっていました。 (普通PCだとこれくらなのでしょう) 組み込みボード上のメモリの関係上2048にしていましたがこれを とりあえず16Kくらいにしたら上記の現象がなくなりました。 結果Windowサイズを2600未満(MSSの2倍未満)にすると上記の現象に なるようです。
補足
>TCPのスロースタートかも? スロースタートって転送するwindowサイズを徐々に大きくしていく ということだと思うのですが。最初は1セグメントから始まって 段々と1回で転送するセグメント数を大きくしていくってことですよね。 a) LinuxPC(server) <-> 組み込みボード(client) b) Cygwin(server) <-> 組み込みボード(client) c) LinuxPC(server) <-> Cygwin(client) 疑問) 上記a)でserver -> clientに1300バイトのデータを送信したときに 1024/276に分割されたパケットで転送されるのはなぜ? このときetherrealでキャプチャするとmss=1460になっているので 分割されないはずなのですが。 上記b,c)では1つのパケットで送信されます。 調査) 上記a,c)のキャプチャを比べたところclientのSYNパケットの TCPオプションに違いがありました。 a,b):MSS=1460 c):MSS=1460/nop/nop/SAC Permitted/ の違いがあります。 組み込みボード側でオプションを変更して再テストをやってみます。