你好,我已經做了一個程序,我的舊windows手機發送GPS數據,溫度等每5秒只是爲了實驗的原因創建一個車隊管理系統。帶寬節省GPRS和TCP
我注意到那一個小時內350KB消耗了,雖然我只發送數據的20KB ...
由於我沒有在網絡很深的學問,多少字節TCP連接費用是多少?
也許我應該保持插口活着,因爲我關閉並打開它每隔5秒鐘。這將節省字節?
MTU這裏還有問題嗎? 減少開銷的其他想法? 謝謝
你好,我已經做了一個程序,我的舊windows手機發送GPS數據,溫度等每5秒只是爲了實驗的原因創建一個車隊管理系統。帶寬節省GPRS和TCP
我注意到那一個小時內350KB消耗了,雖然我只發送數據的20KB ...
由於我沒有在網絡很深的學問,多少字節TCP連接費用是多少?
也許我應該保持插口活着,因爲我關閉並打開它每隔5秒鐘。這將節省字節?
MTU這裏還有問題嗎? 減少開銷的其他想法? 謝謝
讓我們在這裏做一些數學。
每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
因此,我正在估算您的數據使用量。
如果你正在尋找減少帶寬使用,這裏有三個想法:
縮減您的更新率。
每次都不要拆卸套接字連接。只要保持開放。
由於您的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鋸。
謝謝,非常有用的估計:) – GorillaApe 2011-03-06 12:50:46
我發送了290包gps信息。總共8240字節。根據計算,它應該〜106 kb。但它花了150kb。我不知道這些字節從哪裏來 – GorillaApe 2011-03-06 14:41:38