Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux TCP消息正在合并_Linux_Pcap_Fragmentation_Strace_Sendto - Fatal编程技术网

Linux TCP消息正在合并

Linux TCP消息正在合并,linux,pcap,fragmentation,strace,sendto,Linux,Pcap,Fragmentation,Strace,Sendto,我有一个Java应用程序正在写入网络。它正在764b、+/-5b区域内编写消息。pcap显示该流正在变得IP碎片化,我们无法解释这一点 Linux 2.6.18-238.1.1.el5 一个镜头显示: (strace-vvv-f-tt-o strace.out-e trace=network-p$PID) 问题: 1) 服务器似乎试图将两个sendto()批处理为一个IP数据包,该数据包比MTU大,因此变得支离破碎。为什么? 2) 查看PID 2046的strace输出,等号线后的数字是否为发送

我有一个Java应用程序正在写入网络。它正在764b、+/-5b区域内编写消息。pcap显示该流正在变得IP碎片化,我们无法解释这一点

Linux 2.6.18-238.1.1.el5

一个镜头显示:

strace-vvv-f-tt-o strace.out-e trace=network-p$PID

问题:

1) 服务器似乎试图将两个sendto()批处理为一个IP数据包,该数据包比MTU大,因此变得支离破碎。为什么?

2) 查看PID 2046的strace输出,等号线后的数字是否为发送内容的总数?即3号线和5号线总共发送了764b?还是每行发送764字节


3) 是否有任何选项可以传递给strace以记录所有sendto()输出?似乎找不到任何东西回答您的问题,顺序如下:

1) 使用TCP时合并多个发送调用是完全正常的,因为它是一种流协议,因此不会以任何方式保留用户级发送边界。我没有在您的跟踪中看到任何IP碎片(这将是不好的)的证据,只是TCP碎片(这是完全正常的)

2) 是的,这就是大小——更具体地说,它报告的是系统调用恢复后返回的值


3) 您可以使用“-e write=all”或“-e write=”让strace报告所有写入的数据。

特别是对于#1,这被称为“Nagle算法”,但实际上,合并始终是可能的。Nagle只是通过有时延迟发送少量数据来增加可能性,希望发送更多可以与之结合的数据。
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
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