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