
Netzverzögerungen haben einen erheblichen Einfluss auf die Leistung von Anwendungen oder Diensten, die mit dem Netzwerk interagieren. Je geringer die Verzögerungen, desto höher die Leistung. Dies gilt für jeden Netzwerkdienst, von einer einfachen Website bis hin zu einer Datenbank oder einem Netzwerk-Speicher.
Ein gutes Beispiel hierfür ist das Domain Name System (DNS). DNS ist von Natur aus ein verteiltes System, dessen Wurzelknoten über den gesamten Globus verteilt sind. Um eine Website zu besuchen, muss man zunächst ihre IP-Adresse ermitteln.
Ich werde den gesamten Prozess des rekursiven Durchlaufs durch den "Baum" der Domainzonen nicht im Detail beschreiben, sondern auf die Tatsache eingehen, dass wir einen DNS-Resolver benötigen, um die Domain in eine IP-Adresse umzuwandeln, der all diese Arbeit für uns erledigt.
Woher bekommt man nun die Adresse des DNS-Resolvers?
- Der Internetanbieter stellt die Adresse seines DNS-Resolvers zur Verfügung.
- Die Adresse eines öffentlichen Resolvers im Internet suchen.
- Einen eigenen Resolver aufsetzen oder den in Ihrem Heimrouter integrierten verwenden.
Jede dieser Optionen ermöglicht es, sorglos im Internet zu surfen. Wenn Sie jedoch eine große Anzahl von Domains in IP-Adressen umwandeln müssen, sollten Sie die Auswahl des Resolvers sorgfältiger treffen.
Wie bereits erwähnt, gibt es neben dem Resolver des Internetanbieters viele öffentliche Adressen. Zum Beispiel können Sie mit dieser Liste bekanntmachen. Einige von ihnen könnten viel bevorzugter sein, da sie eine bessere Netzwerkverbindungen bieten als der „Standard“-Resolver.
Wenn die Liste klein ist, kann man sie leicht von Hand „pingen“ und die Latenzzeiten vergleichen. Aber wenn man auch nur die oben erwähnte Liste betrachtet, wird diese Aufgabe schon unliebsam.
Um diese Aufgabe zu erleichtern, habe ich mit einem Selbstzweifel-Syndrom ein Go-Proof-of-Concept für meine Idee mit dem Namen .
Ich werde als Beispiel nicht die gesamte Liste der Resolver prüfen, sondern mich nur auf die bekanntesten beschränken.
$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Nächste Hosts:
1.0.0.1 [3.4582ms]
8.8.8.8 [6.7545ms]
1.1.1.1 [12.6773ms]
8.8.4.4 [16.6361ms]
9.9.9.9 [40.0525ms]
Zu der Zeit, als ich nach einem Resolver suchte, beschränkte ich mich nur darauf, die gängigen Adressen zu überprüfen (1.1.1.1, 8.8.8.8, 9.9.9.9) – schließlich sind sie so ansprechend, und was kann man von den weniger attraktiven Backup-Adressen erwarten?
Aber wenn es jetzt einen automatisierten Weg gibt, um die Latenzen zu vergleichen, warum nicht die Liste erweitern...
Wie der Test gezeigt hat, ist die „Backup“-Adresse von Cloudflare für mich besser geeignet, da sie im spb-ix steckt, der für mich viel näher ist als der msk-ix, in dem die schöne 1.1.1.1 steckt.
Der Unterschied ist, wie Sie sehen, erheblich, denn selbst der schnellste Lichtstrahl kann es nicht schaffen, von St. Petersburg nach Moskau in weniger als 10 ms zu gelangen.
Neben dem einfachen Ping bietet das PoC auch die Möglichkeit, Latenzen über andere Protokolle wie HTTP und TCP zu vergleichen sowie die Zeit, die benötigt wird, um Domains in IPs über einen bestimmten Resolver aufzulösen.
Geplant ist eine Aufgabe, um die Anzahl der Knoten zwischen den Hosts mithilfe von Traceroute zu vergleichen, um Hosts einfacher zu finden, zu denen ein kürzerer Weg besteht.
Der Code ist noch roh, es fehlen viele Überprüfungen, aber er funktioniert ganz ordentlich mit sauberen Daten. Über jedes Feedback wäre ich dankbar, Sterne sind willkommen. , und wenn jemand die Idee des Projekts mag, ist er herzlich eingeladen, sich als Contributor zu beteiligen.
Quelle: habr.com
