TLDR;
- TCP - Stream-orientiert, erfordert eine Verbindung, zuverlässig, langsam
- UDP - nachrichtenorientiert, verbindungslos, unzuverlässig, schnell
Bevor wir beginnen, denken Sie daran, dass alle Nachteile von etwas eine Fortsetzung seiner Vorteile sind . Es gibt nur ein richtiges Werkzeug für einen Job, kein Allheilmittel. TCP / UDP koexistieren seit Jahrzehnten und das aus einem bestimmten Grund.
TCP
Es wurde entwickelt, um äußerst zuverlässig zu sein, und es macht seine Arbeit sehr gut. Es ist so komplex, weil es eine schwierige Aufgabe erfüllt: einen zuverlässigen Transport über das unzuverlässige IP-Protokoll zu beweisen.
Da die gesamte komplexe Logik von TCP in den Netzwerkstapel eingekapselt ist, können Sie in der Anwendungsschicht nicht viele mühsame, fehleranfällige Low-Level-Aufgaben ausführen.
Wenn Sie Daten über TCP senden, schreiben Sie einen Bytestrom an den Socket des Absenders, wo er in Pakete aufgeteilt, über den Stapel weitergeleitet und über die Leitung gesendet wird. Auf der Empfängerseite werden Pakete wieder zu einem kontinuierlichen Strom von Bytes zusammengesetzt.
Die Aufrechterhaltung dieser schönen Abstraktion ist mit Kosten in Bezug auf Komplexität und Leistung verbunden. Wenn das erste Paket aus dem Bytestrom verloren geht, verzögert der Empfänger die Verarbeitung nachfolgender Pakete, auch wenn diese bereits angekommen sind.
Um zuverlässig zu sein, implementiert TCP Folgendes:
- TCP erfordert eine hergestellte Verbindung, die 3 Roundtrips erfordert ("berüchtigter" 3-Wege-Handshake).
- TCP verfügt über eine Funktion namens "langsamer Start", wenn die Übertragungsrate nach dem Herstellen einer Verbindung schrittweise erhöht wird, damit ein Empfänger mit den Daten Schritt halten kann.
- Jedes gesendete Paket muss bestätigt werden, sonst sendet ein Absender keine weiteren Daten mehr
- Und weiter und weiter und weiter ...
All dies wird in langsamen, unzuverlässigen drahtlosen Netzwerken noch verstärkt, während TCP für drahtgebundene Netzwerke entwickelt wurde, bei denen Verzögerungen vorhersehbar sind und Paketverluste nicht so häufig sind. Darüber hinaus funktioniert TCP, wie viele bereits erwähnt, für einige Dinge überhaupt nicht (DHCP). Wo dies relevant ist, macht TCP seine Arbeit jedoch immer noch außergewöhnlich gut.
Wenn Sie eine E-Mail-Analogie verwenden, ähnelt eine TCP-Sitzung dem Erzählen einer Geschichte für Ihre Sekretärin, die sie in E-Mails aufteilt und einen beschissenen E-Mail-Dienst an einen Herausgeber sendet. Auf der anderen Seite setzt eine andere Sekretärin Mails zu einem einzigen Text zusammen. Einige E-Mails gehen verloren, andere werden beschädigt. Daher ist ein sehr komplexes Verfahren für eine zuverlässige Zustellung erforderlich, und es kann lange dauern, bis Ihre 10-seitige Story Ihren Herausgeber erreicht.
UDP
UDP hingegen ist nachrichtenorientiert, sodass ein Empfänger eine Nachricht (ein Paket) in den Socket schreibt und diese dann unverändert an einen Empfänger sendet, ohne sie aufzuteilen / zusammenzusetzen.
Im Vergleich zu TCP ist die Spezifikation sehr einfach. Im Wesentlichen reicht es für Sie aus, dem Paket eine Prüfsumme hinzuzufügen, damit ein Empfänger seine Beschädigung erkennen kann. Alles andere muss von Ihnen, einem Softwareentwickler, implementiert werden. Lesen Sie nun die umfangreiche TCP-Spezifikation und versuchen Sie, einige Teile davon erneut zu implementieren.
Einige Leute gingen diesen Weg und erzielten sehr gute Ergebnisse, bis zu dem Punkt, dass HTTP / 3 QUIC verwendet - ein auf UDP basierendes Protokoll. Dies ist jedoch eher eine Ausnahme. Übliche Anwendungen von UDP sind Audio- / Video-Streaming- und Konferenzanwendungen wie Skype, Zoom oder Google Hangout, bei denen das Verlieren von Paketen im Vergleich zu einer durch TCP eingeführten Verzögerung nicht so wichtig ist.