Unter welchen Umständen ist die Leistung von TCP-over-TCP erheblich schlechter als die von TCP allein (2014)?

25

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.

Nils Toedtmann
quelle
Sie werden schnell den Unterschied zwischen TCP über TCP und UDP (usw.) über TCP-VPNs bemerken, wenn Sie diese für interaktive Sitzungen verwenden, z. B. ssh. Sie werden Latenz bemerken, wenn die Sitzung nicht abfällt. YMMV, TIAS
Daniel S. Sterling
Nur wenn die "äußere" Verbindung in erster Linie einem gewissen Grad an Latenz oder Paketverlust unterliegt. Ich habe viele SSH-Sitzungen über TCP-basierte VPNs, und viele funktionieren einwandfrei, ohne merkliche Verzögerung.
Nils Toedtmann
In der Tat - es funktioniert, wenn Sie ein gutes Netzwerk haben. Wenn Sie nicht immer ein gutes Netzwerk haben, funktioniert es nicht immer
Daniel S. Sterling
Was ist ein gutes Netzwerk? Wenn alles in einer einzigen AWS-Region läuft, ist das Netzwerk gut genug?
Rich Remer

Antworten:

7

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.

Wazoox
quelle
1
Es gibt Situationen, in denen TCP über TCP eine einfache Lösung für eine Reihe von Netzwerkproblemen darstellt. Ich habe einen Abschnitt hinzugefügt, in dem unsere Überlegungen erläutert werden.
Nils Toedtmann
Ich hoffe auf eine spezifischere Antwort zu den Bedingungen, unter denen TCP-over-TCP zu einem Problem wird. Einer unserer Anwendungsfälle ist Funkverbindungen , die in unterschiedlichem Maße von Latenz und Paketverlust haben.
Nils Toedtmann
TCP über TCP über TCP (TCP-Verkehr in einem TCP-OpenVPN, auf den über eine TCP-SSH-Weiterleitung zugegriffen wird) hat mich ungefähr 5 MBit / s gekostet. Es hat mich nie im Stich gelassen, aber ich würde es nicht empfehlen, nur weil es eine riesige Verschwendung ist.
Sirenen