NTP gebruiken met de Aduino Leonardo

Geplaatst op

Hoe werkt NTP?

NTP gebruikt UDP/IP-pakketten voor gegevensoverdracht vanwege de snelle verbindingsopbouw en responstijden. Het officiële poortnummer voor de NTP (waar ntpd en ntpdate mee luisteren en praten) is 123. De tijdseenheid is in seconden en het tijdperk is 1 januari 1900.

De NTP-tijdstempel is een 64-bits binaire waarde, opgebouwd uit een niet-ondertekende 32-bits secondenwaarde en een 32-bits fractioneel deel. In deze notatie zou de waarde 3.5 worden weergegeven door de 64-bits string:

0000|0000|0000|0000|0000|0000|0000|0011 . 1000|0000|0000|0000|0000|0000|0000|0000

Als je alle bits neemt als een 64-bits geheel getal zonder teken, het opslaat in een drijvende-kommavariabele met ten minste 64 bits mantisse (meestal dubbel) en een drijvende-komma deelt door 2^32, krijg je de correct antwoord. Op een standaard Arduino hebben we helaas geen 64-bits verdubbelingen, maar de meeste RTC's hebben slechts informatie op het tweede niveau, dus het is niet nodig om de tweede helft (of mogelijk de eerste byte) te krijgen. Alleen de eerste vier bytes van een uitgaand NTP-pakket hoeven te worden ingesteld zijn op wat we willen bereiken

op de juiste manier kan de rest wat dan ook zijn.

De header van het NTP-bericht zijn als volgt:

  • LI Leap-indicator (2 bits)
    • Dit veld geeft aan of er op de laatste minuut van de huidige dag een schrikkelseconde moet worden toegepast. De veldwaarden volgen:
      • 0: geen aanpassing van schrikkelseconden
      • 1: Last-minute van de dag heeft 61 seconden
      • 2: Last-minute van de dag heeft 59 seconden
      • 3: Klok is niet gesynchroniseerd
  • VN NTP-versienummer (3 bits) (huidige versie is 4).
  • Modus NTP-pakketmodus (3 bits)
    • De waarden van het veld Modus volgen:
      • 0: Gereserveerd
      • 1: Symmetrisch actief
      • 2: Symmetrisch passief
      • 3: klant
      • 4: server
      • 5: uitzending
      • 6: NTP-controlebericht
      • 7: Gereserveerd voor privégebruik
  • Stratumniveau van de tijdbron (8 bits)
    • De waarden van het veld Stratum volgen:
      • 0: niet gespecificeerd of ongeldig
      • 1: Primaire server
      • 2–15: secundaire server
      • 16: Niet gesynchroniseerd
      • 17–255: Gereserveerd
  • Poll Poll-interval (8-bits geheel getal met teken)
    • De log2-waarde van het maximale interval tussen opeenvolgende NTP-berichten, in seconden.
  • Precisie Klokprecisie (8-bits geheel getal met teken)
    • De precisie van de systeemklok, in log2 seconden.
  • NTP Eerste vier bytes 0xEC0600E3

Dit is de NTP- header , maar we hebben alleen de eerste 32 bits nodig. We definiëren de NTP-PAKKETGROOTTE, dit is 48 bytes omdat de NTP-tijdstempel zich in de eerste 48 bytes van het bericht bevindt na een succesvolle query, we krijgen een antwoord van 48 bytes van de NTP-server.

Zie voor meer informatie over de structuur van een NTP-query en -antwoord http://www.cisco.com/c/en/us/about/press/internet-protocol-journal/back-issues/table-contents-58/154-ntp.html

Dus als we de "Transmit Timestamp" willen lezen, moeten we het gehele deel lezen dat bytes 40,41,42,43 is als we willen afronden naar de dichtstbijzijnde seconde als we enige nauwkeurigheid willen, dan is het fractionele deel byte 44, 45,46,47 als het groter is dan 500 ms, zal byte 44 > 128 zijn en dus door alleen byte 44 van het antwoord te controleren, kunnen we afronden naar de volgende seconde; 90% van de NTP-servers hebben netwerkvertragingen van minder dan 100 ms

We kunnen ook rekening houden met een veronderstelde gemiddelde netwerkvertraging van 50 ms, en dus in plaats van te vergelijken met 128 kun je vergelijken met (0,5 s - 0,05 s) * 256 = 115;

Huidige pagina 3. Hoe werkt NTP? 1. Invoering 2. Het schematic 3. Hoe werkt NTP? 4. DS3231-module 5. Het LCD-scherm 6. De ESP8266 7. Volledig programma Geschreven door

Reacties

Webwinkelkeur Kiyoh Trustpilot Opencircuit