Maximaler payload in TCP und UDP paketen in linux apps
-
umgebung; linux , gcc (wobei ich denke dass das weniger wichtig ist)
ich moechte per tcp oder udp unter linux daten verschicken (also normale client / server app).
wie siehts da mit dem maximalen payload aus:
-muss ich mich an der MTU size orientieren, oder wird der payload beim versand durch den treiber auf eine entsprechende anzahl pakete verteilt?-wie siehts dann beim empfang aus (read() bzw. recv()), muessen die pakete ggf. wieder assembliert werden.
ist das verhalten bei udp / tcp unterschiedlich?
-
Belgarad schrieb:
wie siehts da mit dem maximalen payload aus:
-muss ich mich an der MTU size orientieren, oder wird der payload beim versand durch den treiber auf eine entsprechende anzahl pakete verteilt?In ein TCP/UDP-Paket geht erstmal theoretisch 64kiByte rein, die MTU hat auf ner anderen Schicht zu suchen. Aber auch darum kümmert sich TCP/UDP soweit ich weiß selber (zumindest bei TCP bin ich 100%ig sicher). Nochmal nachgecheckt: ein UDP kann maximal 64k - headergröße Daten enthalten, es wird kein Zusammenhang zwischen Paketen hergestellt.
-wie siehts dann beim empfang aus (read() bzw. recv()), muessen die pakete ggf. wieder assembliert werden.
Jein. Das Betriebssystem kümmert sich bei TCP darum, dass du die Pakete in der richtigen Reihenfolge bekommst. read/recv stellen allerdings nicht sicher, dass du alle Daten auf einmal bekommst, du musst also so oft read/recv machen, bis du die gewünschte Zahl an Daten erhalten hast und das alles in einem Puffer zusammenpacken.
Bei UDP besteht kein Zusammenhang zwischen Paketen und daher kannst du nicht sagen, in welcher Reihenfolge die Pakete ankommen.ist das verhalten bei udp / tcp unterschiedlich?
Bei TCP muss vor dem Sendevorgang eine Verbindung hrgestellt werden, bei UDP nicht. TCP ist fehlersicher, d.h. es kümmert sich automatisch darum, dass fehlerhafte Pakete neuverschickt werden usw. UDP schickt ein Paket ins Netz und man kann nur hoffen, dass es ankommt, Garantien gibts dafür nicht, da muss sich das Programm dann drum kümmern. Dafür ist UDP etwas zügiger.