Forum: Mikrocontroller und Digitale Elektronik IP-Stack und DNS auf ARM


von Werner B. (Gast)


Lesenswert?

Hallo,
ich habe mir ein Mikrocontrollerboard gebaut mit einem LPC2378. Das 
Board möchte ich nun mit dem Ethernet verbinden (PHY und so weiter ist 
natürlich drauf).
Ich habe hier bereits gelesen, dass ich dazu einen IP-Stack benötige 
(?).
Diese möchte ich natürlich selber programmieren; meine Frage hierzu: wo 
soll ich anfangen? Ich möchte, dass mein Controller Interruptgesteuert 
Pakete empfangen kann, und diese dann richtig verarbeitet.
So, und noch gleich eine Frage: ich möchte die Software auf dem Board so 
bauen, dass ich das Board aus dem LAN über einen Hostnamen, und nicht 
über die IP ansprechen kann. Die IP weiss ich ja nicht, da das Board 
natürlich DHCP verwenden wird. So, um jetzt Hostnamen in IP-Adressen 
auflösen zu können, muss ich DNS implementieren. Aber, was kommt denn 
bei meinem Board an, wenn ich auf dem PC eingebe "ping test" ? kommt da 
ein DNS-Paket an, oder wie oder was. Und was steht da drin, und wie muss 
ich es beantworten?
Dazu habe ich nichts schlaues gefunden; Wikipedia ist da ein bisschen 
kryptisch....

von Benjamin S. (recycler)


Lesenswert?

1. IP-Stacks sind nicht ganz trivial. wenn dann schau dir den von urlich 
radig mal für den atmel an.

2. das mit dem dhcp und ip läuft ein wenig anders.
dein board hat immer eine ip. den namen weiß der dns server, den du 
anfragen kannst vom pc aus. soll das dynamisch gehen, muss der dhcp 
server dem dns server mitteilen, dass der name test.lan auf 192.168.0.42 
zeigt. das hat mit deinem board so nicht zu tun.
dns musst du in dem sinn nur implementieren, wenn du auf einen anderen 
host zugreifen willst bzw deine ip erfahren, die du aber sowieso weißt. 
wenn dann brauchst du dns auf dem anderen ende der kommunikation zb wenn 
du mit einem pc auf dein board zugreifen willst. das ganze wird dann 
umgewandelt in eine ip und mit der läuft die kommunikation.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Das Board möchte ich nun mit dem Ethernet verbinden
> (PHY und so weiter ist natürlich drauf).

> Ich habe hier bereits gelesen, dass ich dazu einen IP-Stack
> benötige (?).

Im Prinzip nein, aber ...

Um über Ethernet mit einem Gerät zu kommunizieren, bedarf es keines 
IP-Stacks, man kann auch direkt Ethernet-Pakete versenden und empfangen.

Auf dieser Ebene wird die sogenannte MAC-Adresse Deines Boards 
verwendet.

TCP/IP ist ein Protokoll, das (unter anderem) auf Ethernet verwendet 
werden kann und viel vom Verwaltungsaufwand einspart.
Um das nutzen zu können, benötigtst Du einen IP-Stack.

> Diese möchte ich natürlich selber programmieren;
> meine Frage hierzu: wo soll ich anfangen?

Indem Du es sein lässt und einen verfügbaren IP-Stack verwendest. Ein 
IP-Stack ist alles andere als trivial, so etwas programmiert man sich 
nicht mal eben selbst, vor allem, wenn man mit der Materie noch nie 
vorher zu tun hatte.

Damit Dein Board eine IP-Adresse automatisch zugewiesen bekommen kann, 
musst Du zusätzlich zum IP-Stack einen DHCP-Client implementieren.

Dieser fordert beim DHCP-Server (den es irgendwo in Deinem Netzwerk 
geben muss) eine IP-Adresse an.

In Heimnetzwerken ist das oft eine vom Router übernommene Funktion.

Für die Namensauflösung wird ein Protokoll namens DNS verwendet. Im o.g. 
Heimnetzwerkfall wird das üblicherweise ebenfalls vom Router übernommen, 
der bei Namensanfragen in der von ihm verwalteten Liste lokaler Geräte 
nachsieht und bei Nicht-Auffinden des Namens den übergeordneten 
DNS-Server des Providers kontaktiert.

Im von Dir beschriebenen Modell (PC will Dein Board unter dem Namen 
"test" ansprechen) ist es ganz und gar nicht erforderlich, daß Dein 
Board etwas von DNS versteht, das müsste es nur, wenn es im Gegenzug 
Deinen PC über seinen Namen ansprechen wollte.

Du musst nur dafür sorgen, daß Dein Board per DHCP-Request eine 
IP-Adresse reserviert und dabei seinen Namen bekanntgibt.

Als ersten Schritt aber würde ich eine statische IP-Adresse verwenden 
und diese als statische DHCP-Lease in Deinem Router eintragen (sofern 
der das zulässt). Dann kann Dein PC nach wie vor nach "test" fragen, 
aber Du musst noch nicht gleich einen DHCP-Client implementieren.

Auch einen DCHP-Client solltest Du nicht selberprogrammieren, sondern 
auf eine der unzähligen fertig verfügbaren freien Lösungen 
zurückgreifen.

Das reduziert die Fehlermöglichkeiten ganz drastisch.

von Helmut L. (helmi1)


Lesenswert?

Du kannst aber auch einen fertig in Hardware gegossenen TCP/IP Stack 
verwenden.

Schau mal auf der Seite von Wiznet. Da gibt es ein paar Ethernet TCP/IP 
Controller die den ganzen TCP Stack schon implementiert haben.

Gruss Helmi

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.