首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节省带宽GPRS和TCP

节省带宽GPRS和TCP
EN

Stack Overflow用户
提问于 2011-03-06 13:20:01
回答 1查看 1.4K关注 0票数 1

您好,我已经为我的旧windows手机做了一个程序,每5秒发送一次gps数据,温度等,只是出于实验原因创建了一个车队管理系统。

我注意到,尽管我只发送了20kb的数据,但在一小时内就消耗了350kb的空间……

由于我对网络了解不深,一次tcp连接需要多少字节?

也许我应该让套接字保持活动状态,因为我每隔5个seconds.Would就关闭和打开它一次,这样可以节省字节?

MTU在这里也很重要吗?还有没有其他减少开销的想法?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-06 13:38:05

让我们在这里做一些数学运算。

每5秒等于每小时720个连接加上数据。对于每个连接,20K / 720大约是28字节的有效载荷( GPS数据)。

代码语言:javascript
复制
IP and TCP headers along are 48 bytes in addition to whatever data is being sent.

3-way handshake connection: 3 packets (2 out, 1 in) == 96 bytes out and 48 bytes in
Outbound Data-packet: 48+28 bytes == 76 bytes (out)
Inbound Ack: 48 bytes (in)
Close: 48 bytes (out)
Final Ack: 48 bytes (in)

Total out per connection: 220
Total in per connection:  144
Total data send/received per connection: 220+144 = 364
Total data usage in one hour = 364 * 720 = 262K

所以我对你的数据使用量估计值是差不多的。

如果你想减少带宽的使用,这里有三个想法:

  1. 缩减您的更新率。
  2. 不要每次都断开套接字连接。
  3. 考虑到你的GPS坐标是定期更新的,你可以考虑使用UDP而不是TCP。可能会丢失数据包,但是考虑到您每5秒重新传输一次较新的数据,丢失的更新不值得重新传输带宽。IP和UDP头加起来只有28个字节,没有“连接”开销。

更新

当我最初发布这篇文章时,我错误地将连接近似地误解为客户端和服务器之间的FIN数据包的单一交换。在实践中,客户端发送FIN作为启动关闭的一部分。然后服务器确认FIN。然后,服务器发送其自己的FIN,该FIN由客户端确认。换句话说,每个连接需要额外的96个字节。重做我们的数学:

代码语言:javascript
复制
Total data send/received per connection =
220+48 + 144+48 = 460
Total data usage in one hour = 460 * 720 = 331K

因此,我修改后的一个小时331KB的估计值更接近于操作员所看到的情况。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5208878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档