带宽保存GPRS和TCP

Gor*_*Ape 1 sockets tcp

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

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

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

也许我应该保持套接字存活,因为我关闭并每5秒打开它.是否可以节省字节数?

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

sel*_*bie 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
Run Code Online (Sandbox Code Playgroud)

所以我在数据使用估算的大概中.

如果您希望减少带宽使用,这里有三个想法:

  1. 缩减更新率.

  2. 每次都不要拆掉插座连接.保持开放.

  3. 鉴于您的GPS坐标会定期更新,您可以考虑使用UDP而不是TCP.数据包丢失的可能性很大,但鉴于您无论如何都要每5秒重新传输更新的数据,更新丢失并不值得重新传输带宽.组合的IP和UDP头只有28个字节,没有"连接"开销.

UPDATE

当我最初发布这个时,我错误地误解了连接接近于客户端和服务器之间的单个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
Run Code Online (Sandbox Code Playgroud)

因此,我在一小时内修订的估计数为331KB,与OP看到的相比更接近.