2 votes

Pourquoi la taille de ma fenêtre tcp est-elle nulle lorsque j'utilise VIM sur un VPN ?

J'utilise un ordinateur portable mac os sur un réseau domestique sans fil classique (c'est-à-dire merdique) et je me connecte au travail via un VPN. Je me connecte par ssh à l'ordinateur de bureau linux (ubuntu) que j'ai dans mon bureau au travail. (Quand je dis "je m'infiltre" : Je clique sur un bouton qui me dit qu'il va utiliser "ssh", et une fenêtre "Terminal" s'ouvre et se connecte à mon bureau).

Souvent (jusqu'à plusieurs fois par jour), lorsque j'utilise 'vim', ce dernier cesse de répondre et, une ou deux minutes plus tard, la connexion à mon bureau est interrompue et Terminal m'indique que la connexion est rompue. J'ai souvent plusieurs fenêtres de terminal ouvertes sur mon bureau à la fois, et seule la fenêtre de terminal dans laquelle j'utilise "vim" se coupe. Les autres fenêtres restent connectées et utilisables.

Récemment, j'ai utilisé tcpdump pour suivre les paquets qui vont et viennent, et j'ai capturé une trace où ma session vim se bloque et se termine. Quelques minutes avant la panne, des paquets provenant de mon ordinateur de bureau sont arrivés avec des fenêtres dont la taille diminuait régulièrement jusqu'à atteindre zéro et la connexion s'est interrompue un peu plus tard.

Je pourrais presque comprendre cela si j'avais, disons, entré en mode insertion et commencé à taper des caractères alors que le bureau était suspendu et que j'avais rempli la fenêtre en tapant alors que mon bureau était foutu. La taille initiale de la fenêtre était d'environ 12 500 et chaque caractère que je tape semble générer un paquet de 48 octets, donc environ 250 caractères pourraient remplir un tampon tcp.

Cependant, lorsque vim se bloque, c'est plutôt comme si je faisais une page en bas (control-f), puis entrais en mode insertion, puis commençais à taper quelques caractères. Mes commandes et mes caractères sont répercutés, ce qui indique que vim reçoit et traite les caractères.

Je ne sais pas exactement où se trouve le tampon tpc entre le socket et 'vim'. On peut supposer qu'un pilote de tty récupère les caractères du tampon tcp, les renvoie vers moi, les transmet à vim, et me renvoie la sortie de vim. Mais toutes ces actions retireraient des octets du tampon tcp et la taille de la fenêtre ne serait pas nulle.

Qu'est-ce que je ne comprends pas dans le fonctionnement de la pile logicielle, pourquoi la taille de ma fenêtre passe à zéro et comment puis-je contourner ou résoudre le problème ?

Questions bonus :

1) Pourquoi mon bureau fixe-t-il la taille de la fenêtre à environ 12 500 au lieu d'environ 64K ?

2) Lorsque j'utilise tcpdump sur le Mac, je n'obtiens aucune sortie si j'utilise les expressions "host hostname", "host ipaddress", ou "port 22" (où 'hostname' et 'ipaddress' sont remplacés par le nom ou l'adresse IP de mon ordinateur). Si je ne spécifie pas l'une de ces expressions, j'obtiens beaucoup de résultats, et ces résultats contiennent clairement le nom d'hôte, l'adresse IP ou le port que j'avais spécifié sur la ligne de commande. Y a-t-il quelque chose de spécial sur le Mac où tcpdump ne fonctionne pas ? Y a-t-il un moyen standard de bousiller la ligne de commande, et je ne sais pas ce que je demande à tcpdump de faire ?

Merci, Cs

0voto

Matthew Frederick Points 14932

Tout d'abord, la taille de la fenêtre TCP n'est pas un tampon, c'est un seuil d'accusé de réception. Le noeud qui reçoit le trafic n'enverra un paquet ACK que tous les x paquets. Dans un réseau fiable, ce nombre devrait être aussi grand que possible pour le débit - la contrepartie étant que si des données sont perdues, la fenêtre entière doit être retransmise... Le entraîne généralement la pile TCP à réduire la taille de la fenêtre de manière incrémentielle pour éviter de devoir retransmettre autant de données dans le cas d'une future perte de paquets. Il existe une composante liée à la mémoire disponible (tampons de réception), mais dans les systèmes modernes, elle n'est généralement pas pertinente. Wikipedia

La cause sous-jacente de ce problème est probablement une mauvaise connexion réseau. Les VPN peuvent souvent présenter une latence élevée et/ou une perte de paquets, tout comme les réseaux sans fil. À titre expérimental, le problème s'améliore-t-il ou se résout-il si vous vous connectez via une ligne fixe au lieu d'un réseau sans fil ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X