Transportebene: in-order Byte Stream
-
Hallo zusammen,
bei der Übertragung von Daten ist es ja wichtig, dass diese vom Empfänger wieder in der richtigen Reihenfolge zusammengesetzt werden.
Bei UDP sagt man immer, dass hier die Pakete in einer anderen Reihenfolge ankommen können (da verbindungslos). Deswegen fügt man in der Anwendungsschicht eine Sequenznummer hinzu, damit der Empfänger selbst sortieren kann.
Bei TCP hingegen würden die Pakete immer in der richtigen Reihenfolge versandt. Doch das kann ich mir nicht wirklich vorstellen. Dies wäre nur möglich, wenn der nach jedem Paket der Sender auf einen Acknowledgement des Empfängers wartet (also "alternating bit protocol"). Dies ist aber sicherlicht nicht der Fall, sondern eher sliding window. Doch die Pakete, die innerhalb eines Fensters verschickt werden, können doch auch auf verschiedenen Routen ankommen.
Warum kommen die Pakete bei TCP immer in der richtigen Reihenfolge an?
Vielen Dank
LG, freakC++
-
Kurz gesagt: TCP fügt selber die Sequenznummern hinzu.
-
aber das bedeutet, dass der Empfänger sie wie in UDP auch selbst zusammenfrickeln muss. Die Pakete können also schon in einer anderen Reihenfolge ankommen.
Ein Grund, UDP anstatt direkt IP zu verwenden, ist die Möglichkeit, mit Prozessen zu kommunizieren. Warum hat UDP im Header keinen Platz für die Portnummern? Sonst könnte ich auch direkt IP nutzen
Danke!
-
freakC++ schrieb:
aber das bedeutet, dass der Empfänger sie wie in UDP auch selbst zusammenfrickeln muss. Die Pakete können also schon in einer anderen Reihenfolge ankommen.
Natürlich können sie, sind ja nur IP-Pakete. Aber es ist die Transportschicht, die die Reihenfolge wiederherstellt, und nicht wie bei UDP die Anwendung.
-
aber das bedeutet, dass der Empfänger sie wie in UDP auch selbst zusammenfrickeln muss
Das wird vom Protokollstack uebernommen und ist transparent fuer den User, d.h. er sieht es nicht, was im Hintergrund passiert.
]Ein Grund, UDP anstatt direkt IP zu verwenden, ist die Möglichkeit, mit Prozessen zu kommunizieren.
Haeh? Quatsch. IP Hat genau eine Aufgabe, Routing vom Start zum Ziel mit IP-Adresse. Zuordnungen uebernehmen daraufaufbauende Protokolle. Aber was das mit Prozessen zu tun haben so ...
Warum hat UDP im Header keinen Platz für die Portnummern?
Hat es doch.
Sonst könnte ich auch direkt IP nutzen
Jedes UDP-Paket ist auch ein IP-Paket.
-
knivil schrieb:
]Ein Grund, UDP anstatt direkt IP zu verwenden, ist die Möglichkeit, mit Prozessen zu kommunizieren.
Haeh? Quatsch. IP Hat genau eine Aufgabe, Routing vom Start zum Ziel mit IP-Adresse. Zuordnungen uebernehmen daraufaufbauende Protokolle. Aber was das mit Prozessen zu tun haben so ...
Na klar, wie Du schon sagst, sorgt IP einfach nur dafür, dass gewisse Daten von einer Adresse zu einer anderen kommt. Das wars. Jetzt könnte man sich fragen: Aber warum gibt es dann UDP? Im UDP Header steht nur Quell-/Zielport (thx :)), die Länge des Pakets und eine Checksumme. Warum nutzt man nicht gleich nur IP?
Meine Antwort. Durch die Angabe von Ports ist es möglich, dass zwei Prozesse kommunizieren. Das OS kriegt ein IP Paket und weiß aber nicht, was es damit machen soll. Da in diesem nun ein UDP Paket verpackt ist, kann es die Daten an den entsprechenden Port weiterleiten, den ein Prozess beispielsweise über Polling abfragt.
Noch eine andere Frage:
Was ist der Unterschied zwischen Frames und Paketen? Ich habe das "Alternating Bit Protocol" kennengelernt, bei dem jedes Paket durch ein ACK - Paket bestätigt wird. Dies war ein Negativbeispiel, da so sehr viel Traffic besteht. Nun lese ich bei TCP, dass jedes Frame (manchmal auch jedes Paket) bestätigt wird. Das wäre aber ziemlich bescheurt, da so das gleiche Problem wie beim "Alternating Bit Protocol" entsteht.
Heißt dies, dass ein Frame (siehe sliding window) mehrere Pakete umfasst und so nur alle 5 Pakete beispielsweise bestätigt werden?
Vielen Dank
LG, freakC++
-
Bei TCP muss nicht jedes Paket einzeln bestätigt werden. Der Empfänger sendet ab und zu zurück, dass er alle Daten bis Byte X empfangen hat, wie oft das passiert ist soviel ich weiß implementierungsabhängig.
-
Warum nutzt man nicht gleich nur IP?
Weil es zwei verschieden Aufgaben sind. Ich kann auch ein Device bauen, dass nur IP-Pakete verarbeitet. Dann brauche ich UDP etc. nicht. Ach gibt es schon, nennt sich Router.
Auch ist die Einschraenkung auf Prozess irrefuehrend. Ich kann auch ein Device bauen, dass auf UDP reagiert, dass Prozesse garnicht kennt.