Jak klient volí z více A záznamů v DNS?

Jak klient volí z více A záznamů v DNS?
« kdy: 04. 01. 2022, 17:16:17 »
Jak operační systémy řeší a prohlížeče či utility řeší, když  mají stáhnout/načíst/otevřít něco přes http  ,v souvislosti, když DNS opověď má víc záznamů (a ta n-tice se dostane až ke klientovi/aplikace). Je to v postatě tato otázka na "stackoverflow"(TM).

Zajímají mě tyto úhly pohledu:
- když prohlížeč používá vlastní DNS resolvování
-jak se to liší v OS (Windows, Linux,Mac) . tam může být i perlička, co když náhodou browsery pro jeden OS preferují svůj resolver nebo právě systémový
-jelikož každý os má nějaký svuj resolver, jestli on aplikacím předhodí ip podle nějakého vzorce (například na widnows ipconfig /display\show\dns)


A vlastně o jaké chování jde:
- jaké pořadí je vybráno, klíč pro výběr adresy z pořadí seznamu
- má třeba DNS odpověď nějaký flag upravující chování když tedy přijde n-tice? Například hint jednu z těchto hodnot: -
zkoušej servery od začátku vs od konce vs náhodně
-  po výběru položky u ní zůstat a nevybírat další vs zkoušet ze seznamu dokud spojení neuspěje  ("vyber-náhodný-ale-už-nepřeskakuj"), atd...

Jak je to implementováno v aplikacích (tedy otázka, zda se k aplikaci vůbec může dostat informace, že doménové jméno má víc adres): jestli existuje volání connect() s argumenty doménového jména (protože kdyby to bylo s IP,tak by samotná funkce connect toto nezvládla)
« Poslední změna: 04. 01. 2022, 17:36:29 od Petr Krčmář »


Re:algoritmy round robin dns na klientovi (DNS vrací víc A záznamů)
« Odpověď #1 kdy: 04. 01. 2022, 17:30:02 »
Chcete odpoved? Tak si nastudujte zdrojaky (pokud jsou dispozici) jednotlivych systemovych knihoven, zajistujicich resolving, dale zdrojaky aplikaci, jak si to resi (pokud nepouziji systemovou knihovnu).

Co se tyce dns, tak to nema zadny flag ohledne rizeni zpracovani seznamu adres.

RDa

  • *****
  • 1 641
    • Zobrazit profil
    • E-mail
Re:Jak klient volí z více A záznamů v DNS?
« Odpověď #2 kdy: 04. 01. 2022, 18:16:24 »
Jak je to implementováno v aplikacích (tedy otázka, zda se k aplikaci vůbec může dostat informace, že doménové jméno má víc adres): jestli existuje volání connect() s argumenty doménového jména (protože kdyby to bylo s IP,tak by samotná funkce connect toto nezvládla)

Kdyz me zajimaji adresy z DNS, tak nepouzivam connect prece. Priklad z me implementace SPF checkeru (v PHP):
Kód: [Vybrat]
foreach( dns_get_record( $host, DNS_A ) as $result ) {
  ...
}

Re:Jak klient volí z více A záznamů v DNS?
« Odpověď #3 kdy: 04. 01. 2022, 18:19:46 »
Klient to volí, jak chce. Není na to žádný standard ani příznak.

Obvykle je to tak, že klient postupuje od začátku seznamu. Pokud počítá jen s jedním záznamem, použije ten první a pokud něco selže, vrátí chybu. Pokud je klient schopen pracovat s více záznamy, vyzkouší první záznam, když je neúspěšný, zkusí druhý záznam atd. Co je „neúspěch“ záleží na klientovi – neúspěch může být to, že se nepodaří sestavit TCP/IP spojení, ale neúspěch také může být, že při HTTPS komunikaci vrátil server kód 500 (není to obecné pravidlo, prohlížeče se tak nechovají, ale v některých aplikacích může v některých případech takové chování dávat smysl).

Toho využívají DNS servery a pokud chtějí dělat rozvažování zátěže, mění pořadí záznamů v odpovědi. Asi nejjednodušší je round robin – server má DNS záznamy nějak seřazené a při každé odpovědi klientovi (nebo jednou za čas) přesune první záznam v seznamu na poslední místo. Nebo může DNS server dávat na začátek seznamu DNS záznamy serverů, které jsou ke klientovi síťově blíž. Případně se to dá různě kombinovat, na začátku seznamu budou round robinem točené záznamy pro servery, které máte blízko, na konci seznamu pak budou jako záložní servery někde daleko.

Tj. pokud chcete do pořadí DNS záznamů dávat nějakou logiku, řeší se to na serveru a předpokládá se, že klient bude záznamy brát od začátku.