我从设备到TCP服务器每10分钟发送一小部分数据(最多100个字节)。 在我的情况下开销似乎是巨大的(我们支付每个字节)。 我发现我至less有7-10个数据包(三次握手(3),ack请求(2),ack响应(2,可选)和拆分(3))。 总开销至less为400字节(每个数据包为40个字节的TCP / IP标头)。
问题是:
为什么我的标题大于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.qj/cq 0x0020: 8010 0073 2672 0000 0101 080a 02dc 02ef ...s&r.......... 0x0030: 1dc2 dad6 ....
我怎样才能打印键值列表而不是hex值? (这很小)
发送如此小量数据的有效方法是什么? (UDP与Ack?)
是的,这基本上是UDP发明的。 这或者使用长期的TCP连接。
为什么我的标题大于40个字节(60或52)?
大多数操作系统都包含比最低限度更多的操作。
我怎样才能打印键值列表而不是hex值?
在Wireshark中捕获数据包并转储它的分析。
取决于你在找什么,可能需要多一些,以获得“关键价值”的格式。
TCP连接可以存活多久?
从技术上讲,永远。 实际上,这取决于…… TCP本身没有限制,连接可能会持续多年。 实际上,大多数应用程序有一个超时断开不活动的客户端。 另外,防火墙在很长一段时间后通常会丢失空闲连接的有状态规则。
如果您保持连接打开,TCP是否发送额外的数据包?
如果你有保活的话,是的。 否则,可能不会。 取决于实施。
保持所有的连接是开放的吗?
它需要内存来保持每个连接打开(通常几KB)。 一两千个连接只需要几MB。 数百万人开始切入“很多”记忆的境界。 现代操作系统可以很容易地跟踪成千上万的连接。 但您的应用程序必须合理devise,以容纳这么多。
发送如此小量数据的有效方法是什么?
绝对UDP,我会使用UDP的数据包的一些字节保留为校验和或其他错误检测机制为我的数据,只是为了防范。