From 8ac4e00a620415a3957c8bfd33cef7b8d442395f Mon Sep 17 00:00:00 2001 From: dado Date: Sat, 14 Jun 2025 21:59:01 +0200 Subject: [PATCH] gerarchia e risoluzione dns --- networking/026-dns.md | 45 +++++++++++++++++++++++-- networking/asset/img/dns-hierarchy.png | Bin 0 -> 37611 bytes 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 networking/asset/img/dns-hierarchy.png diff --git a/networking/026-dns.md b/networking/026-dns.md index c50dcdf..38391d0 100644 --- a/networking/026-dns.md +++ b/networking/026-dns.md @@ -1,8 +1,47 @@ # Domain Name System (DNS) -Il Domain Name System (`DNS`) è un protocollo del livello applicativo (layer 7) nel modello ISO/OSI e del layer 5 nel modello TCP/IP. Utilizza il protocollo UDP a livello di trasporto ed è associato alla *well-know port 53*. +Il Domain Name System o `DNS` è un protocollo del livello applicativo (layer 7) nel modello ISO/OSI (layer 5 nel modello TCP/IP). Utilizza il protocollo UDP a livello di trasporto ed è associato alla *well-know port 53*. La funzione principale del DNS è quella di tradurre i nomi di dominio in indirizzi IP, facilitando così la navigazione degli utenti. Oltre a questa funzione principale, il DNS offre anche altre due importanti caratteristiche: -- **Aliasing**: consente di creare alias per un dominio principale (ad esempio, per il dominio *miosito.com*, è possibile avere alias come blog.miosito.com) -- **Load Balancing**: il DNS può anche fungere da bilanciatore di carico. Quando un client richiede l'indirizzo IP di un web server, il DNS può inviare la richiesta a un server specifico in base al carico di lavoro attuale, smistando così le richieste tra più indirizzi IP associati allo stesso dominio. +- **Aliasing**: consente di creare alias per un dominio principale (ad esempio, per il dominio *miosito.com*, è possibile avere alias come *blog.miosito.com*) +- **Load Balancing**: il DNS può anche fungere da bilanciatore di carico. Quando un client richiede l'indirizzo IP di un web server, il DNS può inviare la richiesta a un server specifico in base al carico di lavoro attuale, smistando così le richieste tra più indirizzi IP associati allo stesso dominio + +## Gerarchia DNS + +Quando il processo di risoluzione DNS viene avviato, si seguono diversi passaggi per ottenere l'indirizzo IP associato a un nome di dominio. + +Il primo passo consiste nell'interrogare la **memoria locale del dispositivo**, la quale può contenere sia entry manuali inserite dall'utente sia informazioni precedentemente risolte e memorizzate nella cache. + +### DNS Resolver locale + +Se l'informazione non è presente nella memoria locale, il sistema si rivolge al *DNS resolver locale*, che può essere: + +- un server DNS configurato localmente sulla macchina o sul proprio router +- un server DNS locale nella LAN +- un server DNS fornito dal proprio Internet Service Provider (`ISP`) + +### Server DNS root + +Se il resolver locale non riesce a fornire la risposta, la richiesta viene inoltrata ai `server DNS root`, che rappresentano *il primo livello della gerarchia DNS*. Non contengono informazioni specifiche sui nomi di dominio, ma il loro compito principale è quello di indirizzare la risoluzione verso i server dei **Top Level Domain** (`TLD`), che si trovano al *secondo livello della gerarchia*. Questi server gestiscono i domini di primo livello, come ad esempio `.com`, `.org`, ecc. + +### Server TLD + +I `server TLD` ricevono la richiesta e, a loro volta, indirizzano il resolver verso i server DNS autoritativi per il dominio specifico richiesto. + +### Server DNS Autoritativi + +Infine, al terzo livello della gerarchia, ci sono i `server DNS autoritativi`. Questi server contengono le informazioni definitive riguardanti il dominio richiesto e sono gestiti dal proprietario del dominio o da un ente di fiducia a cui il proprietario si affida. Solo questi server possono fornire la risposta finale, ovvero l'indirizzo IP associato al nome di dominio. + +![dns-hierarchy](asset/img/dns-hierarchy.png) + +## Risoluzione DNS + +La risoluzione DNS può avvenire attraverso due modalità principali: + +- `Interattiva`: nella modalità interattiva, il DNS resolver locale richiede direttamente l'informazione a ciascun livello della gerarchia DNS, partendo dal server DNS root fino ai server autoritativi. Questo approccio presenta diversi vantaggi in termini di sicurezza. Il resolver locale quindi: + - invia richieste ai server DNS root per ottenere indicazioni sui server TLD appropriati + - prosegue a interrogare i server TLD per ottenere informazioni sui server autoritativi specifici del dominio richiesto + - contatta i server autoritativi per ottenere l'indirizzo IP associato al nome di dominio + +- `Ricorsiva`: nella modalità ricorsiva, il resolver locale delega la responsabilità di trovare l'informazione a altri server DNS, partendo dal server DNS root di primo livello. Questo processo continua in modo ricorsivo, con ogni server che fornisce indicazioni al successivo, fino a quando il resolver non ottiene la risposta finale diff --git a/networking/asset/img/dns-hierarchy.png b/networking/asset/img/dns-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2c9568956be749e688daaf03a9d9045ce26774 GIT binary patch literal 37611 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�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 us(-mViysf3`BMf-4=*lY_`B0;4~|Dqbexl