Comment ssh face à une latence énorme (25 secondes)?

5

J'ai besoin de créer une connexion SSH entre deux ordinateurs Linux exécutant Centos v5, mais la latence peut atteindre 25 secondes. Je constate que si je teste artificiellement quelque chose qui approche de cette configuration en simulant une latence aller-retour de 7 secondes ou plus, en utilisant:

tc qdisc add dev eth0 root netem delay 7s

Quand j'essaye:

ssh -n -o ConnectTimeout=0 WilliamKF@centos5Machine whoami

Il échoue après environ 1 min 23 s avec:

Connection closed by 10.35.50.114

Notez que ConnectTimeout = 0 signifie que le délai d’expiration n’est jamais dépassé. En outre, simuler une latence aller-retour de 6 secondes donne un résultat positif après environ 1 minute 32 secondes.

Puis-je faire quelque chose pour que ssh fonctionne malgré une latence extrêmement élevée sous Linux? Pourquoi ssh échoue-t-il à ce seuil? Lorsque je lance tcpdump, je ne vois rien de mal à l’évidence, il y a environ 51 paquets. Quels paquets de tcpdump sont utiles ici? Le succès a pris seulement environ 41 paquets.

WilliamKF
la source
2
Est-il possible que la correction de la latence de 30 secondes soit une possibilité? C'est au-delà ridiculement élevé. Que se passe-t-il lorsque vous envoyez une requête ping à 10.35.50.114. Que montre trace route?
Everett
Je pense qu’une quantité ridicule de mandataires est en place .... je suis d’accord avec les procurations reeeeeediculous, je suis donc intéressé à répondre ... donnez-moi un peu de temps pour regarder et vérifier le code source.
RobotHumans
1
il faudra peut-être une bibliothèque ssh recompilée ... est-ce que ça va?
RobotHumans
2
Juste pour que je comprenne. Vous avez une latence entre votre client et un serveur lorsque vous utilisez SSH. Vous simulez cette latence entre votre client et un autre ordinateur à votre disposition? Ce que je veux dire, c’est une latence élevée qui mettrait votre client et le serveur auquel vous essayez de vous connecter, environ 60 fois la circonférence de la planète. C'est beaucoup (voir UNGODLY) quantité de latence. Il y a un problème qui doit être résolu entre les deux ordinateurs. Essayer de programmer pour corriger ce gros problème est vraiment la mauvaise façon d’aborder le problème.
Everett
1
La raison est la suivante: vous essayez d’autoriser un délai de latence de 25 à 30 secondes pour chaque partie du processus de connexion au réseau. Cela ne se limite pas à la configurer, votre application attend 25 à 30 secondes, vous attendez 25 à 30 secondes pour la transmission et la réponse de CHAQUE paquet. Si UN paquet est abandonné dans un protocole basé sur la connexion, vous attendez la retransmission. Vous ne verrez JAMAIS une connexion réussie avec une latence de 30 secondes car vous risquez de déborder de la mémoire tampon à laquelle vous avez accès.
Everett

Réponses:

2

Réponse courte, vous n'attendrez jamais assez longtemps avec une latence de 30 secondes par paquet.

Everett
la source