TCP通信的最小尺寸

我从设备到TCP服务器每10分钟发送一小部分数据(最多100个字节)。 在我的情况下开销似乎是巨大的(我们支付每个字节)。 我发现我至less有7-10个数据包(三次握手(3),ack请求(2),ack响应(2,可选)和拆分(3))。 总开销至less为400字节(每个数据包为40个字节的TCP / IP标头)。

问题是:

发送如此小量数据的有效方法是什么? (UDP与Ack?)

是的,这基本上是UDP发明的。 这或者使用长期的TCP连接。

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

大多数操作系统都包含比最低限度更多的操作。

我怎样才能打印键值列表而不是hex值?

在Wireshark中捕获数据包并转储它的分析。
取决于你在找什么,可能需要多一些,以获得“关键价值”的格式。

TCP连接可以存活多久?

从技术上讲,永远。 实际上,这取决于…… TCP本身没有限制,连接可能会持续多年。 实际上,大多数应用程序有一个超时断开不活动的客户端。 另外,防火墙在很长一段时间后通常会丢失空闲连接的有状态规则。

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

如果你有保活的话,是的。 否则,可能不会。 取决于实施。

保持所有的连接是开放的吗?

它需要内存来保持每个连接打开(通常几KB)。 一两千个连接只需要几MB。 数百万人开始切入“很多”记忆的境界。 现代操作系统可以很容易地跟踪成千上万的连接。 但您的应用程序必须合理devise,以容纳这么多。

发送如此小量数据的有效方法是什么?

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