DNS lookup
Alexandr Malusek
malusek na hroch.ujf.cas.cz
Sobota Září 13 17:10:03 CEST 1997
FILIP na cti.cz (Filip Zaludek) writes:
> Da se nekde nastavit timeout, do ktereho musi
> byt zodpovezen DNS dotaz?
Odpoved je trochu komplikovanejsi:
DNS dotazy vyrizuje resolver, coz je sada rutin, ktere je mozne najit
v knihovne libc. Default timeouty jsou v nich zakodovany a ze zadneho
konfiguracniho souboru se nectou. Tedy chcete-li jako uzivatel nejake
aplikace, ktera si dynamicky linkuje libc, zmenit timeout, musite
zmenit libc (soubor res_init.c). Tim se samozrejme ovlivni vsechny
aplikace, ktere si libc linkuji. (Mozna se da pres LD_LIBRARY_PATH
nastavit, ze aplikace ma pouzivat libc z jineho adresare - nevim.)
Pokud jako programator volate rutiny resolveru, pak z toho co jsem v
res_inic.c vycetl, myslim, ze muzete hodnotu timeoutu a poctu
opakovani dotazu nastavit jak chcete (ve strukture _res), a pak teprve
volat res_init(). Pouziva se tam totiz programova konstrukce:
if (!_res.retrans)
_res.retrans = RES_TIMEOUT; /* RES_TIMEOUT = 5s */
if (!_res.retry)
_res.retry = 4; /* pocet opakovani */
V knize "DNS and BIND", O'Reilly & Associates, se pak dozvite,
ze algoritmus resolveru implementuje nasledujici tabulku timeoutu:
(Uvadim ji, protoze ne kazdy ma tuto knihu poruce).
"kolo" pocet name serveru
dotazu 1 2 3
0 5s (2x) 5s (3x) 5s
1 10s (2x) 5s (3x) 3s
2 20s (2x)10s (3x) 6s
3 40s (2x)20s (3x)13s
-------- ---- ------- -------
celkem 75s 80s 81s
Tedy mate-li napr. 3 nameservery v resolv.conf, pak resolver zasle
dotaz prvnimu a ceka 5s. Pokud do te doby nedostane odpoved, zasle
dotaz druhemu a opet ceka 5s ... Ve druhem kole se casovy interval
zkrati na 3s, ... Pokud ani po 81s od prvniho vyslani dotazu neprijde
odpoved, ohlasi resolver timeout.
--
Alexandr Malusek (malusek na ujf.cas.cz)
UJF AV CR
Další informace o konferenci Linux