我正在检查用Wireshark捕获的数据包。
我理解IP数据报(数据包)中总长度字段的值是数据报的总大小,其中包括头和数据的大小。标头大小固定为40字节(封装TCP报头为20字节,IP报头为20字节)。但是,在我的每个数据包中,我注意到数据的大小是可变的,从1字节到1500字节不等。
我的Java应用程序发送用头\x0b和预告片\x0c\x0d包装的消息。所以我的消息发送格式是:
0b讯息0c0d
但是,如果我检查Wireshark中发送的数据包,我可以看到一些数据包只包含数据中的0b。一些数据包包含0b +部分消息。
我很想知道为什么数据包的数据部分是可变的。
发布于 2013-11-22 01:11:44
您的代码是以原子方式将字节发送到网络层,还是将字节分段发送到网络层?如果是分段的,有时网络堆栈将打开nagle算法,尝试将多个短TCP有效负载合并为一个大的有效负载,但这并不一定会发生。由于TCP是流协议,所以不能保证TCP数据包的数量等于调用TCP发送的次数。另外,还需要由您的接收代码沿着消息边界正确地分割TCP输入流。
https://stackoverflow.com/questions/20135072
复制相似问题