Dans quelles circonstances le TCP sur TCP fonctionne-t-il de manière nettement moins bonne que TCP seul (2014)?

25

De nombreux administrateurs continuent de perpétuer - sur ServerFault et ailleurs - la gravité d'une idée TCP-sur-TCP, par exemple dans les VPN. Que même la moindre perte de paquets fera souffrir une dégradation au moins sévère du débit sinon la fusion TCP, et que TCP-over-TCP est donc strictement à éviter. Et c'était probablement une fois vrai, par exemple en 2001, lorsque cet article a été écrit, auquel il est encore fait référence.

Mais depuis lors, nous avons vu des avancées majeures dans la technologie et les protocoles. De nos jours, nous avons implémenté 'Selective ACK' presque partout, et la loi de Moore nous a donné beaucoup plus de mémoire, et avec elle sont venus de grands tampons TCP optimisés pour les liaisons montantes Gbit. De plus, la perte de paquets est beaucoup moins problématique de nos jours sur les liaisons non radio. Tout cela devrait atténuer considérablement le problème TCP sur TCP, n'est-ce pas?

Notez qu'il existe des scénarios réels où, par exemple, les VPN basés sur TCP sont plus faciles à implémenter et à utiliser que ceux basés sur UDP / ESP (voir plus ci-dessous). Par conséquent ma question:

Dans quelles circonstances (perte et latence des paquets de liaison), TCP-sur-TCP fonctionne-t-il de manière nettement pire que TCP seul, en supposant la prise en charge de SACK et des tampons TCP de taille décente aux deux extrémités?

Ce serait formidable, alors voyez quelques mesures qui montrent les corrélations entre la perte / latence des paquets (connexion externe) et le débit / gigue (connexion interne) - pour TCP sur TCP et pour TCP seul. J'ai trouvé cet article intéressant , mais il semble ne s'intéresser qu'à la latence et ne pas traiter la perte de paquets (externe).

Aussi: Existe-t-il des paramètres recommandés (par exemple, les options TCP, les paramètres de tampon, la réduction de MTU / MSS, etc.) pour réduire l'écart de performances entre TCP et TCP sur TCP?


Mise à jour: notre justification.

Cette question est toujours très pertinente dans certains scénarios du monde réel. Par exemple, nous déployons des appareils intégrés dans de grands bâtiments qui collectent les données des capteurs et les injectent dans notre plateforme via VPN. Le problème auquel nous sommes confrontés est les pare-feu et les liaisons montantes mal configurés que nous ne contrôlons pas, combinés à des services informatiques réticents. Voir un exemple détaillé discuté ici .

Dans de nombreux cas, le passage d'un VPN non TCP à un VPN basé sur TCP (très facile si vous utilisez OpenVPN comme nous) est une solution rapide qui nous permet d'échapper aux batailles pointues en montée. Par exemple, souvent le port TCP 443 est généralement autorisé (au moins via un proxy), ou nous pouvons surmonter les problèmes Path-MTU en réduisant simplement l'option MSS de TCP.

Il serait bon de savoir dans quelles circonstances un VPN basé sur TCP peut être considéré comme une alternative viable, afin que nous puissions prendre une décision éclairée l'emportant sur les avantages et les inconvénients de l'une ou l'autre option. Par exemple, nous savons que TCP-VPN est correct pour nous sur les liaisons non radio, mais nous avons une bonne part de clients distants sur les liaisons montantes 3G avec une perte de paquets importante et une latence élevée - comment un TCP-VPN fonctionnerait-il là-bas?

J'ai essayé d'améliorer le titre et la question centrale en conséquence; J'espère que ça a du sens.

Nils Toedtmann
la source
Vous remarquerez rapidement la différence entre TCP sur TCP et UDP (etc.) sur les VPN TCP lorsque vous les utilisez pour des sessions interactives, par exemple ssh. Vous remarquerez une latence sinon une baisse de session. YMMV, TIAS
Daniel S. Sterling
Seulement si la connexion «externe» est soumise à un certain degré de latence ou de perte de paquets en premier lieu. J'ai beaucoup de sessions SSH sur des VPN basés sur TCP, et beaucoup fonctionnent très bien sans retard notable.
Nils Toedtmann
En effet - cela fonctionne lorsque vous avez un bon réseau. Si vous n'avez pas toujours un bon réseau, cela ne fonctionne pas toujours
Daniel S. Sterling
Qu'est-ce qu'un bon réseau? Si tout fonctionne dans une seule région AWS, le réseau est-il suffisamment bon?
remer riche

Réponses:

7

Je pense que c'est en fait plus débattu que vous ne le faites paraître. Il existe une FAQ Linux certes ancienne et connexe: http://www.tldp.org/HOWTO/VPN-HOWTO/

J'utilise un PPP-over-ssh-over-ADSL depuis plus de 12 ans, et cela ne m'a jamais échoué, donc d'après mon expérience, j'oserais dire que les malheureux disent probablement exagérer largement. TCP sur TCP est probablement une mauvaise idée avec les connexions RTC, les liaisons par satellite et d'autres liaisons avec un débit très faible ou des retards très longs, mais pour la plupart des utilisations, cela fonctionne .

Maintenant , la vraie question est: pourquoi voulez - vous utiliser TCP sur TCP du tout ? Quand j'ai configuré mon PPP-over-ssh, c'était en grande partie parce qu'à l'époque c'était de loin le moyen le plus simple de construire un VPN rapide; alors je l'ai utilisé depuis par pure paresse.

De nos jours, il existe des outils pratiques et faciles à configurer comme OpenVPN, les VPN IPSec, de sorte que vous ne devriez jamais avoir à vous déranger avec ce problème TCP sur TCP.

wazoox
la source
1
Il existe des situations où TCP-over-TCP est une solution simple à un certain nombre de problèmes de réseau. J'ai ajouté une section expliquant notre justification.
Nils Toedtmann
J'espère une réponse plus précise sur les conditions dans lesquelles TCP-over-TCP devient un problème. Un de nos cas d'utilisation est celui des liaisons radio qui ont différents degrés de latence et de perte de paquets.
Nils Toedtmann
TCP sur TCP sur TCP (trafic TCP dans un TCP OpenVPN accessible via un transfert TCP SSH) m'a coûté environ 5 Mo / s. Cela ne m'a jamais échoué, mais je ne le recommanderais pas simplement parce que c'est un énorme gaspillage.
Sirènes