Was ist der Unterschied zwischen TCP und UDP?
Ich weiß, dass TCP bei nicht zeitkritischen Anwendungen verwendet wird und UDP für Spiele oder Anwendungen, die eine schnelle Datenübertragung erfordern. Ich weiß, dass TCP für HTTP, HTTPs, FTP, SMTP und Telnet verwendet wird. Ich weiß, dass UDP für DNS und DHCP verwendet wird.
Aber wieso? Welche Eigenschaften von TCP und UDP machen es für ihre jeweiligen Anwendungsfälle nützlich?
tcp
network-programming
udp
protocols
user749414
quelle
quelle
Antworten:
TCP
ist ein verbindungsorientierter Stream über ein IP-Netzwerk. Es garantiert, dass alle gesendeten Pakete das Ziel in der richtigen Reihenfolge erreichen. Dies impliziert die Verwendung von an den Absender zurückgesendeten Bestätigungspaketen und eine automatische Neuübertragung, was zusätzliche Verzögerungen und eine allgemein weniger effiziente Übertragung als verursachtUDP
.UDP
ist ein verbindungsloses Protokoll. Die Kommunikation ist datagrammorientiert . Die Integrität wird nur für das einzelne Datagramm garantiert. Datagramme erreichen das Ziel und können außerhalb der Reihenfolge oder gar nicht ankommen. Es ist effizienter alsTCP
weil es kein ACK verwendet . Es wird im Allgemeinen für die Echtzeitkommunikation verwendet, bei der ein kleiner Prozentsatz der Paketverlustrate dem Overhead einerTCP
Verbindung vorzuziehen ist .In bestimmten Situationen
UDP
wird verwendet, weil es die Übertragung von Broadcast-Paketen ermöglicht. Dies ist in Fällen wie demDHCP
Protokoll manchmal von grundlegender Bedeutung , da der Clientcomputer noch keineIP
Adresse erhalten hat (dies ist derDHCP
Zweck des Verhandlungsprotokolls) und es keine Möglichkeit gibt, einenTCP
Stream ohne dieIP
Adresse selbst einzurichten.quelle
Aus dem Skullbox-Artikel:
1) TCP ist verbindungsorientiert und zuverlässig, da UDP verbindungslos und unzuverlässig ist.2) TCP benötigt mehr Verarbeitung auf Netzwerkschnittstellenebene, wo dies bei UDP nicht der Fall ist.
3) TCP verwendet 3-Wege-Handshake, Überlastungskontrolle, Flusskontrolle und andere Mechanismen, um die zuverlässige Übertragung sicherzustellen.
4) UDP wird meistens in Fällen verwendet, in denen die Paketverzögerung schwerwiegender ist als der Paketverlust.
quelle
is the most commonly used protocol on the Internet
Aussage streitig ist und wirklich davon abhängt, wie Sie definierenmost commonly used
,protocol
undthe Internet
. Zum Beispiel ist das Internetprotokoll ein wahrscheinlicherer Anwärter auf diese bestimmte Krone.Stellen Sie sich TCP als eine dedizierte geplante UPS / FedEx-Abholung / Rückgabe von Paketen zwischen zwei Standorten vor, während UDP dem Werfen einer Postkarte in ein Postfach entspricht.
UPS / FedEx werden ihr Bestes tun, um sicherzustellen, dass das Paket, das Sie verschicken, dort ankommt und pünktlich dort ankommt. Mit der Postkarte haben Sie Glück, wenn sie überhaupt ankommt und möglicherweise nicht in der richtigen Reihenfolge oder zu spät ankommt (wie oft haben Sie eine Postkarte von jemandem erhalten, nachdem er aus dem Urlaub nach Hause gekommen ist?)
TCP kommt einem garantierten Übermittlungsprotokoll so nahe wie möglich, während UDP nur "Best Effort" ist.
quelle
Gründe, warum UDP für DNS und DHCP verwendet wird:
DNS - TCP benötigt mehr Ressourcen vom Server (der auf Verbindungen wartet) als vom Client. Insbesondere wenn die TCP-Verbindung geschlossen wird, muss sich der Server während eines als TIME_WAIT_2 bekannten Status zwei Minuten lang die Details der Verbindung merken (sie im Speicher halten). Dies ist eine Funktion, die sich gegen irrtümlich wiederholte Pakete einer vorhergehenden Verbindung schützt, die als Teil einer aktuellen Verbindung interpretiert werden. Das Verwalten von TIME_WAIT_2 belegt den Kernelspeicher auf dem Server. DNS-Anfragen sind klein und kommen häufig von vielen verschiedenen Clients. Dieses Nutzungsmuster erhöht die Belastung des Servers im Vergleich zu den Clients. Es wurde angenommen, dass die Verwendung von UDP, das keine Verbindungen und keinen Status hat, der auf dem Client oder Server verwaltet werden muss, dieses Problem verbessern würde.
DHCP - DHCP ist eine Erweiterung von BOOTP. BOOTP ist ein Protokoll, mit dem Clientcomputer Konfigurationsinformationen von einem Server abrufen, während der Client startet. Um den Server zu lokalisieren, wird eine Übertragung gesendet, in der nach BOOTP- (oder DHCP-) Servern gefragt wird. Broadcasts können nur über ein verbindungsloses Protokoll wie UDP gesendet werden. Daher benötigte BOOTP mindestens ein UDP-Paket für den Server-Locating-Broadcast. Da BOOTP ausgeführt wird, während der Client ... startet, und dies ein Zeitraum ist, in dem möglicherweise nicht der gesamte TCP / IP-Stack des Clients geladen und ausgeführt wird, ist UDP möglicherweise das einzige Protokoll, das der Client zu diesem Zeitpunkt verarbeiten kann Zeit. Schließlich haben einige DHCP / BOOTP-Clients nur UDP an Bord. Beispielsweise implementieren einige IP-Thermostate nur UDP.
Wie bereits erwähnt, eignet sich UDP auch zum Streamen von Medien, insbesondere von Audio. Gespräche klingen unter Netzwerkverzögerung besser, wenn Sie einfach die verzögerten Pakete verwerfen. Sie können dies mit UDP tun, aber mit TCP erhalten Sie während der Verzögerung nur eine Pause, gefolgt von Audio, das immer um so viel verzögert wird, wie es bereits angehalten hat. Bei Gesprächen in beide Richtungen ist dies nicht akzeptabel.
quelle
Einer der Unterschiede ist kurz
UDP : Nachricht senden und nicht zurückblicken, wenn das Ziel erreicht wurde. Verbindungsloses Protokoll
TCP : Nachricht senden und garantieren, dass das Ziel erreicht wird. Verbindungsorientiertes Protokoll
quelle
TCP stellt eine Verbindung her, bevor die eigentliche Datenübertragung stattfindet, UDP nicht. Auf diese Weise kann UDP eine schnellere Zustellung ermöglichen. Anwendungen wie DNS und Zeitserverzugriff verwenden daher UDP.
Im Gegensatz zu UDP verwendet TCP die Überlastungskontrolle. Es reagiert auf die Netzwerklast. Im Gegensatz zu UDP wird es langsamer, wenn eine Netzwerküberlastung unmittelbar bevorsteht. Anwendungen wie Multimedia, die einen konstanten Durchsatz bevorzugen, könnten sich für UDP entscheiden.
Außerdem ist UDP unzuverlässig und reagiert nicht auf Paketverluste. Daher bevorzugen verlustempfindliche Anwendungen wie die Multimedia-Übertragung UDP. TCP ist jedoch ein zuverlässiges Protokoll. Daher bevorzugen Anwendungen, die Zuverlässigkeit erfordern, wie Webübertragung, E-Mail oder Dateidownload, TCP.
Außerdem ist UDP im heutigen Internet aufgrund der mittleren Boxen nicht so einladend wie TCP. Einige Anwendungen wie Skype fallen auf TCP zurück, wenn angenommen wird, dass die UDP-Verbindung blockiert ist.
quelle
Das Gesetz der undichten Abstraktionen von Joel Spolsky
http://www.joelonsoftware.com/articles/LeakyAbstractions.html
quelle
Kurze und einfache Unterschiede zwischen Tcp- und Udp-Protokoll:
1) Tcp - Übertragungssteuerungsprotokoll und Udp - Benutzerdatagrammprotokoll.
2) Tcp ist ein zuverlässiges Protokoll, wobei Udp ein unzuverlässiges Protokoll ist.
3) Tcp ist ein Stream-orientiertes Protokoll, wobei Udp ein nachrichtenorientiertes Protokoll ist.
4) Tcp ist langsamer als Udp.
quelle
Laufen Sie in diesen Thread und lassen Sie mich versuchen, ihn auf diese Weise auszudrücken.
TCP
3-Wege-Handschlag
Bob: Hey Amy, ich möchte dir ein Geheimnis verraten
Amy: OK, mach weiter, ich bin bereit
Bob: OK
Kommunikation
Bob: 'Ich', dies ist der erste Brief
Amy: Erster Brief erhalten, bitte senden Sie mir den zweiten Brief
Bob: '', dies ist der zweite Brief
Amy: Zweiter Brief erhalten, bitte senden Sie mir den dritten Brief
Bob: 'L. ', dies ist der dritte Buchstabe
Nach einer Weile
Bob: ' L ', dies ist der dritte Buchstabe
Amy: Dritter Brief erhalten, bitte senden Sie mir den vierten Buchstaben
Bob: ' O ', dies ist der vierte Buchstabe
Amy: ...
... ...
4-Wege-Handschlag
Bob: Mein Geheimnis ist gelüftet, jetzt kennst du mein Herz.
Amy: OK. Ich habe nichts zu sagen.
Bob: OK.
UDP
Bob: Ich liebe dich
Amy erhielt: OVI LE
TCP ist zuverlässiger als UDP, wobei eine gleichmäßige Nachrichtenreihenfolge garantiert ist. Dies ist zweifellos der Grund, warum UDP leichter und effizienter ist.
quelle
Einfache Erklärung durch Analogie
TCP ist so.
Stellen Sie sich vor, Sie haben einen Brieffreund auf dem Mars (wir haben in den guten alten Tagen vor dem Internet mit schriftlichen Briefen kommuniziert).
Sie müssen Ihrem Brieffreund die sieben Gewohnheiten hochwirksamer Menschen mitteilen. Sie beschließen also, es in sieben separaten Briefen zu senden:
etc.
etc..Brief 7 - Schärfen Sie die Säge
Bedarf:
Sie möchten sicherstellen, dass Ihr Brieffreund alle Ihre Briefe erhält - in der richtigen Reihenfolge und dass sie perfekt ankommen . Wenn Ihr Stiftgeld den Buchstaben 7 vor dem Buchstaben 1 erhält, ist das nicht gut. Wenn Ihr Brieffreund alle Buchstaben außer Buchstabe 3 erhält, ist das auch nicht gut.
So stellen wir sicher, dass unsere Anforderungen erfüllt werden:
quelle
TLDR;
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:
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.
quelle