Unterschied zwischen TCP und UDP?

144

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?

user749414
quelle
13
Und das ( Skullbox.net/tcpudp.php ) - das war der erste Google-Hit - war nicht klar genug? Was war daran verwirrend? Vielleicht ist das besser? tcpipguide.com/free/…
S.Lott
1
Ich bin wirklich neugierig, warum diese Frage (zum Zeitpunkt des Schreibens) 3 positive Stimmen erhalten hat. Der erste Satz macht nicht einmal Sinn und es gibt viel Material zu diesem Thema, wenn man sucht.
MattH
21
@MattH: 1) Es ist eine gute Frage, wenn auch ziemlich breit und ein Duplikat bereits gut beantwortet. 2) Sie hatten mehr als genug Ruf, um den Tippfehler im ersten Satz zu beheben. 3) Es ist irrelevant, dass Informationen darüber an anderer Stelle vorhanden sind. Stack Overflow soll ein Wissensspeicher werden und beantwortet hier kanonisch Fragen .
ire_and_curses
2
Interessant, dass fast niemand erwähnt, dass DHCP Broadcast verwendet, aber jeder denkt, dass es bei der Antwort um die Garantie der Zustellung und erneuten Übertragung geht.
Heath Hunnicutt
1
Nur für alle anderen, die dies in Zukunft lesen, hat die oben erwähnte Skullbox-Site laut Google MALWARE (sie hat mich gestoppt, als ich darauf geklickt habe). Ich würde raten, nicht dorthin zu gehen.
Alan006

Antworten:

119

TCPist 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 verursacht UDP.

UDPist 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 als TCPweil es kein ACK verwendet . Es wird im Allgemeinen für die Echtzeitkommunikation verwendet, bei der ein kleiner Prozentsatz der Paketverlustrate dem Overhead einer TCPVerbindung vorzuziehen ist .

In bestimmten Situationen UDPwird verwendet, weil es die Übertragung von Broadcast-Paketen ermöglicht. Dies ist in Fällen wie dem DHCPProtokoll manchmal von grundlegender Bedeutung , da der Clientcomputer noch keine IPAdresse erhalten hat (dies ist der DHCPZweck des Verhandlungsprotokolls) und es keine Möglichkeit gibt, einen TCPStream ohne die IPAdresse selbst einzurichten.

Heisenbug
quelle
5
Ein Beispiel für die Verwendung von UDP ist die Video- und Audioübertragung, bei der der Verlust einiger Pakete hier und da normalerweise nicht so wichtig ist (die Farbe eines Frames ist möglicherweise deaktiviert oder eine winzige Nano-Sekunde Audio wird möglicherweise ausgeschnitten oder geändert - für den Menschen nicht wirklich auffällig). Wenn Ihre Verbindung wirklich schlecht ist, können Sie natürlich so viele Pakete verlieren, dass das Video verschwommen / pixelig erscheint und das Audio unscharf wird und viel ein- und ausschneidet.
Niko Bellic
53

Aus dem Skullbox-Artikel:

TCP (Transmission Control Protocol) ist das am häufigsten verwendete Protokoll im Internet. Der Grund dafür ist, dass TCP eine Fehlerkorrektur bietet. Wenn das TCP-Protokoll verwendet wird, gibt es eine "garantierte Zustellung". Dies ist größtenteils auf eine Methode zurückzuführen, die als "Flusskontrolle" bezeichnet wird. Die Flusskontrolle bestimmt, wann Daten erneut gesendet werden müssen, und stoppt den Datenfluss, bis vorherige Pakete erfolgreich übertragen wurden. Dies funktioniert, da beim Senden eines Datenpakets eine Kollision auftreten kann. In diesem Fall fordert der Client das Paket erneut vom Server an, bis das gesamte Paket vollständig und mit dem Original identisch ist.

UDP (User Datagram Protocol) ist ein weiteres im Internet häufig verwendetes Protokoll. UDP wird jedoch niemals zum Senden wichtiger Daten wie Webseiten, Datenbankinformationen usw. verwendet. UDP wird üblicherweise zum Streamen von Audio und Video verwendet. Streaming-Medien wie Windows Media-Audiodateien (.WMA), Real Player (.RM) und andere verwenden UDP, weil es Geschwindigkeit bietet! Der Grund, warum UDP schneller als TCP ist, liegt darin, dass es keine Form der Flusskontrolle oder Fehlerkorrektur gibt. Die über das Internet gesendeten Daten sind von Kollisionen betroffen, und es treten Fehler auf. Denken Sie daran, dass es bei UDP nur um Geschwindigkeit geht. Dies ist der Hauptgrund, warum Streaming-Medien keine hohe Qualität aufweisen.

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.

