У меня есть приложение Java, которое пишет в сеть.Он пишет сообщения в районе 764b, +/- 5b.PCAP показывает, что поток получает фрагментированный IP-адрес, и мы не можем этого объяснить.
Linux 2.6.18-238.1.1.el5
Strace показывает:
( 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) Похоже, что сервер пытается объединить два sendto () в один IP-пакет, который больше, чем MTU ипоэтому становится фрагментированным.Почему?
2) Рассматривает ли результат вывода для PID 2046, является ли цифра после знака равенства <... sendto resumed> строкой итоговой суммы за то, что было отправлено?Т.е. 764b было отправлено всего по строке 3 и строке 5?Или 764 байта отправляются на строку?
3) Есть ли какие-либо опции, которые я могу передать, чтобы вести к журналу все вывода sendto ()?Кажется, ничего не могу найти ..