带宽保存GPRS和TCP

时间:2011-03-06 05:20:01

标签: sockets tcp

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

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

由于我对网络知之甚少,tcp连接的成本是多少?

也许我应该保持套接字处于活动状态,因为我每隔5秒关闭并打开它。是否可以节省字节数?

MTU也很重要吗? 还有其他任何减少开销的想法吗? 谢谢

1 个答案:

答案 0 :(得分:8)

我们在这里做一些数学。

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

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个字节,没有“连接”开销。

  4. <强>更新

    当我最初发布此内容时,我错误地误解了连接,即客户端和服务器之间的单个FIN数据包交换。在实践中,客户端发送FIN作为启动CLOSE的一部分。然后服务器确认FIN。然后服务器发送自己的FIN,由客户端确认。换句话说,每个连接额外增加96个字节。重做我们的数学:

    Total data send/received per connection =
    220+48 + 144+48 = 460
    Total data usage in one hour = 460 * 720 = 331K
    

    因此,我在一小时内修订的估计数为331KB,与OP所看到的相差不多。