2010-10-14 5 views
0

Sans un roman, je vais essayer d'expliquer et j'espère que c'est logique.IP paquet/timeout/contrôle de l'intervalle

Nous avons une application qui gère l'envoi de données à un serveur via HTTPS simple, pas de problème tout fonctionne très bien. Cependant, si les paquets sont envoyés via un téléphone satellite, la latence des transmissions est beaucoup plus longue que les millisecondes typiques traitées sur l'accès au réseau à grande vitesse par ligne terrestre. Ainsi, les mêmes paquets exacts étant envoyés sont cassés automatiquement via l'API Windows lorsque par les fonctions suivantes:

DECLARE INTEGER InternetOpen IN WININET.DLL 
DECLARE INTEGER InternetCloseHandle IN WININET.DLL 
DECLARE INTEGER InternetConnect IN WININET.DLL 
DECLARE INTEGER HttpOpenRequest IN WININET.DLL 
DECLARE INTEGER InternetQueryOption IN WININET.DLL 
DECLARE INTEGER InternetSetOption IN WININET.DLL 
DECLARE INTEGER HttpSendRequest IN WININET.DLL 
DECLARE INTEGER HttpQueryInfo IN WININET.DLL 
DECLARE INTEGER InternetReadFile IN WININET.DLL 

Je ne contrôle pas spécifiquement les « paquets », la construction d'une simple demande entière et l'envoyer et obtenir un répondre.

Ce qui semble se produire est la suivante. Les paquets sont divisés en plus petits morceaux comme typique avec une grande quantité de données. Cependant, au moment de l'arrivée au satellite, ils ne sont pas réassemblés dans la séquence correcte, donc l'acceptation à la destination finale échoue. Donc, maintenant la question ... Y at-il un moyen que je peux spécifiquement laisser savoir à Windows pour ralentir la fréquence d'envoi des paquets afin de prévenir les problèmes de latence? Comme nous n'avons pas accès au système par satellite, nous ne pouvons pas prouver que c'est le problème, mais il semble qu'ils obtiennent les paquets, mais ne les remettez pas dans le bon ordre.

Merci.

+0

Ceci est tout à fait normal. TCP s'occupe de cela. "Ralentir" ne résoudra pas le problème. –

+0

@Hans Passant, puis son quelque chose sur leur (Satellite), et complètement hors de notre contrôle? – DRapp

+0

Vous ne maîtrisez * jamais * le routage d'un paquet IP. L'itinéraire peut même changer pendant que vous transmettez. Ce qui peut causer des retards variables et l'ordre d'inversion des paquets. Rétablir humpty-dumpty est le travail de TCP. –

Répondre

1

Comme mentionné dans les commentaires, vous ne pouvez pas contrôler le routage des paquets TCP. TCP en tant que protocole divisera les données en plus petits morceaux (même si les données sont ~ 20Kb sur une machine Windows, TCP divisera ces données en quelques paquets, malgré la taille maximale des paquets dans les fenêtres d'environ 60Kb).

Vous pouvez essayer de définir le paramètre "MTU" utilisé par Windows. Vous pouvez le faire dans le registre. Cela vous permet de définir une taille d'unité de transmission maximale plus petite puisque vous avez une connexion à haute latence. Essayez de définir le MTU sur 500 ou moins.

Si rien de tout cela ne vous convient, vous pouvez également consulter les RFC pour voir comment écrire vos propres en-têtes de paquets TCP afin d'améliorer la gestion des paquets. Jetez un oeil ici pour un RFC traitant directement ce problème: http://tools.ietf.org/html/rfc1072