2011-03-06 63 views
1

你好,我已經做了一個程序,我的舊windows手機發送GPS數據,溫度等每5秒只是爲了實驗的原因創建一個車隊管理系統。帶寬節省GPRS和TCP

我注意到那一個小時內350KB消耗了,雖然我只發送數據的20KB ...

由於我沒有在網絡很深的學問,多少字節TCP連接費用是多少?

也許我應該保持插口活着,因爲我關閉並打開它每隔5秒鐘。這將節省字節?

MTU這裏還有問題嗎? 減少開銷的其他想法? 謝謝

回答

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字節,沒有「連接」開銷。

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 

所以,在一個小時內我331KB的修訂預算是有點接近什麼OP鋸。

+0

謝謝,非常有用的估計:) – GorillaApe 2011-03-06 12:50:46

+0

我發送了290包gps信息。總共8240字節。根據計算,它應該〜106 kb。但它花了150kb。我不知道這些字節從哪裏來 – GorillaApe 2011-03-06 14:41:38