UDP Socket: Message too long

S

souljumper

Mitglied
Thread Starter
Dabei seit
15.10.2008
Beiträge
26
Reaktionspunkte
0
hallo

ich hab eine Verständnisfrage zu UDP Sockets. Wenn mein aktuelles Paket die MTU überschreitet, muss ich mich dann selbstständig darum kümmern die Pakete auf eine Größe runter zu brechen so das sie wieder passen ?
Oder gibt es da eine funktion in der "standardbibliothek" die das für macht ?

Hab jetzt schon viel gesucht und viele Beispiele gefunden, aber alle haben nur paketgrößen von 100 Byte verwendet, so das dieses Problem nicht auftrat. Die Frage wurde leider auch in keinem der tutorials beantwortet ob es einen automatischen Fragmentierungsmechanismus in der Socket-API gibt.

Danke für ne Antwort
(PS: Ich versuch das unter C++ zu implementieren, falls das weiter hilft)
 
hi!

ich hab eben auch erstmal Wikipedia über MTU befragen müssen, weil ich mir nicht ganz sicher war.

MTU (maximum Transmission Unit) ist eine Paketgrößenbeschränkung in der Netzwerkinfrastruktur auf Ethernet-Ebene.

Das Netzwerk-Schichtenmodell sieht folgende Schichten vor:

TCP/UDP
-------------
IP
-------------
Ethernet / WLAN <- hierher gehört MTU

wenn also wirklich die MTU ein wesentlicher Parameter auch für UDP wäre, könnten wir uns den ganzen Schichtenkram und den IP-Layer sparen :cool:

Mit anderen Worten: MTU ist für dich in der Softwareentwicklung am UDP-Socket völlig belanglos!

Nachtrag:
Wenn du wirklich eine "Message too long"-Exception kriegst, dann würd ich mal überprüfen ob dein UDP-Datagram beim Sender auch nicht größer angelegt wird. Die Beschränkung muss da auf jeden Fall drin sein.

Mit C++ kenn ich mich im übrigen nicht aus, bin Java-Entwickler. Für die Aufgabenstellung dürfte das aber auch irrelevant sein. UDP ist UDP.
 
Zuletzt bearbeitet:
hm...

das entspricht meiner Meinung, MTU ist eig. viel zu tief. Ich sollte Informationen losschicken und die Fragmentierung den Sockets überlassen.


(Java ist glaub ich bei der IMplementierung quasi 1:1 zu C/C++, ist die selben API's)

Also keiner eine Idee woran das liegen könnte ?
 
wie schon geschrieben, ist denn wirklich das vom Sender erzeugt UDP-Paket das du erzeugst kleiner oder gleichgroß dem was der Empfänger ausliest?
 
Du musst die SO_SNDBUF Socketoption nach deinen Bedürfnissen ändern. Wenn diese jedoch grösser als die MTU ist, werden die Packete dann natürlich fragmentiert.

Da es sehr schwierig ist performante UDP-Applikationen zu entwickeln, würde ich SCTP als Alternative anschauen.

Wenn du seriös etwas Programmieren wilst im Netzwerkbereich, wirst du "Unix Network Progamming" kaufen müssen. Die Dokumentationen im Internet sind alle grottenschlecht.
 
Zurück
Oben Unten