Ich verstehe nicht, warum das Erstellen neuer TCP-Verbindungen als teure Aufgabe angesehen wird. Grundsätzlich bezieht sich das Einrichten einer neuen Verbindung auf das Ausführen des 3-Wege-Handshakes von TCP. Das heißt also, zwei Pakete zu senden und eines zu empfangen. In Anbetracht der Tatsache, dass Tausende von (Daten-) Paketen folgen werden, kann der Handshake nicht der teure Teil sein. Kann es?
8
Antworten:
Ich glaube im Allgemeinen, dass das Öffnen einer TCP-Verbindung im Vergleich zu der Möglichkeit, bereits offene Verbindungen wiederzuverwenden, indem sie offen gehalten wird, als teuer angesehen wird. Sie haben Recht, das Öffnen einer Verbindung dauert nur 3 Pakete / Umdrehungen, aber diese Zeit - 3 x Ihre RTT - liegt weit über den Kosten für die Wiederverwendung einer bereits offenen Verbindung, die weit näher bei 0 liegt. Die Disparität wächst noch schneller, wenn Sie öffnen und schließen häufig Verbindungen.
Sie haben zwar Recht, aber im Vergleich zu der Anzahl der Umdrehungen, die Sie sehen werden, wenn die Anwendung "es tut", können diese 3 Pakete ziemlich klein erscheinen, aber auch dies hängt davon ab, wie Sie die Optionen UND vergleichen möchten Wie verhält sich Ihre Anwendung / wie oft möchten Sie eine Verbindung herstellen?
Bearbeiten Wenn es sich jedoch um UDP oder TCP handelt, ist Cheekaleek hier zu 100% korrekt - der Overhead von ist auf lange Sicht im Vergleich zu den verbindungslosen Operationen von UDP enorm
quelle
Es ist sicherlich mehr Aufwand als das Senden eines UDP-Pakets und es ist egal, was danach passiert.
TCP enthält außerdem mehr Headerdaten und behält den Verbindungsstatus bei, der Ressourcen verbraucht.
Ja, im Vergleich zu UDP ist TCP teurer, aber teuer ist ein relativer Begriff.
"TCP-Verbindungen sind die beste Freundin eines Mädchens ???"
quelle
"TCP connections are a girl's best friend???"
Nein, sind sie nicht. Ich habe ein Mädchen Tausende davon zu ihrem Geburtstag bekommen und alles, was sie getan hat, war aufzuhören, meine E-Mails zurückzugeben. :(Es geht nicht nur darum, Pakete zu senden und zu empfangen. Bei jedem Schritt muss zusätzlicher Speicher zugewiesen und mindestens die Netzwerkstatus-Tabellen aktualisiert werden, bis die Sitzung eingerichtet ist. Ganz zu schweigen von zusätzlichen Sicherheitsüberprüfungen (Routen-Parodie-Schutz usw.).
Wenn nur einige Beispielnummern verwendet werden (da es sich nicht um ein bestimmtes Betriebssystem handelt), wenn ein Paket für eine eingerichtete Sitzung CPU-Kosten von 1 Einheit hat, können die Kosten für eine neue Sitzung das 10-fache oder 100-fache der Kosten betragen Operationen durchgeführt. Die meisten Hardware-Firewalls, mit denen ich gearbeitet habe, können eine Größenordnung weniger neue Verbindungen pro Sekunde verarbeiten als etablierte Sitzungen.
Es ist oft keine so große Sache, zumal ein SYN-SYN / ACK-ACK in Millisekunden auftritt, aber für große Systeme mit vielen Kunden können neue Sitzungen zu einem erheblichen Overhead werden.
quelle
Die Menge oder Art des Verkehrs ist viel weniger wichtig als der Code, der mit der tatsächlichen Zuweisung von Speicher und der damit verbundenen Verfolgung von Statusinformationen verbunden ist. Wenn Sie einen sehr groben Eindruck davon bekommen möchten, was dies bedeutet, sehen Sie sich die Menge an Code im Linux-Kernel an, die mit TCP verknüpft ist, im Vergleich zu der, die mit UDP oder ICMP verknüpft ist. Ein unglaublich grober Vergleich zeigt, dass TCP etwa das Zehnfache der in UDP gefundenen Codezeilen benötigt.
In IP-Netzwerken ist der Umfang der erforderlichen Statuswartung eine der wichtigsten Determinanten für die Skalierbarkeit. Für TCP-Endpunkte wird dies nicht nur in SYN / ACK ausgedrückt, sondern auch in der laufenden Wartung von Schiebefenstern, Sequenznummern, Pufferverwaltung und QoS-Aktionen usw. Überprüfen Sie die Komplexität des FSM für TCP und berücksichtigen Sie das inhärente Fehlen derselben in UDP ...
quelle