TCP 通信的最小尺寸

TCP 通信的最小尺寸

我每 10 分钟从设备向 TCP 服务器发送少量数据(最多 100 字节)。就我而言,开销似乎很大(我们为每个字节付费)。我发现我至少有 7-10 个数据包(三次握手 (3)、带 ack 的请求 (2)、带 ack 的响应 (2,可选) 和拆卸 (3))。总开销至少为 400 字节(每个数据包 40 字节 TCP/IP 标头)。

问题是:

  • 可靠地发送如此少量数据的有效方法是什么?(带有确认的 UDP?)
  • 为什么我的标头大于 40 个字节(60 或 52)?例如这个:

    0x0000:  4500 0034 73d7 4000 3506 d2ee 5c17 1b9b  [email protected]...\...
    0x0010:  2599 61b3 be7e 23a3 31a9 710a 6a2f 6371  %.a..~#.1.q.j/cq
    0x0020:  8010 0073 2672 0000 0101 080a 02dc 02ef  ...s&r..........
    0x0030:  1dc2 dad6                                ....
    
  • 我怎样才能打印标题的键值列表而不是十六进制值?(这是小问题)

答案1

可靠地发送如此少量数据的有效方法是什么?(带有确认的 UDP?)

是的,这基本上就是 UDP 的发明目的。或者使用长寿命 TCP 连接。

为什么我的标头大于 40 个字节(60 或 52)?

大多数操作系统所包含的功能远多于最低限度。

如何打印标题的键值列表而不是十六进制值?

在 Wireshark 中捕获数据包并转储其分析。
可能需要花费更多时间才能获得“键值”格式,具体取决于您要查找的内容。

TCP 连接可以存活多长时间?

从技术上讲,是永远。实际上,这取决于... TCP 本身没有限制,可以想象连接可以保持数年。实际上,大多数应用程序都有超时时间,在超时后它们会断开不活动的客户端。此外,防火墙通常会在很长时间后放弃空闲连接的状态规则。

如果保持连接打开,TCP 是否会发送额外的数据包?

如果启用了保持活动,则可以。否则,可能不行。取决于实施情况。

保持所有连接保持打开状态是否有效?

保持每个连接打开需要占用内存(通常为几 KB)。一两千个连接仅占用几 MB。数百万个连接开始占用“大量”内存。现代操作系统可以轻松跟踪数千个连接;但您的应用程序必须经过合理设计才能容纳这么多连接。

答案2

可靠地发送如此少量数据的有效方法是什么?

绝对是 UDP,为了以防万一,我会使用 UDP,并将数据包中的一些字节保留用于校验和或其他错误检测机制。

相关内容