webentwicklung-frage-antwort-db.com.de

TCP Stream vs UDP-Nachricht

TCP ist Stream-orientiert, dh Daten werden als fortlaufender Bytestrom übertragen. Was mich jedoch verwirrt, ist, dass TCP Segmente erstellt und diese an IP weitergibt. IP erstellt Pakete, kapselt Segmente ein und überträgt sie. Wo also genau der kontinuierliche Strom hier? 

UDP dagegen ist nachrichtenorientiert. Es empfängt Nachrichten von der Anwendungsebene, erstellt Datagramme und überträgt sie auf IP. Bisher ist es dasselbe wie TCP, stattdessen wird ein Datagramm erstellt und heruntergedrückt. Was macht dieses Protokoll zu einer Nachricht?

20
Kuzey

Die Schnittstelle/API, die Ihnen als Benutzer (Programmierer) dieser Protokolle angezeigt wird, ist:

UDP

Nachrichtenorientiert, haben Sie eine API (send/recv und ähnliches), die Ihnen die Möglichkeit gibt, ein Datagramm zu sendenone zu senden und ein Datagramm zu empfangen. 1 send () - Aufruf führt zu einem gesendeten Datagramm, und 1 recv () - Aufruf erhält genau 1 Datagramm.

TCP

Streamorientiert haben Sie eine API (Senden/Empfangen und Ähnliches), mit der Sie einen Byte-Stream senden oder empfangen können. Es gibt keine Beibehaltung der Nachrichtengrenzen, TCP kann Daten von vielen send () - Aufrufen in einem Segment bündeln oder Daten von einem send () - Aufruf in viele Segmente aufteilen top of TCP, und recv () gibt Ihnen nur Daten zurück, ohne Bezug darauf, wie viele send () - Aufrufe die Daten erzeugt haben, die Sie zurückerhalten.

25
nos

TCP ist ein verbindungsorientiertes Protokoll, dh es stellt zunächst eine Verbindung zum Empfänger her und sendet dann die Daten in Segmenten (PDU für Transport Layer), die von IP-Paketen übertragen werden. Auf diese Weise wird er als Stream bezeichnet, da er den Datenstrom während der Übertragung zwischen den Enden hält.

UDP ist ein verbindungsloses Transportprotokoll (genau wie IP) mit einer Dateneinheit, die als Datagramm bezeichnet wird. Im Gegensatz zu tcp überträgt UDP also Daten, ohne eine Verbindung aufzubauen, indem nur Datagrammnachrichten an die IP-Schicht gesendet werden, um übertragen zu werden.

4
Farhood

TCP ist stromorientiert, da es Daten in einem zusammenhängenden Format zusammenstellen kann. Z.B. Sie hatten Daten von Nummer 1 bis 4000 Bytes. Jetzt wird es in TCP-Segmente unterteilt, wobei jedes Segment eine Sequenznummer haben würde, von der zuerst 1-1200 Byte, zweitens 1201 - 2400 usw. ist.

Es wird möglicherweise außerhalb der Reihenfolge gesendet, während es über IP-Datagramme gesendet wird, wird jedoch zu zusammenhängenden Daten dort zusammengefügt, indem es als Stream angezeigt wird. Die Sequenznummer hilft bei der Neuordnung von Paketen.

Eine etwas tiefere Erklärung ist:

Ein Byte-Datenstrom besteht aus einem großen Datenblock ohne Segmente oder andere Unregelmäßigkeiten. Bei Datagrammen (kleineren) werden Datenblöcke gesendet und auf einmal als Ganzes empfangen. In der Praxis bedeutet das, dass mit Datagramme Bei jedem Sende-/Schreibanruf wird ein Paket gesendet, und bei jedem Lese-/Empfangsv Der Anruf erhält ein Paket, während mit dem Stream-Protokoll die Daten .__ sein können. senden und in irgendeiner Weise erhalten. Z.B. Ein Absender kann zehnmal send () anrufen, während der Empfänger all diese Daten mit einem Recv-Anruf empfängt. Mit Datagramme zehn Sendeaufrufe bedeuten zehn Pakete und zehn Empfangsaufrufe

Datagramme und Streams

Byte-Streams

3
fayyazkl

Viel Verwirrung hier. Lass mich klarstellen.

TCP/IP ist ein strömungsorientiertes, paket- und verbindungsorientiertes ProtokollUDP ist nur ein paketorientiertes Protokoll. Stellt zuerst keine Verbindung her. 

Nehmen wir an, Sie verwenden ein Java-Programm, um eine Verbindung zu einem Netzwerk in Ihrer Anwendung herzustellen, indem Sie auf der Clientseite Java.net.Socket und auf der Serverseite Java.net.ServerSocket aufrufen. Sobald die Verbindung hergestellt ist, beginnt die Datenübertragung. Die Frage stellt sich, ob die Daten im Stream (Codata oder Infinite Stream) oder im Paket gesendet werden, wenn ich TCP wähle. Die Antwort ist, dass Daten von der TCP -Methode Stream empfangen werden, aber TCP konvertiert den Stream in ein Paket, bevor er den unteren Stapelspeicher sendet. Grundsätzlich sendet die obige Anwendungsschicht die Daten im Stream an die TCP - Schicht, und TCP zerlegt sie in Pakete an die Netzwerkschicht und führt Paket-zu-Streaming aus, während der Server den Server empfängt (Empfang). Seite, weil Ihre Anwendung Java nur Stream verstehen kann. Die Dateiübertragung wird über TCP über UDP bevorzugt, da Sie es sich nicht leisten können, Pakete zu verlieren.

UDP dagegen ist ein paketorientiertes Protokoll, bei dem die Anwendung wie die Java-Klasse Java.net.DatagramPacket; Java.net.DatagramPacket; import Java.net.DatagramsSocket erstellt zuerst ein Paket, bevor es mit UDP kommuniziert, und das Paket wird mit zusätzlichen Informationen über UDP/IP-Protokolle an den Server gesendet. Beachten Sie, dass einige Anwendungen die Daten möglicherweise als Stream darstellen, wenn UDP als Protokoll zugrunde liegt. Dies ist jedoch die Schichtung eines zusätzlichen Protokolls zusätzlich zu UDP, und es ist nichts, was dem UDP-Protokoll selbst inhärent ist. Live-TV-Fernsehsendungen sind in der Regel UDP, da Sie sich keine Sorgen um den Verlust von Paketen machen.

2
Siva

Das Besondere an TCP ist, dass dieses Verhalten für den Benutzer transparent ist. die App.

Die App muss nur send() und recv() aufrufen, um Daten zu senden und abzurufen.

Die darunter liegenden Schichten stellen sicher, dass die Daten genau in der Reihenfolge empfangen werden, in der sie gesendet wurden, und dass fehlende Daten erneut übertragen werden, wenn sie "fehlen".

UDP, OTOH, hält die Daten eines send()-Anrufs zusammen, auch wenn dieser in mehrere IP-Pakete aufgeteilt ist. Auf diese Weise können diese Daten als ein Datagramm betrachtet werden.

2
glglgl