Forum: Mikrocontroller und Digitale Elektronik TCP Stack: Fragmentierung u. Abarbeitung


von Bernd S. (mms)


Lesenswert?

Hallo,

ich möchte gern einen TCP Stack ohne Betriebssystem installieren - hab 
mir den uIP schon näher angeschaut. Jedoch habe ich einige fragen 
(allgemeiner Art):

ich möchte gern die IP Fragmentierung zulassen - wie groß sollte dann 
mein Buffer gewählt werden bzw. wielange wartet man auf ein noch 
fehlendes Paket (wenn die Pakete aufgrund von Routern etc. in 
unterschiedlicher Reihenfolge ankommen)? Gibt es da auch entsprechende 
Zeiten wie beim ACK vom TCP Protokoll?

Sobald ein Paket angekommen ist, wird die entsprechende Funktion 
ausgeführt, in der der Header auf IP oder ARP u.a. untersucht wird. 
Danach geht es immer weiter nach oben (im OSI Modell) - wartet man 
solange mit der Abarbeitung des nächsten ankommenden Frames, bis das 
erste komplett abgearbeitet wurde? Oder verwendet man Semaphoren 
(Zugriffsschutz) und Mailboxen (asynchrone Abarbeitung), um 
"gleichzeitig" mehrere Frames bearbeiten zu können? Gibt es hier noch 
andere Mechanismen die eingesetzt werden (und performance-mäßig für 
einen ARM gut sind)?

Bernd

von Andreas K. (a-k)


Lesenswert?

"Man" macht beides, je nach Anwendung und Stack.

uIP und U.Radigs Variante sind eher simpel gestrickt, eins kommt nach 
dem anderen. Schon allein deshalb, weil sich alles in einem einzigen 
Framebuffer abspielt. Braucht dafür kaum RAM.

Ethernut wiederum ist "klassisch". Normalen Betriebssystem vergleichbar 
sind mehrere Prozesse parallel zu Gange. Weshalb Ethernut eben auch 
gleich ein RTOS mitbringt. Nachteil ist der grosse RAM-Verbrauch, der 
oft externes RAM erfordert.

Bist du schon einmal über das Fragmentierungsproblem gestolpert?

Was das konkrete Verhalten von TCP/IP angeht: Es gibt diverse RFCs. 
Nicht nur die zu TCP und IP und ... sondern auch ein paar, die sich dem 
erwarteten Verhalten widmen. Das wären insbesondere 1122 und 1123.

von Bernd S. (mms)


Lesenswert?

>Bist du schon einmal über das Fragmentierungsproblem gestolpert?

es wird auf jeden fall so sein, dass nicht alle pakete hintereinander in 
der gleichen Reihe wie sie losgeschickt werden auch ankommen... von 
daher tritt diese thematik auf jeden fall irgendwann auf.

>sondern auch ein paar, die sich dem erwarteten Verhalten widmen. Das
>wären insbesondere 1122 und 1123.

das hab ich jetzt nicht ganz verstanden.

Bis jetzt hab ich 8 Buffer für ankommmende Pakete, die nach einander 
beschrieben werden und anschließend gehts von vorne los. Die Idee mit 
den Pointern / Strukturen auf diese Buffer würde ich auch machen.

Bernd

von Simon K. (simon) Benutzerseite


Lesenswert?

Bernd Schuster wrote:
>>Bist du schon einmal über das Fragmentierungsproblem gestolpert?
>
> es wird auf jeden fall so sein, dass nicht alle pakete hintereinander in
> der gleichen Reihe wie sie losgeschickt werden auch ankommen... von
> daher tritt diese thematik auf jeden fall irgendwann auf.

Nunja, wenn du eh den uIP Stack beispielsweise benutzt, dann wird die 
Max. Segment Size für die hereinkommenden Pakete eh mit der Größe des 
Buffers angegeben, den du auf dem Mikroprozessor zur Verfügung stellst. 
Sind dies beispielsweise nur 1500Bytes, so wird der Gegenspieler (zum 
Beispiel Rechner) immer nur 1500Bytes schicken und auf ein ACK vom 
Mikrocontroller warten.

Hier ist also nicht anzunehmen, dass Pakete "durcheinander" ankommen.

von Bernd S. (mms)


Lesenswert?

diese thematik möchte ich ja gern bei dem uIP ändern... sprich mehrere 
Buffer - fragt sie nur halt wieviele oder wie lange auf solche fehlenden 
Pakete gewartet wird.

Bernd

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.