S. 27
quelle
1
+1 Ziemlich gute Zusammenfassung. Obwohl die is the most commonly used protocol on the InternetAussage streitig ist und wirklich davon abhängt, wie Sie definieren most commonly used, protocolund the Internet. Zum Beispiel ist das Internetprotokoll ein wahrscheinlicherer Anwärter auf diese bestimmte Krone.
MattH
-1: Der Grund, warum UDP für DHCP verwendet wird, hat nichts mit Paketverzögerung oder -verlust zu tun.
Heath Hunnicutt
2
Wenn Sie viele Daten auf einem klaren Kanal senden, ist TCP häufig schneller als UDP. Der Grund, warum UDP beispielsweise für Live-Streaming von Audio oder Video verwendet wird, besteht darin, dass die empfangende Anwendung beim Verschwinden eines TCP-Pakets nichts mehr sieht, bis die fehlenden Daten erneut übertragen und erfolgreich empfangen wurden. In vielen Streaming-Anwendungen sind verspätet eintreffende Daten unbrauchbar. Es macht also keinen Sinn, alles aufzuhalten, während Sie auf eine erneute Übertragung warten, die ohnehin unbrauchbar wird.
Supercat
UDP wird für DHCP verwendet, da TCP keine Broadcasts unterstützt. DHCP ist auf die Verwendung eines Broadcasts angewiesen, um die IP-Adresse für den DHCP-Server abzurufen. Siehe stackoverflow.com/questions/21266008/…
ScottSmudger
41

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.

Marc B.
quelle
1
Anständige Antwort. Ich würde hinzufügen, dass in einem TCP-Stream die Pakete vom Ziel bestätigt werden und beschädigte Pakete / fehlende Pakete vom Absender erneut gesendet werden. In UDP werden die Pakete gesendet und das Ziel empfängt sie in beliebiger Reihenfolge und bestätigt den Empfang nicht.
Erik Nedwidek
2
Eine irreführende Analogie, die vielleicht besser für QoS geeignet ist
MattH
11
Ich mag die Analogie sehr, aber eine Sache, die diese Antwort leicht falsch darstellt, ist die Geschwindigkeit. Es klingt so, als ob TCP schneller ist, während UDP in Wirklichkeit weniger Overhead verursacht.
iliketocode
22

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.

Heath Hunnicutt
quelle
17

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

Caltuntas
quelle
9

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.

Timir
quelle
2

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.

msc
quelle
1

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.

Eugene
quelle
0

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:

  1. Buchstabe 1 - Seien Sie proaktiv
  2. Buchstabe 2 - Beginnen Sie mit dem Ende im Auge ...

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:

  • Bestätigungsschreiben: Ihr Brieffreund sendet also ein Bestätigungsschreiben mit der Aufschrift "Ich habe Brief 1 erhalten". Auf diese Weise wissen Sie, dass Ihr Brieffreund es erhalten hat. Wenn ein Brief nicht ankommt oder nicht in der richtigen Reihenfolge ankommt, müssen Sie anhalten und zurückgehen und diesen Brief und alle nachfolgenden Briefe erneut senden.
  • Flusskontrolle: Ungefähr zu Weihnachten wissen Sie, dass Ihr Brieffreund viel Post erhält. Sie werden also langsamer, weil Sie Ihren Brieffreund nicht überfordern möchten. (Ihr Brieffreund sendet Ihnen ständig Aktualisierungen über die Anzahl der ungelesenen Nachrichten in der Mailbox des Brieffreunds. Wenn Ihr Brieffreund sagt, dass der Posteingang explodieren wird, weil er so voll ist, verlangsamen Sie das Senden Ihrer Briefe - weil Ihr Brieffreund kann sie nicht lesen.
  • Perfekte Ankunft. Manchmal, wenn Sie Ihren Brief per Post verschicken, kann er zerrissen werden oder eine Schnecke kann die Hälfte davon essen. Woher wissen Sie, dass alle Ihre Briefe in einwandfreiem Zustand angekommen sind? Nun, Ihr Brieffreund gibt Ihnen einen Mechanismus, mit dem Sie überprüfen können, ob er den vollständigen Brief erhalten hat und ob es genau der Brief war, den Sie gesendet haben. (zB über eine Wortzahl etc.). eine grundlegende Analogie.
BKSpurgeon
quelle
0

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.

Raiks
quelle