Forum: Mikrocontroller und Digitale Elektronik Merkwürdiges Problem mit NE2000 Netzwerkkarte


von Simon K. (simon) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Mittlerweile läuft meine Netzwerkkarte an einem ATMega644 weitgehend 
problemlos. Allerdings ist mir doch noch was verdammt merkwürdiges 
aufgefallen.

ARP und PING (als ICMP Bestandteil) sind bereits realisiert. Pinge ich 
die Karte an, wird der ARP Request und der nachfolgende ICMP Echo 
Request beantwortet.

Nun habe ich allerdings probiert ein UDP Paket (mit NTP drin) 
loszuschicken. Dabei ergibt sich folgender Fehler:

Es werden von meinem Netzwerkmonitor(Wireshark) die NTP Pakete 
empfangen, die ich mit meinem AVR losschicke. Allerdings variieren die 
Daten innerhalb des Pakets. Komischerweise aber nur an einer bestimmten 
Stelle. Diese Stelle ist die IP-Paketlänge im IP Header. Die richtige 
Paketlänge beträgt 90 bytes (=005A hex). Die zweite (falsche Variante) 
des Paketes hat an dieser Stelle den Wert 76 (=004C hex). Welches Paket 
davon nun empfangen wird, ist purer Zufall. Manchmal kommen nur 
"falsche" Pakete an, manchmal 5 "richtige" direkt hintereinander.

Das allermerkwürdigste ist, dass bevor die Daten wirklich an den 
Datenport am AVR gelegt werden, die Daten im internen Puffer stimmen. 
Die erzeugte Prüfsumme ist somit in beiden Paketen immer gleich. Deshalb 
wird im "falschen" Paket die Checksumme immer als falsch markiert - 
völlig logisch.
Meiner Meinung nach müsste dieser Fehler aber innerhalb der 
Netzwerkkarte auftreten, da die Daten bis vor dem Anlegen an den 
Datenport (wie schon gesagt) sich nicht verändert haben.

richtiges Paket:
1
0000  00 e0 7d 7a 36 41 00 0a  10 20 a0 ff 08 00 45 00   ..}z6A.. . ....E.
2
0010  00 5a aa aa 00 00 80 11  0d b8 c0 a8 00 de c0 a8   .Z...... ........
3
0020  00 02 00 7b 00 7b 00 38  00 00 d9 00 0a fa 00 00   ...{.{.8 ........
4
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
5
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
6
0050  00 00 aa aa aa aa aa aa  aa aa                     ........ ..

falsches Paket:
1
0000  00 e0 7d 7a 36 41 00 0a  10 20 a0 ff 08 00 45 00   ..}z6A.. . ....E.
2
0010  00 4c aa aa 00 00 80 11  0d b8 c0 a8 00 de c0 a8   .L...... ........
3
0020  00 02 00 7b 00 7b 00 38  00 00 d9 00 0a fa 00 00   ...{.{.8 ........
4
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
5
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
6
0050  00 00 aa aa aa aa aa aa  aa aa                     ........ ..

PS: Im Anhang habe ich mal den relevanten Code angehangen.

Ich hoffe mir kann jemand einen Tipp geben. Danke schonmal im Voraus.

von Simon K. (simon) Benutzerseite


Lesenswert?

Hmpf, keiner 'ne Idee? :-/

Wie ich solche undurchsichtigen Probleme hasse.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ohne das ganze jetzt nochmal ungewollt hochzuschieben:

Ich bin jetzt mal auf Nummer Sicher gegangen und hab die Daten, so wie 
sie an den Datenport der NIC gelegt werden über ein Terminal Programm 
ausgeben lassen.
-> Resultat: Das Paket wird 1A, völlig richtig gesendet.
Hier ein Auszug.
1
0000  00 E0 7D 7A 36 41 00 0A  10 20 A0 FF 08 00 45 00 
2
0010  00 5A AA AA 00 00 80 11  0D B8 C0 A8 00 DE C0 A8
3
0020  00 02 00 7B 00 7B 00 38  00 00 D9 00 0A FA 00 00 
4
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
5
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
6
0050  00 00 AA AA AA AA AA AA  AA AA

Im Wireshark siehts wiefolgt aus:
1
0000  00 e0 7d 7a 36 41 00 0a  10 20 a0 ff 08 00 45 00   ..}z6A.. . ....E.
2
0010  00 4c aa aa 00 00 80 11  0d b8 c0 a8 00 de c0 a8   .L...... ........
3
0020  00 02 00 7b 00 7b 00 38  00 00 d9 00 0a fa 00 00   ...{.{.8 ........
4
0030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
5
0040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ........ ........
6
0050  00 00 aa aa aa aa aa aa  aa aa                     ........ ..

Ich fass es langsam nicht mehr. Wo ist der Fehler bitte?! Und warum ist 
der Fehler nur, wenn ich versuche dieses spezielle Paket zu schicken. 
Das kann doch fast nicht wahr sein...

von Simon K. (simon) Benutzerseite


Lesenswert?

PS: Andere Netzwerkkarte - Gleiches Problem. Ich bleib dran!

von Simon K. (simon) Benutzerseite


Lesenswert?

Oh Mann!

Keine Ahnung woran das liegt, dass der Wert verändert wird. Vielleicht 
macht das auch Wireshark. Aber eins habe ich festgestellt: Die 
Paketlänge im IP Header bezieht sich nur auf den IP Teil im Paket, nicht 
auf das gesamte Paket mit Ethernet Header. Nun ists statt 90 nur noch 90 
- 14 = 76. Und siehe da, mein Windows XP schickt sogar NTP Replys und 
der Fehler tauch nun nicht mehr auf.

Endlich weiterarbeiten! Juhu.

Danke für das Durchlesen ;)

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.