アプリ版:「スタンプのみでお礼する」機能のリリースについて

Linux-PCと組み込みボード間でTCP/IP(Ethernetで)で通信を行ったときの
なぜ?な現象について質問です。
Linux上のプログラムでボードに対して1300バイトのデータを送信(write)
しているのですがTCPDUMPでモニタしたところ1024/276バイトに分割されて
送信されています。Linux側のMTUが1500になっているのになぜパケットが
分割されてしまうのでしょうか?
ちなみにCygwin上でテストしたときには1つのパケットで送信されていま
した。

A 回答 (3件)

TCPのスロースタートかも?


3.2 TCPDUMP
の例示でも1回目は540バイトしか送っていないようです。

参考URL:http://www.qos.tu.chiba-u.jp/thesis/2003_b4_taka …

この回答への補足

>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/
の違いがあります。

組み込みボード側でオプションを変更して再テストをやってみます。

補足日時:2007/11/04 13:02
    • good
    • 0
この回答へのお礼

自己レスです
a,bとcに違いがもう1点ありました。
a,b)ではwindowサイズ=2048にしていました。
cでは16Kくらいに大きくなっていました。
(普通PCだとこれくらなのでしょう)
組み込みボード上のメモリの関係上2048にしていましたがこれを
とりあえず16Kくらいにしたら上記の現象がなくなりました。
結果Windowサイズを2600未満(MSSの2倍未満)にすると上記の現象に
なるようです。

お礼日時:2007/11/05 22:32

相手をCygwinではなく、Cygwin -->組込みボードの場合にOKということだったんですね。


原因はわかりませんが、TCPDUMPでMSSの手順でどうMSSが決定されるか調べて
みてはいかがですか?
#EthrealならGUIで見やすいと思いますが。
    • good
    • 1

TCP/IPはうまくできていて、メモリの少ないマシンの場合に


MTU(MSS)をこのサイズにしてという手順があり、たぶん組み込みボード側
がそのサイズでないと受けられないのでしょう。全く正常な動作です。

参考URL:http://www.fuwafuwa.org/Lecture/learn/network_ne …

この回答への補足

>MTU(MSS)をこのサイズにしてという手順があり、たぶん組み込みボード側
>がそのサイズでないと受けられないのでしょう

上記の場合はMSS=1024等ボード側のMSSが1300未満の場合ですよね?
組み込みボード側のMSSは1300より大きい数字になっていますので
ボード側のメモリ問題とは少々違うと思うのですが。実際同じプログラム
のボードとCygwin(winXP)間の通信時は1回で転送されていましたので
Linuxのなにか設定の問題なのかなと思いまして。
Linux側のMSS=1460で1300より大きいです。

補足日時:2007/11/03 13:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!