2011-03-06 4 views
1

Bonjour, j'ai fait un programme pour mon ancien téléphone mobile Windows pour envoyer des données GPS, la température, etc toutes les 5 secondes juste pour des raisons expérimentales pour créer un système de gestion de flotte.Économies de bande passante GPRS et TCP

je remarquai que dans l'heure 350kb ont été consommés bien que je ne 20kb envoyé des données ...

Comme je n'ai pas connaissance approfondie dans les réseaux, combien coûte un tcp de connexion en octets?

Peut-être que je devrais garder le socket en vie car je le ferme et l'ouvre toutes les 5 secondes. Cela économise-t-il des octets?

Est-ce que le MTU est important ici? Une autre idée pour réduire les frais généraux? merci

Répondre

8

Faisons quelques calculs ici.

Toutes les 5 secondes, 720 connexions par heure plus données. 20K/720 est d'environ 28 octets de charge utile (vos données GPS) pour chaque connexion.

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 

Donc, je suis dans l'approximation de vos estimations d'utilisation de données.

Si vous cherchez à réduire l'utilisation de la bande passante, voici trois idées:

  1. ramenons sur votre taux de mise à jour.

  2. Ne pas démonter la connexion à chaque fois. Gardez-le ouvert. Étant donné que vos coordonnées GPS sont périodiquement mises à jour, vous pouvez envisager d'utiliser UDP au lieu de TCP. Il y a un risque de perte de paquets, mais étant donné que vous retransmettez des données plus fraîches toutes les 5 secondes de toute façon, une mise à jour perdue ne vaut pas la bande passante à retransmettre. Les en-têtes IP et UDP combinés ne font que 28 octets sans surcharge de "connexion".

MISE À JOUR

Quand je l'origine posté, j'ai mal compris à tort le lien étroit comme un seul échange de paquets FIN entre le client et le serveur. En pratique, le client envoie un FIN dans le cadre de l'initialisation du CLOSE. Ensuite, le serveur ACKs le FIN. Ensuite, le serveur envoie son propre FIN qui est ACK'd par le client. En d'autres termes, 96 octets supplémentaires par connexion. Refaisant nos calculs:

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

Donc, mon estimation révisée de 331KB en une heure est un peu plus proche de ce que la scie OP.

+0

merci, estimation très utile :) – GorillaApe

+0

J'ai envoyé 290 paquets gps info. 8240 octets au total. Selon les calculs il devrait prendre ~ 106 kb.Mais il a fallu 150kb. Je ne peux pas comprendre d'où viennent ces octets – GorillaApe