2013-07-03 7 views
16

TCP ist stream-orientiert, dh Daten werden als fortlaufender Bytestrom übertragen. Aber was mich verwirrt ist, dass TCP Segmente erstellt und diese an IP weitergibt. IP erstellt Pakete kapselt Segmente und überträgt sie. Also wo genau der kontinuierliche Strom hier?TCP-Stream im Vergleich zu UDP-Nachricht

UDP auf der anderen Seite ist nachrichtenorientiert. Er empfängt Nachrichten von der Anwendungsschicht, erstellt Datagramme und verschiebt sie nach IP. Bisher ist es dasselbe wie TCP, stattdessen wurde ein Datagramm erstellt und nach unten geschoben. Was macht dieses Protokoll zu einer Nachrichten-orientierten?

Antwort

16

Die Schnittstelle/API Sie den entsprechenden Benutzer (Programmierer) präsentiert dieser Protokolle sind:

UDP

Nachricht orientiert, erhalten Sie eine API (senden/recv und ähnliches), die Sie liefern mit die Fähigkeit, ein Datagramm zu senden und ein Datagramm zu empfangen. 1 send() -Aufruf bewirkt, dass 1 Datagramm gesendet wird, und 1 recv() -Aufruf erhält genau 1 Datagramm.

TCP

Stream-orientierte, Sie haben eine API (senden/recv und ähnliches), die Ihnen die Möglichkeit, einen Byte-Stream zu senden gibt oder zu empfangen. Es gibt keine Bewahrung von Nachrichtengrenzen, TCP kann Daten von vielen send() - Aufrufen in ein Segment bündeln, oder es könnte Daten von einem send() - Aufruf in viele Segmente zerlegen - aber das ist transparent für Anwendungen, die auf TCP sitzen, und recv() gibt Ihnen nur Daten zurück, ohne Bezug darauf, wie viele send() - Aufrufe die Daten erzeugt haben, die Sie zurückbekommen.

+0

Ist diese Streaming-Natur von TCP mit seiner Zuverlässigkeit verbunden? –

+2

@LuisVasconcellos Nicht wirklich. Es gibt ein auf Nachrichten/Datagrammen basierendes Protokoll, das Ihnen die gleiche Zuverlässigkeit wie TCP bietet. – nos

+0

Schöne Antwort! Angenommen, wir haben Daten als "Hallo". Wenn wir hier jedes Wort als Nachricht annehmen, sendet UDP sie nur als "Hi" und "da" zusammen als separate Datagramme, aber in beliebiger Reihenfolge. Während bei "TCP" "HiThe" und "Re" als zwei separate Segmente hergestellt werden können, stellt es sicher, dass beide Segmente in der richtigen Reihenfolge ankommen. Ist mein Verständnis richtig? – Zephyr

1

TCP ist streamorientiert, da es Daten im zusammenhängenden Format zusammenfassen kann. Z.B. Sie hatten Daten von 1 bis 4000 Bytes. Jetzt wird es in tcp-Segmente unterteilt, wobei jedes Segment eine Sequenznummer hat, die erste ist 1-1200 Byte, die zweite 1201-2400 und so weiter.

Es möglicherweise außerhalb der Reihenfolge geliefert werden, während durch IP-Datagramme gesendet wird, aber in zusammenhängenden Daten später als Stream zusammengefügt wird. Die Sequenznummer hilft beim Neuordnen von Paketen.

eine wenig tiefe explaination ist:

Bytestrom bestehen aus einem großen Teil der Daten ohne Segmente oder anderer Unregelmäßigkeiten. Bei Datagrammen (kleineren) werden Datenblöcke gesendet und sofort als Ganzes empfangen. In der Praxis bedeutet dies, dass mit Datagramme jeder send/write Aufruf ein Paket sendet, und jeder read/recv Aufruf ein Paket empfängt, während mit Stream-Protokoll die Daten in irgendeiner Weise gesendet und empfangen werden können. Z.B. Ein Sender kann send() zehnmal anrufen, , während der Empfänger alle diese Daten mit einem Recv-Anruf empfängt. Mit Datagramme zehn Anrufe senden bedeutet zehn Pakete und zehn Anrufe empfangen

Datagrams and streams

Byte streams

1

Die Spezialität über TCP ist, dass dieses Verhalten für den Benutzer bzw. transparent ist. die App.

Das einzige, was die App tun muss, ist send() und recv() auf Bestellung zu senden und Daten zu erhalten.

Die folgenden Schichten stellen sicher, dass die Daten in genau 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 von einem send() Anruf zusammen, auch wenn es in mehrere IP-Pakete aufgeteilt ist. Auf diese Weise können diese Daten als ein Datagramm angesehen werden.

4

TCP ist ein verbindungsorientiertes Protokoll, dh es baut zuerst eine Verbindung zum Empfänger auf und sendet dann die Daten in Segmenten (PDU für Transportschicht), die von IP-Paketen übertragen werden. Auf diese Weise wird es als Stream bezeichnet, da der Datenstrom während der Übertragung zwischen den Enden verbleibt.

UDP ist ein verbindungsloses Transportprotokoll (genau wie IP) mit Dateneinheit namens Datagramm. Im Gegensatz zu tcp überträgt UDP Daten, ohne eine Verbindung aufzubauen, sondern nur Datagrammnachrichten zur Übertragung an die IP-Schicht.

Verwandte Themen