Viele Administratoren wissen auf ServerFault und anderswo immer wieder, wie schlecht TCP-over-TCP ist, z. B. in VPNs. Dass selbst der geringste Paketverlust zu einer zumindest starken Verschlechterung des Durchsatzes führt, wenn TCP nicht zusammenbricht, und dass TCP-over-TCP daher unbedingt zu vermeiden ist. Und das war wahrscheinlich einmal alles wahr, zB 2001, als dieser Artikel geschrieben wurde, auf den immer noch Bezug genommen wird.
Aber seitdem haben wir große Fortschritte in Technologie und Protokollen gesehen. Heutzutage haben wir 'Selective ACK' fast überall implementiert, und Moores Gesetz hat uns so viel mehr Speicher gegeben, und mit ihm kamen große TCP-Puffer, die für Gbit-Uplinks optimiert wurden. Auch Paketverlust ist heutzutage bei Nicht-Funkverbindungen weniger ein Problem. All dies sollte das TCP-over-TCP-Problem erheblich lindern, nicht wahr?
Beachten Sie, dass es reale Szenarien gibt, in denen z. B. TCP-basierte VPNs einfacher zu implementieren und zu betreiben sind als UDP / ESP-basierte (siehe weiter unten). Daher meine Frage:
Unter welchen Umständen (Verlust und Latenz von Verbindungspaketen) ist die Leistung von TCP-über-TCP erheblich schlechter als die von TCP allein, wenn SACK-Unterstützung vorausgesetzt wird und die TCP-Puffer an beiden Enden angemessen dimensioniert sind?
Es wäre großartig, einige Messungen zu sehen, die die Korrelationen zwischen Paketverlust / -latenz (äußere Verbindung) und Durchsatz / Jitter (innere Verbindung) zeigen - für TCP über TCP und nur für TCP. Ich fand diesen interessanten Artikel , aber er scheint nur über die Latenz besorgt zu sein und nicht über den Verlust von (äußeren) Paketen.
Außerdem: Gibt es empfohlene Einstellungen (z. B. TCP-Optionen, Puffereinstellungen, Reduzierung von MTU / MSS usw.), um die Leistungslücke zwischen TCP und TCP-over-TCP zu verringern?
Update: Unsere Begründung.
Diese Frage ist in einigen realen Szenarien immer noch sehr relevant. Beispielsweise setzen wir eingebettete Geräte in großen Gebäuden ein, die Sensordaten sammeln und über VPN in unsere Plattform einspeisen. Das Problem, mit dem wir konfrontiert sind, sind Firewalls und falsch konfigurierte Uplinks, die wir nicht kontrollieren können, kombiniert mit widerstrebenden IT-Abteilungen. Ein detailliertes Beispiel finden Sie hier .
In vielen Fällen ist der Wechsel von einem Nicht-TCP-VPN zu einem TCP-basierten VPN (sehr einfach, wenn Sie OpenVPN wie uns verwenden) eine schnelle Lösung, mit der wir bergauf gerichteten Kämpfen ausweichen können. ZB ist der TCP-Port 443 häufig allgemein zulässig (zumindest über einen Proxy), oder wir können Path-MTU-Probleme überwinden, indem wir einfach die MSS-Option von TCP reduzieren.
Es wäre gut zu wissen, unter welchen Umständen ein TCP-basiertes VPN als praktikable Alternative angesehen werden kann, damit wir eine fundierte Entscheidung treffen können, die die Vor- und Nachteile beider Optionen überwiegt. Zum Beispiel wissen wir, dass TCP-VPN für Nicht-Funkverbindungen in Ordnung ist, aber wir haben einen fairen Anteil von Remote-Clients auf 3G-Uplinks mit erheblichem Paketverlust und hoher Latenz - wie würde ein TCP-VPN dort abschneiden?
Ich habe versucht, den Titel und die zentrale Frage entsprechend zu verbessern; Ich hoffe, es macht Sinn.
quelle
Antworten:
Ich denke, es ist tatsächlich mehr umstritten, als Sie es erscheinen lassen. Es gibt eine zugegebenermaßen alte, verwandte Linux-FAQ: http://www.tldp.org/HOWTO/VPN-HOWTO/
Ich habe seit mehr als 12 Jahren ein PPP-over-ssh-over-ADSL-Verfahren verwendet, und es hat mich nie im Stich gelassen. Aus meiner Erfahrung heraus würde ich sagen, dass die Weltuntergangsjäger wahrscheinlich weitgehend übertreiben. TCP über TCP ist wahrscheinlich eine schlechte Idee bei RTC-Verbindungen, Satellitenverbindungen und anderen Verbindungen mit entweder sehr geringem Durchsatz oder sehr langen Verzögerungen, aber für die meisten Anwendungen funktioniert es einfach .
Die wahre Frage lautet nun: Warum sollten Sie TCP über TCP überhaupt verwenden ? Als ich mein PPP-over-ssh eingerichtet habe, lag das hauptsächlich daran, dass es damals bei weitem der einfachste Weg war, ein schnelles VPN aufzubauen. dann habe ich es seitdem aus lauter Faulheit benutzt.
Heutzutage gibt es praktische, einfach einzurichtende Tools wie OpenVPN und IPSec-VPNs, sodass Sie sich mit diesem TCP-über-TCP-Problem nie mehr herumschlagen müssen.
quelle