www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik tcp/ip-stack vorgehensweise bei konfiguration


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nach welcher groben verfahrensweise schreibt man einen tcp/ip-stack?

1. socket installieren
2. IP konfigurieren
3. ARP und ICMP
4. ... weitere protokolle

und wenn das alles installiert worden ist nach der reihe geht man dann 
einfach in die while(1) schleife der main-routine und wartet bis ein 
entsprechender interrupt auftritt?

Ich hab mir schon ein paar stacks angeschaut - jedoch werden oft 
unterschiedliche verfahren durchgeführt...

Vll. kann mir jmd sagen, was am anfang alles installiert werden muss und 
wo der interrupt beginnen muss, wenn ein neues ip-paket ankommt oder 
gesendet werden soll?

Bernd

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von unten nach oben, würde ich sagen. TCP/IP ist in mehreren Layern 
aufgeteilt. Ich würde mit der untersten Schicht anfangen.

Ich würde erstmal versuchen auf unterster Ebene ICMP-Nachrichten zu 
verschicken, zu empfangen und auszuwerten. Zum Beispiel einer 
Sync-Nachricht an eine IP-Adresse, die der Router nicht kennt und mit 
einer Unreachable-Nachricht beantworten müsste....

Da du offensichtlich mit Begriffen wie "Interrupts" noch nichts 
anzufangen weisst, würde ich erstmal ganz einfaches Polling vorschlagen.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch mit interrupts kann ich schon was anfangen und hab ich auch schon 
programmiert... und "von unten nach oben" ist mir auch klar...

nur die art wie man das programmiert, ist mir nicht ganz klar... sind 
das wirklich einzelne Funktionen, die nach einander aufgerufen werden zu 
beginn bis alles initialisiert worden ist?

Und während das programm in der while(1) schleife läuft im 
main-programm, werden neue pakete durch interrupts erkannt und dann die 
entsprechenden funktionen aufgerufen? Normalerweise soll ja ein solcher 
interrupt sehr kurz gehalten werden, aber wenn ein interrupt dann daraus 
besteht, dass erst erkannt werden muss ob das paket auch wirklich für 
einen ist, das paket bis zur eigentlich information entpackt werden muss 
- dauert das doch schon etwas länger....

wie man das richtig effektiv programmiert, hab ich noch nicht ganz 
verstanden...

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
werden z.B. auch zuerst alle Protokolle die man so einsetzen möchte 
initialisiert und abschließend als letzte Aktion erst der Ethernet PHY 
aktiviert?

Bernd

Autor: Martin C. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernd,

wahrscheinlich würde ich ein Multitasking-Betriebssystem dazu einsetzen.

Die Interruptroutine nimmt nur das Paket entgegen, aktiviert die 
Netzwerktask und ist dann schon fertig.

Die Netzwerktask kümmert sich um das Paket, nimmt es auseinander und 
baut eine passende Antwort zusammen. Die Antwortpakete werden in eine 
Warteschlange gelegt und nach und nach von einer anderen 
Interruptroutine verschickt.
Main() kann in der Zeit weiter warten und vielleicht auf bestimmte 
Ergebnisse aus der Kommunikation reagieren.

Gruß,
Martin

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für mich macht es den anschein, als wenn hier ziemlich wenig 
Programmiererfahrung vorhanden ist. Macht es sinn gleich mit der 
implementierung eines TCP/IP-Stacks anzufangen? Meiner Meinung nach 
nicht.

Meine persönliche Herrangehensweise ist immer Stückchen für Stückchen 
und irgendwann setzt sich das Puzzle automatisch zusammen. Die Frage 
nach Reihenfolge, wie man was initialisiert und aktiviert stellt sich am 
Anfang einfach nicht. Ausserdem ist sie abhängig von der eingesetzten 
Hardware.

Überlicherweise funktionieren Interrupt-gesteuerte Kommunikation über 
sog. Ringbuffer: Eine Interruptroutine schreibt die empfangenen Daten in 
einem Buffer und signalisiert dem vordergrundprozess, daß es etwas zu 
tun gibt..

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die Interruptroutine nimmt nur das Paket entgegen, aktiviert die
>Netzwerktask und ist dann schon fertig. Die Netzwerktask kümmert sich um >das 
Paket, nimmt es auseinander und baut eine passende Antwort zusammen.

