mikrocontroller.net

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


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.