Re: příjem NTP ESP8266/32

Dodo Racek dodoracek na gmail.com
Neděle Červenec 24 11:34:19 CEST 2022


Su riesenia, kde nie je nutny absolutne presny cas, ale je nutny *rovnaky*
cas v celej infrastrukture.

Nerobia to len zariadenia cisco, ale routre mnohych inych vyrobcov.

Protokol NTP na to pamata, ale je potrebne trochu chapat suvislosti a nie
iba vybrat 4 Byty z komunikacie.

Dodo

Dňa ne 24. 7. 2022, 0:43 Petr Labaj <labaj na volny.cz> napísal(a):

> Sakryš, to je ale chytrý server, ten Cisco switch.
> Má blbě čas, ale stejně ho vrátí a jenom nastaví nějaký parametr.
>
> Kdysi jsem musel napsat vlastní časový server (s protokolem rdate).
> Tak jsem to udělal jednoduše tak, že dokud neměl od nadřízeného serveru
> přesný čas, tak prostě službu neposkytoval a žádost odmítl.
> Rozumný klient (toho jsem psal taky) má seznam serverů. Tak když jeden
> službu neposkytuje, osloví dalšího.
> Nojo, no. Nejsem tak chytrý jako Cisco.
>
> PL
>
> *********************
>
> Dne 23.7.2022 v 23:20 Dodo Racek napsal(a):
> > Okrem precitaneho casu z paketu sledujte aj stratum.
> > Cim nizsie cislo, tym lepsie. (0- atomove hodiny, 1- synchronizovane
> > voci atomovym hodinam, 2- synchronizovane voci 1, atd...) na internete
> > bezne server bude mat stratum 2-3.
> > Server MUSI mat stratum rovnake cislo.
> > Ak serveru vypadne synchronizacia na presnejsi nadradeny, tak to
> > "oznami" klientom zmenou hodnoty v stratum. Cisla nad 10 sa pouzivaju
> > pre nepresny cas (lokalny oscilator bez synchronizacie), takemu casu
> > sa neveri.
> >
> > Ked sa nejedna o utok, ale o to, ze aj nadradeny server stratil presny
> > cas a oznamuje bludy, tak vam nepomoze ani 1000 nacitani a porovnavani.
> >
> > Ak je NTP server napr. cisco switch, alebo router, tak obycajne nema
> > vlastne HW hodiny. Po zapnuti, alebo reboote oznamuje klientom
> > nezmyselny cas az do chvile, kym sa nezosynchronizuje s nadradenym ntp
> > sevrom. To moze trvat aj 15 min. Oznamuje ale definovanym
> > (nakonfigurovanym) vysokym cislom pre stratum.
> >
> > Voci akemu NTP serveru (FQDN,IP) sa zvyknete synchronizovat?
> >
> >
> > Dodo
> >
> > Dňa so 23. 7. 2022, 21:28 Petr Zapadlo <zapik na email.cz> napísal(a):
> >
> >     Zdravím,
> >
> >     na většině projektů, kde je  třeba   čas, tak ho synchronizuji z NTP.
> >     Občas (třeba  jednou za půl roku) se stane, že ESP získá špatný čas.
> >     Pokusil jsem se to eliminovat  - načítám čas 3x a porovnávám -
> >     použiji
> >     dvě hodnoty, které mají minimální rozestup. (pokud se nesejdou,
> >     tak to
> >     ignoruji a zkouším znova)
> >
> >     Situace se zlepšila, přesto občas k problému dojde. Zdá se, že
> >     četnost
> >     nějak závisí i na kvalitě internetové linky.  U mě doma se to
> >     prakticky
> >     neděje (Metronet, DSL, modem Terminator) , ale u známé se to děje
> >     poměrně často (měsíčně) (O2, DSL, modem ZTE), u syna tak jednou za
> >     půl
> >     roku (kabelovka Vodafone).
> >
> >     Vypadá to, že za nějakých podmínek projde UDP stackem v ESP i paket,
> >     který není v pořádku - asi má i vadný checksum, ale vzhledem k
> >     četnosti
> >     to nejsem schopen nijak ověřit.  Případně projde nesmyslný paket
> >     (ale to
> >     by měl eliminovat požadavek na 2 stejné hodnoty).
> >
> >     Jak se divám do struktury NTP paketu, tak tam už žádný kontrolní
> >     mechanizmus není. (dívám se dobře?)
> >
> >     Základní kus kodu je vzat z mnohokrát opakovaného příkladu:
> >
> >     Poslání paketu:
> >
> >       memset(packetBuffer, 0, NTP_PACKET_SIZE);
> >        // Initialize values needed to form NTP request
> >        // (see URL above for details on the packets)
> >        packetBuffer[0] = 0b11100011;   // LI, Version, Mode
> >        packetBuffer[1] = 0;     // Stratum, or type of clock
> >        packetBuffer[2] = 6;     // Polling Interval
> >        packetBuffer[3] = 0xEC;  // Peer Clock Precision
> >        // 8 bytes of zero for Root Delay & Root Dispersion
> >        packetBuffer[12]  = 49;
> >        packetBuffer[13]  = 0x4E;
> >        packetBuffer[14]  = 49;
> >        packetBuffer[15]  = 52;
> >
> >        // all NTP fields have been given values, now
> >        // you can send a packet requesting a timestamp:
> >        _ntp_udp.beginPacket(timeServerIP, 123); //NTP requests are to
> >     port 123
> >        _ntp_udp.write(packetBuffer, NTP_PACKET_SIZE);
> >        _ntp_udp.endPacket();
> >
> >
> >     Příjem paketu:
> >
> >     _ntp_udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into
> >     the buffer
> >
> >          //the timestamp starts at byte 40 of the received packet and is
> >     four bytes,
> >          // or two words, long. First, esxtract the two words:
> >
> >          unsigned long highWord = word(packetBuffer[40],
> >     packetBuffer[41]);
> >          unsigned long lowWord = word(packetBuffer[42],
> packetBuffer[43]);
> >
> >
> >     Jak zvýšit spolehlivost a eliminovat blbý čas?
> >
> >
> >     Díky
> >
> >     Petr_______________________________________________
> >
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20220724/6b8d9b2f/attachment.htm>


Další informace o konferenci Hw-list