Forum: Compiler & IDEs NTP/SNTP-Request failed


von Morph (Gast)


Lesenswert?

Hallo miteinander!

Die Grundlage meines Projektes bildet ein AT90CAN128 mit dem 
Ethernet-Controller WiZ810MJ. Bisher funktioniert alles wunderbar. 
DNS-Auflösung klappt. Die Kommunikation über Ethernet mit den 
Software-Modulen funktioniert auch wunderbar.

Eine unabdingbare Grundlage für das Projekt, ist eine aktuelle Uhrzeit. 
Diese soll mit Hilfe von NTP/SNTP synchronisiert werden. Das Problem 
hierbei ist, dass ich kein Response bekomme ... Ja, wahrscheinlich mach 
ich was falsch. Ich steh nur momentan total auf dem Schlauch, woran es 
liegen könnte. Ich sitzte schon 3 Tage an diesem Prob und komm nicht 
weiter. Vllcht kann hier mir ja wer auf die Sprünge helfen ;).

Den NTP/SNTP-Request bau ich wie folgt auf:
1
  uint8_t txbuffer[52];
2
  uint8_t *ptr;
3
4
  ptr = &txbuffer[0];
5
  *ptr++ = 0xdb;   // ntp hdr flgs
6
  *ptr++ = 0x0;   // stratum
7
  *ptr++ = 0x04;  // poll-intervall
8
  *ptr++ = 0xfa;  // precision
9
  // root-belay 32bit
10
  *ptr++ = 0x0;
11
  *ptr++ = 0x1;
12
  *ptr++ = 0x0;
13
  *ptr++ = 0x1;
14
15
  for (uint8_t i=8;i<52;i++) *ptr++=0; // zero rest of data
16
        // Send packet
17
  wiznet_open_writebuffer(socket);
18
  for (uint8_t i=0;i<52;i++){
19
    wiznet_write_writebuffer(socket, txbuffer[i]);
20
  }
21
  wiznet_close_writebuffer(socket);

Die Pakete werden an den UDP-Port: 123 gesendet.

Die Versuche von den folgenden 3 NTP-Servern eine Antowrt zu erhlaten, 
ware leider bisher vergebens:

ptbtime1.ptb.de
time.nist.gov
ts1.univie.ac.at

so far so long
mfg & voller hoffnung
-Morph

von doc (Gast)


Lesenswert?

Also, versenden kann man an die NTP-Server so ziemlich alles, nur die 
Flags müssen passen, damit sie antworten.

D.h. nur das erste Byte muss != 0 sein.
Am verschicken liegts daher vermutlich weniger... wobei, mit dem 
Wiznet-Kram kenne ich mich nicht aus.

Ich seh auch nirgendswo einen Empfangsteil..

von doc (Gast)


Lesenswert?

Wobei..hm.. 52 Byte ? Beim versenden reichen 48 Byte, soweit ich weiss..

von Morph (Gast)


Lesenswert?

oh menno ...thx, das stimmt... 48bytes sind ausreichen. ich hab k.a. wie 
ich auf 52 gekommen bin ... wer zählen o. lesen kann ist halt klar im 
vorteil *gell :D

jetzt bekomm ich auch von jedem der 3 server eine 56-byte lange antwort 
*jippi

den empfangsteil hatte ich bisher noch gar nicht ... ich hab nur erstmal 
überhaupt auf ein antwortpaket gewartet ...

jetzt bin ich dabei die antwort auszuwerten, wozu ich auch gleich noch 
eine frage habe. im antwort-paket sind ja 4 zeitstempel enthalten. ein 
zeitstempel davon ist der transmit-timestamp. der zeitstempel 
repräsentiert doch den zeitpunkt, an dem die antwort seitens des servers 
abgesendet wird oder?!

ein zeitstempel besteht jeweils aus 64Bit (ersten 32Bit geben die 
vergangenen Sekunden seit dem 1.1.1900 0:00 UTC an, die folgenden 32Bit 
geben den sekundenbruchteil an.) wenn man jetzt die zeit vernachlässigt, 
die das paket vom server zum client unterwegs war, dann müssten doch 
ersten 32Bit die vergangenen Sekunden seit dem 1.1.1900 0:00 UTC 
repräsentieren oder irr ich da?!

von Morph (Gast)


Lesenswert?

so ich habs nun, thx @doc dass du mir auf die sprünge geholfen hast :) 
...

mfg morph

von debugger (Gast)


Lesenswert?

Stehe momentan vor einer ähnlichen Aufgabe :
Die aktuelle Zeit soll von einem ntp-Server abgerufen werden.
Das klappt auch grundsätzlich, aber der ntp-Server (ptbtime1.ptb.de) 
antwortet in ca. der Hälfte der Fälle nicht innerhalb von 3 Sekunden auf 
die Anfrage (länger warte ich nicht).

Was habt ihr für Erfahrungen gemacht ?

- Ist es normal, dass nicht immer eine Antwort kommt ?
- Was macht ihr bei fehlender Antwort ? (länger warten, ggf. wie lange 
?, nochmal beim gleichen Server probieren, bei einem anderen Server 
anfragen, Kombilösung ?)
- welche ntp-Server antworten nach Eurer Erfahrung am schnellsten ?

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.