[fli4l] SIP - dynamische Umschaltung von udp auf tcp

Christoph Schulz fli4l at kristov.de
Do Jun 9 00:01:28 CEST 2016


Hallo!

Erwin Lottermann schrieb:

>> Allein dies ist schon nicht RFC-konform.
> 
> Du meinst also, dass es sich die Draytek-Entwickler zu einfach machen,
> wenn sie UDP-Pakete mit Fragmentierungskennung prinzipiell verwerfen.

Exakt.

>> Ein UDPv4-Datagramm kann bis zu 65535 - 20 - 8 = 65507 Byte
>> Nutzdaten haben.
>> Das würde bedeuten, dass der Draytek-Router standardmäßig nicht
>> einmal ein
>> Vierzigstel der RFC-konformen Größe durchlässt.
>> 
> 
> Gibt es tatsächlich Applikationen, die von der prinzipiell vorgesehenen
> UDP-Datagrammgröße Gebrauch machen?

Gibt es einen Beweis, dass es sie nicht gibt?

Analogie: Wenn die Post Großbriefe bis 500 g erlaubt, dann darf sie nicht 
die Großbriefe mit >= 450 g einfach wegwerfen mit der Begründung, die wären 
so selten, dass ein solcher Brief quasi eine Briefbombe enthalten muss und 
somit eine Gefahr für die Post und die Allgemeinheit darstellt.

> Zumindet im SIP RFC3261 gibt es eine klare Ansage, dass SIP auf
> Applikationsebene dafür zu sorgen hat, dass UDP-Datagramme nicht
> fragmentieren.

Du meinst:

"If a request is within 200 bytes of the path MTU, or if it is larger
 than 1300 bytes and the path MTU is unknown, the request MUST be sent
 using an RFC 2914 [43] congestion controlled transport protocol, such
 as TCP."

Nun, hier verstößt die Telekom (oder wer auch immer) klar gegen das RFC, 
denn nach deinen Ausführungen wird nicht auf TCP umgeschaltet. Das ist aber 
kein Verbot von Fragmentierung, denn schließlich kann im Falle einer 
unbekannten MTU diese auch wesentlich kleiner sein als 1300 Bytes. Es soll 
nur Fragmentierung vermeiden:

"This prevents fragmentation of messages over UDP [...]"

Weiter unten wird auch ausgeführt, warum 1300 Byte als Richtwert genommen 
wurden ("1300 is chosen when path MTU is not known, based on the assumption 
of a 1500 byte Ethernet MTU."). Also alles nur Hilfen und Heuristiken, aber 
Fragmentierung wird dadurch nicht verboten, nur unwahrscheinlicher.

Es steht weiter der Satz drin:

"However,
 implementations MUST be able to handle messages up to the maximum
 datagram packet size.  For UDP, this size is 65,535 bytes, including
 IP and UDP headers."

Das heißt also: Fragmentierung ist zu vermeiden, aber sie kann auftreten, 
und dann *muss* es auch funktionieren. Und genau das passiert eben nicht, 
wenn eine Middlebox Fragmente verwirft.

> Im Zusammenhang mit Routern, die fragmentierten UDP-Traffic aus Prinzip
> blocken, ist an einigen Stellen von "braindead routers" die Rede. Das
> scheint ja dann so ähnlich gemeint zu sein.

Ja. Einfaches Wegwerfen von Paketen ist z.B. in Ordnung, wenn es um 
Überlaststeuerung (congestion control) von Paketströmen (z.B. bei TCP) geht, 
wenn man davon ausgehen kann, dass das Paket später nochmal verschickt 
werden wird, wenn die Leitung nicht mehr "zu" ist. Wegwerfen von Paketen, 
nur weil ein Bit gesetzt ist, das nur selten verwendet wird, ist fahrlässig 
und/oder paranoid. Schließlich kann es Anwendungen geben, die genau dieses 
Bit benötigen. Und es ist egal, ob es Fragmente bei IP, Urgent Data bei TCP 
oder Funktion X bei Protokoll Y ist -- solange die RFCs eine solche 
Verwendung erlauben, sollte sich ein Router dem nicht widersetzen (natürlich 
nur, wenn er vom Benutzer nicht explizit angewiesen wurde, genau dies zu 
tun).

Ich wüsste in dem Zusammenhang auch gerne, wie man auf maximal 1628 Byte 
kommt -- Ethernet-MTU (1500) + 128?


Viele Grüße,
-- 
Christoph Schulz
[fli4l-Team]



Mehr Informationen über die Mailingliste Fli4L