【问题标题】:Protocol with small(est) overhead over GPRSGPRS 上具有最小(est)开销的协议
【发布时间】:2021-02-17 21:39:03
【问题描述】:

我们公司开发了在农田收集数据的站点。这些领域可能在偏僻的地方,因此电台使用带有 SIM 卡的 GSM/GPRS,会自动切换到最强的提供商。

每 5 分钟设置一次 Internet 连接以将数据发送到服务器。数据具有包长度、命令、传感器数据和CRC校验的结构。但是这些数据结构是通过 http post 发送到 url。

对于 480 字节的数据,大约使用 2550 字节的数据流量。 HTTP 协议有很多开销。因为我们只需要发送 480 字节的数据,所以我们有 80% 的开销通过 http 发送。现在我们有几百个站点,而且这个数字还在增长。因此,数据流量的成本正在迅速增加。

我们想要重新设计数据传输。数据由站内微芯片微处理器发送。

我们的目标是尽可能减少开销,同时保证数据交付。所以我研究了 TCP 和 UDP。

TCP 具有故障检测和恢复功能,但开销较高。 UDP 的开销较低,但不能保证数据传递时不会失败。

我的第一个想法是构建一个侦听 TCP 端口的服务器。站通过 TCP 发送数据。主要是因为有保证的数据交付。

使用 UDP,我们必须自己开发检查和重新发送数据,但我们记录的数据结构已经准备好进行检查。

所以我真的很怀疑该怎么做。我正在尝试回答这些问题:

  • TCP 和 UDP 发送(和传递)480 字节数据需要多少字节开销?

  • TCP 和 UDP 是发送 480 字节数据的最佳考虑方式,还是有更智能且开销更低的解决方案?

【问题讨论】:

  • 实验测试。如果您可以测量当前方法发送了多少数据,那么您应该能够测量使用 TCP 或 UDP 时的数据量。并记得在接收不良和有线连接不良的情况下进行测试,以检查在需要大量重新传输和重试时的情况。
  • 是的,我们可以测量。 simcard 提供程序为我们提供了每个连接发送和接收的字节数的详细信息。所以我们必须首先对解决方案进行编程。我们现在选择 TCP。

标签: sockets tcp network-programming udp data-transfer


【解决方案1】:

TCP 和 UDP 发送(和传递)480 字节数据需要多少字节开销?

一个(典型的)TCP 标头是 20 字节长,尽管它可以(稍微)更长的选项。如果整个 480 字节在单个 TCP 段中发送,那么在第 2 层开销之前,您最终会得到 480 +20 + 20(IP 标头)= 520 字节。

UDP 有一个 8 字节的标头,因此对于 UDP,您将有 480 + 8 + 20 = 508 个字节。

但是您应该考虑 TCP 是一种流协议。从 TCP 套接字读取就像从二进制文件读取一样 - 您需要自己通过使用某种分隔符或将消息的长度添加到每条消息来将该流拆分为单独的消息。

另一方面,UDP 适用于单个消息。从 UDP 套接字读取将一次返回一条消息。

TCP 和 UDP 是发送 480 字节数据的最佳考虑方式,还是有更智能且开销更低的解决方案?

UDP 和 TCP 是 Internet 上最低级别的传输协议。 HTTP 和其他高级协议建立在它们之上。如果数据的大小很关键,那么原始 TCP 和 UDP 的开销将与您在不使用 RAW 套接字并将数据直接嵌入 IP 数据包的情况下获得的一样低。

【讨论】:

  • 还有SOCK_SEQPACKET 用于使用类似UDP 的数据报的类似TCP 的可靠性。考虑到 OP 描述的用例,可靠性可能是一个大问题(甚至可能比 TCP 与 UDP 开销更大)。
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多