Re: Probleme mit UDP Broadcast

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Fri, 18 Nov 2005 16:26:29 +0100

On Fri, Nov 18, 2005 at 02:39:55PM +0100, emfau(at)t-online.de wrote:
> >>Wenn die Broadcast-Nachrichten allerdings eine Groesse von 1472 Bytes
> >>ueberschreiten, gibt es den Fehler "Message too long". Das Interfaces,
> >>ueber die die Nachrichten laufen, haben eine MTU von 1500, was nach
> >>meinem Verstaendnis
> >>bedeutet, dass es genau der Punkt ist, ab dem das Paket fragmentiert
> >>werden
> >>muesste, was aber nicht passiert - anstatt gibt es eben besagte
> >>Fehlermeldung.
> >
> >Richtig, das ist genau die Fragmentierungsgrenze:
> >1272 + 20 Byte IP-Header + 8 Byte UDP Header = 1500.
> >Seit 4.2BSD (laut Stevens) ist Fragmentierung für Broadcast UDP
> >nicht erlaubt.
> >Prinzipiel könnte man das zulassen, aber alle Rechner im Netz
> >müssten dazu Fragmente zwischenspeichern, bis die Packete komplett
> >sind und man hat das wohl als schlechten Umgang bei Broadcasts
> >klassifiziert.
> >Laut Stevens wird das auch von AIX, Tru64 und Unixware erzwungen,
> >während Solaris und Linux das erlauben.
> >Wie auch immer - bei *BSD hat das jedenfalls eine lange Tradition.
>
> Danke! Ich hatte es ja schon befuerchte, aber nichts geschriebenes darueber
> gefunden. Bei mir existiert leider nur "Advanced Programming in the Unix
> Environment" von Stevens, wo eben nichts zum Thema Broadcast drinsteht.
> In welchem Band der Steven's Werke hast Du es gefunden?

UNIX Network Programming Vol 1.
Kapitel 18.4 Abschnitt IP Fragmentation and Broadcasts.
Steht aber letzlich auch nicht viel mehr drin, als ich hier
wiedergegeben habe.

> > Ein ziemlich dummes Protokoll IMHO, wenn es derart große UDP Broadcasts
> > braucht...
>
> Ich denke, dass es beim vorliegenden Scenario, d.h. ein privates Subnetz
> mit dedizierten NICs rein fuer "Meta"-Kommunikation zwischen Knoten im
> Cluster, wohl unproblematisch ist.

Im Prinzip ja, evtl. kannst du es dir ja erlauben mit selektierten
Karten und Switches eine größere MTU zu konfigurieren.
Ansonsten musst du am Kernelsource editieren.

In netinet/ip_output.c:
    398 /* don't allow broadcast messages to be fragmented */
    399 if (ip->ip_len > ifp->if_mtu) {
    400 error = EMSGSIZE;
    401 goto bad;
    402 }

Keine Ahnung, ob es noch mehr Prüfungen (z.B. beim Empfang) gibt.

-- 
B.Walter                   BWCT                http://www.bwct.de
bernd(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 18 Nov 2005 - 16:27:56 CET

search this site