d.h. der erste interrupt macht seine tasks - paket entgegennehmen und im 
speicher sichern -  und ruft zum schluss in form eines weiteren 
interrupts  -  xyz Bit setzen die nächste task auf und wird danach 
beendet?

Diese Task nimmt dann das Paket auseinander und jedes Protokol holt sich 
seinen teil über einen pointer ab. Antworten werden generiert und durch 
Interrupt angezeigt, dass diese versendet werden können.


>Die Reihenfolge, wie man was initialisiert und aktiviert stellt sich am
>Anfang einfach nicht.

versteh ich leider nicht? Man macht sich doch zuvor gedanken wie man was 
aufbauen möchte und arbeitet sich dann step by step durch?

Bernd

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Schuster wrote:

>>Die Reihenfolge, wie man was initialisiert und aktiviert stellt sich am
>>Anfang einfach nicht.
>
> versteh ich leider nicht? Man macht sich doch zuvor gedanken wie man was
> aufbauen möchte und arbeitet sich dann step by step durch?

Wenn man noch nicht mal nen Plan hat, wie die Kommunikation 
funktioniert, finde ich es absolut unsinnig sich zu diesem Zeitpunkt 
Gedanken zu einer Funktionaltät zu machen, der in astrologisch weiter 
Ferne liegt....

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wählt man sich eigentlich die MAC Adresse selber aus? Oder steht die 
irgendwo? welche der Chip aufweist?

Bernd

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahlweise. Die Mac-Adresse kann man entweder selber generieren (auf 
validität achten) oder man nimmt die Mac-Adresse, die nahezu jeder 
Ethernet Kontroller gespeichert hat. Ich empfehle Letzteres.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie bekommt man diese MAC Adresse heraus?

kann man diese mit EMAC_SA1L etc. auslesen?

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was genau ist eine EMAC Hash Address 64Bit groß und wozu benötigt man 
diese? Wird hierdurch die MAC Adresse geschützt / verschlüsselt 
übertragen?


Des Weiteren kann mein µController bis zu vier verschiedene MAC Adressen 
in den folgenden REgistern speichern.

EMAC specific Address 1 Low, First 4 Bytes
EMAC specific Address 1 High, Last 2 Bytes
EMAC specific Address 2 Low, First 4 Bytes
EMAC specific Address 2 High, Last 2 Bytes
EMAC specific Address 3 Low, First 4 Bytes
EMAC specific Address 3 High, Last 2 Bytes
EMAC specific Address 4 Low, First 4 Bytes
EMAC specific Address 4 High, Last 2 Bytes

Ich hab mal von einem Verfahren gelesen, welches sich dann stets die 
passende MAC raussucht oder nach einer gewissen zeit diese ändert, wegen 
Angriffen etc. Und von irgendwo holt sich das Gerät die neuen MAC 
adressen ab und löscht gleichzeitig die älteste aus dem system.

Weiß da jmd noch mehr zu diesem Thema?

Bernd

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EMAC? Vieleicht solltest du mal deine Quellen offenlegen.....

Die Mac-Adresse kann man in der Regel ganz normal aus dem Speicher des 
Kontrollers auslesen. Wie und Wo die zu lesen ist hängt von der 
eingesetzen Hardware ab...

Das mit den sich wechselnden MacAdressen sind Sicherheitsthemen die dich 
am Anfang nicht ablenken dürfen und erstmal bei Seite packen solltest..

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AT91RM9200 verwende ich als 
http://www.atmel.com/dyn/products/product_card.asp...

EMAC bedeutet nur ethernet mac interface oder so ähnlich also nichts 
spezielles...

>Die Mac-Adresse kann man in der Regel ganz normal aus dem Speicher des
>Kontrollers auslesen. Wie und Wo die zu lesen ist hängt von der
>eingesetzen Hardware ab...

hmmm hab ich jetzt beim durchlesen des Ethernet Teils nichts gelesen, 
dass irgendwo die mac adresse hinterlegt sei...

Berndd

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.