gpt4 book ai didi

java - IP 数据报中有效负载/数据的大小是如何决定的

转载 作者:行者123 更新时间:2023-12-01 13:48:48 24 4
gpt4 key购买 nike

我正在检查使用 Wireshark 捕获的数据包。

据我了解,IP 数据报(数据包)中总长度字段的值是数据报的总大小,其中包括 header 和数据的大小。报头大小固定为40字节(封装的TCP报头20字节+IP报头20字节)。然而,在我的每个数据包中,我注意到数据的大小是可变的,范围从 1 字节到 ~ 1500 字节。

我的 Java 应用程序发送用 header \x0b 和尾部\x0c\x0d 包装的消息。所以我的消息发送格式是:

0b Message 0c0d

但是,如果我在 Wireshark 中检查发送的数据包,我可以看到某些数据包的数据中仅包含 0b。有些数据包包含 0b + 部分消息。

我很好奇为什么数据包的数据部分是可变的。

  1. 数据/有效负载的大小是如何确定的?
  2. 谁决定有效负载的大小?
  3. 我可以控制应用程序中负载的大小吗?

最佳答案

您的代码是以原子方式还是分段方式将字节发送到网络层?如果是碎片,有时网络堆栈会打开 nagle 算法来尝试将多个短 TCP 有效负载合并为一个大有效负载,但这并不能保证会发生。由于 TCP 是流协议(protocol),因此不能保证 TCP 数据包的数量等于调用 TCP send 的次数。此外,还取决于您的接收代码是否沿着消息边界正确分段 TCP 输入流。

关于java - IP 数据报中有效负载/数据的大小是如何决定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com