1

ネットワークに書き込みを行う Java アプリケーションがあります。764b、+/- 5b の領域でメッセージを書き込んでいます。pcap は、ストリームが IP フラグメント化されていることを示しており、これを説明することはできません。

Linux 2.6.18-238.1.1.el5

トレースは次を示します。

( strace -vvvv -f -tt -o strace.out -e trace=network -p $PID )

1: 2045  12:48:23.984173 sendto(45, "\0\0\0\0\0\0\2\374\0\0\0\0\0\3\n\0\0\0\0\3upd\365myData"..., 764, 0, NULL, 0) = 764
2: 15206 12:48:23.984706 sendto(131, "\0\0\0\0\0\0\2\374\0\0\0\0\0\3\n\0\0\0\0\3upd\365myData"..., 764, 0, NULL, 0 <unfinished ...>
3: 2046  12:48:23.984811 sendto(46, "\0\0\0\0\0\0\2\374\0\0\0\0\0\3\n\0\0\0\0\3upd\365myData"..., 764, 0, NULL, 0 <unfinished ...>
4: 15206 12:48:23.984893 <... sendto resumed> ) = 764
5: 2046  12:48:23.984948 <... sendto resumed> ) = 764

ネットワークをキャプチャすると、MTU よりも大きなパケットが表示され、断片化が発生しています。

4809   5.848987 10.0.0.2 -> 10.0.0.5 TCP 40656 > taiclock [ACK] Seq=325501 Ack=1 Win=46 Len=1448 TSV=344627654 TSER=270108068        # First Fragment
4810   5.848991 10.0.0.5 -> 10.0.0.2 TCP taiclock > 40656 [ACK] Seq=1 Ack=326949 Win=12287 Len=0 TSV=270108081 TSER=344627643       # TCP ack
4811   5.849037 10.0.0.2 -> 10.0.0.5 TCP 40656 > taiclock [PSH, ACK] Seq=326949 Ack=1 Win=46 Len=82 TSV=344627654 TSER=270108081    # Second Frag

質問:

1) サーバーが 2 つの sendto() を 1 つの IP パケットにバッチ処理しようとしているように見えますが、これは MTU よりも大きいため、断片化されています。なんで?

2) PID 2046 の strace 出力を見ると、等号 <... sendto resumed> 行の後の数字は、送信されたものの合計ですか? つまり、764b は、ライン 3 とライン 5 の合計で送信されましたか? それとも、1 行あたり 764 バイトが送信されていますか?

3)すべての sendto() 出力をログに記録するために strace に渡すことができるオプションはありますか? 何も見つからないようです..

4

1 に答える 1