Vyberáme najbližšie uzly v sieti

Vyberáme najbližšie uzly v sieti

Sieťové oneskorenia majú významný vplyv na výkon aplikácií alebo služieb, ktoré komunikujú so sieťou. Čím menšie oneskorenia, tým vyšší výkon. To platí pre akúkoľvek sieťovú službu, od bežnej webovej stránky až po databázu alebo sieťové úložisko.

Dobrou ukážkou je systém doménových mien (DNS). DNS je zo svojej podstaty distribuovaný systém, ktorého koreňové uzly sú roztrúsené po celej planéte. Aby ste sa dostali na akúkoľvek webovú stránku, najskôr je potrebné získať jej IP-adresu.

Nebudem popisovať celý proces rekurzívneho prechodu cez "strom" doménových zón, obmedzím sa na to, že na prevod domény na IP-adresu potrebujeme DNS resolver, ktorý vykoná celú túto prácu za nás.

Takže, kde získať adresu DNS resolvera?

  1. Internetový poskytovateľ poskytuje adresu svojho DNS resolvera.
  2. Nájsť na internete adresu verejného resolvera.
  3. Vytvoriť svoj alebo využiť ten, ktorý je zabudovaný vo vašom domácom routeri.

Ktorýkoľvek z týchto variantov umožní bezstarostné surfovanie po celosvetovej sieti, ale ak by ste potrebovali prevádzať veľké množstvo domén na IP, je potrebné prístup k resolverovi zvoliť starostlivejšie.

Ako som už písal, okrem resolvera internetového poskytovateľa existuje množstvo verejných adries, napríklad sa môžete oboznámiť s týmto zoznamom. Niektoré z nich môžu byť oveľa preferovanejšie, pretože majú lepšiu sieťovú konektivitu ako "predvolený" resolver.

Keď je zoznam malý, dá sa ho ľahko "pingnúť" ručne a porovnať časy oneskorenia, ale ak si vezmeme aspoň zoznam, ktorý bol uvedený vyššie, táto činnosť sa stáva nepríjemnou.

Preto, aby sa táto úloha uľahčila, vypracoval som na Go proof-of-concept svojej myšlienky s názvom get-closer.

Ako príklad nebudem kontrolovať celý zoznam resolverov, obmedzím sa iba na najpopulárnejšie.

$ get-closer ping -f dnsresolver.txt -b=0 --count=10
Najbližšie hosty:
	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]

V čase, keď som si vyberal resolvér, som sa obmedzil len na kontrolu základných adries (1.1.1.1, 8.8.8.8, 9.9.9.9), - veď sú také pekné a čo čakať od záložných, nepohľadných adries.

Ale keď sa objavil automatizovaný spôsob, ako porovnať latencie, prečo by som nemohol rozšíriť zoznam…

Ako ukázal test, viac mi vyhovuje „záložná“ adresa Cloudflare, pretože je napojená na spb-ix, ktorý je pre mňa omnoho bližšie ako msk-ix, do ktorého je napojená pekná 1.1.1.1.

Rozdiel, ako vidíte, je podstatný, pretože ani najrýchlejší lúč svetla nedokáže doraziť z Peterburgu do Moskvy za menej ako 10 ms.

Okrem jednoduchého pingu má PoC aj možnosť porovnať latencie aj podľa iných protokolov, ako sú http a tcp, a tiež čas na prevod domén na IP cez konkrétny resolvér.

V pláne je úloha porovnať počet uzlov medzi hostiteľmi pomocou traceroute, aby bolo jednoduchšie nájsť hostiteľov, na ktoré je kratšia cesta.

Kód je surový, chýba množstvo overení, ale celkom slušne funguje na čistých dátach. Budem vďačný za akúkoľvek spätnú väzbu, hviezdy na github-e, a ak sa niekomu páčila myšlienka projektu, vítam príspevky do tímu.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster