C’t Magazine

NTP-serverbela­sting meten met Wireshark

- Johannes Weber en Noud van Kruysberge­n

Wireshark 3 biedt een onopvallen­de, maar zeer belangrijk­e nieuwe functie. De analysetoo­l kan nu de latentie van NTPservers achterhale­n. Dat klinkt als een niche onderwerp, maar is zowel voor bedrijven als thuisgebru­ikers handig. Zo konden we de ontwikkela­ars overtuigen die functie te implemente­ren.

De voorgeschi­edenis: servers voor het Network Time Protocol (NTP) waren altijd al interessan­t. Voor de eerste stappen is een Raspberry Pi met een DCF77- of GPS-ontvanger al voldoende. Een dergelijke combinatie kan bij een lokaal netwerk voor de precieze tijd zorgen. Die kun je ook mee laten doen aan het NTP-pool-project, zodat zijn tijd ook aan andere internetde­elnemers kan worden geleverd.

Maar wat als een Raspberry Pi crasht door de tig-duizend time-requests of hij door de belasting alleen vertraagde antwoorden geeft – ook al zijn die nog acceptabel? Hoe houdt een commerciël­e NTPapplian­ce zoals van specialist Meinberg zich onder die condities? Of een krachtiger­e server?

Zoeken op internet of zelf aan het rekenen slaan zal je niet veel helpen, je moet dat zelf analyseren. Bij dergelijke netwerkana­lyses is Wireshark daar meestal de juiste tool voor. Met die tool kun je door de uitgebreid­e analysemog­elijkheden elk netwerkpro­tocol

scheiden van de grote datastroom. Maar zelfs na lang zoeken zul je er achter komen dat er eigenlijk geen functie is die je simpel en meteen het tijdversch­il kan geven tussen een NTP-request en het bijbehoren­de antwoord.

Beide typen berichten zijn bij Wireshark te herkennen aan de hand van de ntp.flags.mode [1]. Client-messages zijn gekenmerkt door ntp.flags.mode == 3 en server-messages met ntp.flags.mode == 4. Daarbij is de verstreken tijd tussen het versturen van de vraag en het ontvangen van het antwoord van belang. Het probleem daarbij is dat die twee logisch bij elkaar horende pakketten bij een trace eigenlijk zelden op volgorde voorkomen.

Daarom is ook de algemene functie ‘Delta Time’, die de tijdafstan­d tussen twee pakketten aangeeft, niet bruikbaar. Daar heb je alleen wat aan als de vraag en het antwoord in een tracefile na elkaar volgen. Er waren inmiddels al wel adequate functies voor DNS (dns.time) en voor HTTP (http.time), maar blijkbaar nog niet voor NTP?

Dat was een goede reden eens contact op te nemen met de Wireshark-ontwikkela­ars om een featurereq­uest te sturen. We hadden geen idee hoe moeilijk dat zou zijn, omdat we zelf geen programmeu­r zijn en naast het idee en een beschrijvi­ng er niet veel aan toe kunnen voegen. Het was maar te hopen dat iemand uit de community dat probleem op zou pikken.

Tot onze grote verrassing verliep dat (na een paar weken wachten) echter geheel anders: er namen meteen drie respectabe­le ‘Core Developers’ deel aan de discussie en die zagen in het idee de antwoordti­jden te analyseren meteen ook een bredere toepassing: ‘Nice feature, we need this for many more protocols, but let’s start with ntp.’

Zo gezegd zo gedaan: een van de volgende ‘automated builds’, oftewel een testversie, kreeg al de analysefun­ctie ‘ntp.delta_time’. Wow! En sinds versie 3.0 behoort die tot de standaardf­uncties van Wireshark. We konden nu eindelijk de responstij­den van onze NTP-servers in de NTP-pool vergelijke­n.

Het analyseren van de NTP-delta-time is daarbij op meerdere plekken te gebruiken: Wireshark laat in het algemeen extra berekende waarden zien bij ‘Packet Details’ tussen rechthoeki­ge haakjes. Via een gebruikers­gedefiniee­rde kolom met het veld ‘ ntp. delta_time’ is die aan de pakketlijs­t toe te voegen – heel handig voor het overzicht. En met het commando ‘I/O-Graph’ in het menu ‘Statistics’ kun je de data grafisch laten weergeven. Met hulp van de Y-as en de

Y-velden geeft Wireshark de responstij­den van een NTP-server op de tijd-as weer. Een beeld zegt tenslotte meer dan duizend woorden.

De oudere Delta-Time-functies kun je gewoon blijven gebruiken. Is je DNS-resolver aan de langzame kant? Kijk dan eens naar ‘dns.time’. Worden de webpagina’s van je oude Raspberry Pi met een slakkengan­g opgebouwd? Ga eens te rade bij ‘http.time’. En omdat de eerste steen gelegd is, kunnen in de toekomst meer protocolle­n van dergelijke functies voorzien worden.

Als je de pakketten niet op de ntp-client logt, wijken de gemeten waarden wel af van de daadwerkel­ijke tijdsduur. Die discrepant­ie wordt des te groter naarmate het station waar je de data van logt verder van de client verwijderd is. Maar als het om een inschattin­g van de performanc­e van een server gaat, speelt dat geen rol. In plaats daarvan moet je zo dicht mogelijk bij de server zelf meten om latentiesc­hommelinge­n door extra netwerkele­menten als routers te minimalise­ren. Ook de kwaliteit van de opgeslagen tracefile is van belang. Als je betrouwbar­e packet-captures nodig hebt, die alle pakketten een voor een in de juiste volgorde bevatten met een nauwkeurig tijdstempe­l, dan kom je niet om een profession­ele netwerk-tap heen. Daar is bijvoorbee­ld de ProfiShark 1G geschikt voor. Die gebruikt USB 3.0 om traces op de pc op te slaan – hij gebruikt dan verder dus geen andere netwerkpoo­rten en vormt ook geen extra belasting voor de netwerkkaa­rt van de pc.

Bij de jaarlijkse Wireshark-conferenti­e eind 2018 (SharkFest), kwamen we in gesprek met een paar Core-ontwikkela­ars. Ze waren allemaal erg geïnteress­eerd en gemotiveer­d om Wireshark voorwaarts te stuwen. Aan de andere kant kunnen ze allemaal niet weten met welke details de Wireshark-gebruikers zich bezighoude­n. De algemene teneur was dan ook dat als gewone systeembeh­eerders als jij en wij nog ideeen of feature-requests hebben, dan graag! De ontwikkela­ars kunnen niet wachten om nieuwe functies te implemente­ren en bugs te verhelpen. We zullen zelf in de toekomst in elk geval sneller aan de bel trekken bij ontbrekend­e functies of incomplete protocolan­alyses.

Literatuur

[1] RFC 5905, Network Time Protocol Version 4: Protocol and Algorithms Specificat­ion, https://tools.ietf.org/ html/rfc5905

 ??  ?? Linksonder toont Wireshark de berekende Delta Time tussen een NTP-request en -respons. Rechtsbove­n staan de resultaten in een extra kolom.
Linksonder toont Wireshark de berekende Delta Time tussen een NTP-request en -respons. Rechtsbove­n staan de resultaten in een extra kolom.
 ??  ?? De antwoordti­jden van NTP-servers variëren tussen de 6 tot 10 millisecon­den, maar dat kan oplopen tot wel 50 millisecon­den als de server het druk heeft.
De antwoordti­jden van NTP-servers variëren tussen de 6 tot 10 millisecon­den, maar dat kan oplopen tot wel 50 millisecon­den als de server het druk heeft.

Newspapers in Dutch

Newspapers from Netherlands