STAW 08/12: Programare Web. Suita de tehnologii HTML5
Computer Networks. Domain Name System
1. Retele de calculatoare
Retele de calculatoare
Sistemul numelor de domenii
Sabin-Corneliu Buraga
busaco@infoiasi.ro
http://www.infoiasi.ro/~busaco
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [1]
2. Retele de calculatoare
Cuprins
• Domain Name System (DNS)
– Caracterizare
– Organizare
– Configurare
– Comenzi
– Primitive
– International Domain Names (IDN)
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [2]
3. Retele de calculatoare
DNS
• Adresele IP sint dificil de memorat
si de “ghicit”
• Se utilizeaza un sistem al numelor de
domenii pentru a translata adresele IP
in nume de domenii si invers
• Numele de domenii se organizeaza
in ierarhii
• RFC 1034, 1035
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [3]
4. Retele de calculatoare
DNS
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [4]
5. Retele de calculatoare
DNS
• Nume de domenii
– De lungime maxima de 255 caractere
– Primare:
• Generice: .org, .net, .mil, .gov, .int, .edu, .com,
.ws, .biz, .info
• State: .uk, .us, .fr, .ro, .jp, .am, .to, .fm, .tv,…
– Sub-domenii:
• Maxim 63 de caractere
– Nume de calculatoare (gazde)
– Domeniu de nume
• Subarbore al arborelui de domenii
• Nu trebuie sa respecte topologia retelei fizice
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [5]
6. Retele de calculatoare
DNS
• Exemplu:
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [6]
7. Retele de calculatoare
DNS|organizare
• Initial: /etc/hosts – perechi (nume, IP)
• Actual: sistem de baze de date distribuite
⇒ ierarhii de domenii
• Reguli de alocare a numelor de domenii:
– Fiecare domeniu controleaza
cum sint alocate subdomeniile sale
– Pentru a crea un nou subdomeniu, se cere permisiunea
domeniului in care va fi inclus
(un domeniu la un anumit nivel va avea o autoritate)
– Atribuirea de nume de domenii respecta
granitele organizationale, nu pe cele ale retelelor
– Un anumit nivel din ierarhia de niveluri poate fi controlat
de mai multe servere
• Probleme: toleranta la defecte,
supra-incarcarea radacinii
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [7]
8. Retele de calculatoare
DNS|organizare
• Servere de nume (name servers)
– Spatiul de nume DNS se divide
in zone care nu se suprapun
– Fiecare zona contine o parte din domenii si
numele serverelor care stocheaza informatiile
din acea zona
– Exista un server primar (primary/authoritative
name server) care deserveste un anumit domeniu
si, eventual, mai multe servere secundare
continind bazele de date replicate
– Un server poate fi responsabil al mai multor
domenii
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [8]
9. Retele de calculatoare
DNS|organizare
• Client DNS
– Denumit resolver, trimite un pachet UDP
serverului DNS care cauta numele si
returneaza adresa IP
Aplicatie Server DNS uaic.ro
uaic.ro
rpi.edu
uaic.ro
resolver rpi.edu
DNS DB
DNS DB
DNS DB DNS DB
Authoritative Replici
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [9]
10. Retele de calculatoare
DNS|organizare
• Implementarea serverului de nume:
BIND (Berkeley Internet Name Domain)
– Daemonul named, configurat prin /etc/named.conf
– Domeniul local si lista serverelor DNS
pentru acel domeniu se gasesc in /etc/resolv.conf
• Ca resolver interactiv,
se pot folosi comenzile nslookup, host sau dig
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [10]
11. Retele de calculatoare
DNS|interogari
• Interogari:
– Recursiva – daca un server DNS
nu cunoaste adresa pentru numele
solicitat, atunci va interoga alt server DNS
– Incrementala – daca serverul DNS nu stie
sa raspunda, returneaza eroare si adresa
altui server DNS (numit si referral) care
ar putea cunoaste raspunsul la interogare
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [11]
12. Retele de calculatoare
DNS|interogari
• Gasirea unui server DNS pentru a furniza:
– Numele unui domeniu
– Adresa IP corespunzatoare unui domeniu simbolic
• Bazele de date DNS – resource record (RR):
Domeniul curent, vers. fisier: SOA (Start Of Authority)
–
– Adresa IP a gazdei: A
Servere de nume: NS (Name Server)
–
Alias-uri pentru nume: CNAME (Canonical Name)
–
Mail exchangers: MX – vezi cursul viitor
–
– Descrierea gazdei (CPU, OS): HINFO
– Text neinterpretat (comentarii): TXT
• Interogarile externe (cu alte servere DNS)
se stocheaza in memorii cache – DNS caching
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [12]
13. Retele de calculatoare
DNS|interogari
• Exista un server de nume principal (root)
pentru a returna adresele serverelor DNS
pentru domeniile primare sau de nivel secund
• Interogarile: nume de domeniu,
tip (A, NS, MX,…), clasa (1=IP)
• Raspunsurile: nume de domeniu, tip raspuns,
clasa (IP), time to live (in sec.), informatii
• TCP se utilizeaza pentru replicarea DNS
• UDP pentru interogari (lookups)
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [13]
14. Retele de calculatoare
DNS|interogari
• Exemplu – interogare iterativa
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [14]
15. Retele de calculatoare
DNS|interogari
• Exemplu – interogare recursiva
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [15]
16. Retele de calculatoare
DNS|optimizari
• Proximitatea spatiala: serverele locale vor fi
interogate mai des decit cele la distanta
• Proximitatea temporala: daca un set de
domenii sint referentiate repetat,
atunci se apeleaza la caching DNS
• Fiecare intrare DNS va avea stabilita
o valoare TTL (time to live)
• Se va utiliza si replicarea (servere multiple,
servere root multiple); se va interoga cel mai
apropiat (geografic) server
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [16]
17. Retele de calculatoare
DNS|abrevieri
• Serverele vor raspunde numai daca primesc
nume complete de domenii
(e.g., fenrir.info.uaic.ro)
• Utilizatorii pot da doar nume partiale
(de exemplu, fenrir)
• Resolver-ul va putea completa sufixurile
(e.g., fenrir ⇒ fenrir.info.uaic.ro)
• Fiecare resolver va avea definita o lista de
sufixuri de incercare
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [17]
18. Retele de calculatoare
DNS|interogari inverse
• Problema:
data o adresa, care va fi numele ei simbolic?
• Raspuns:
se va returna o adresa de forma
x.x.x.x.in-addr.arpa
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [18]
19. Retele de calculatoare
DNS|configurare
• Exemplu de fisier /etc/resolv.conf
search net.infoiasi.ro infoiasi.ro info.uaic.ro
domain info.uaic.ro
nameserver 127.0.0.1
nameserver 193.226.23.1
nameserver 193.226.30.2
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [19]
20. Retele de calculatoare
DNS|configurare
• Exemplu de fisier pentru specificarea unei zone DNS
tgv.com. in soa vaxa.tgv.com. wing.tgv.com. (
199501091 ; serial number
10800 ; refresh 3 hr
3600 ; retry 1 hr
604800 ; expire 1 wk
86400 ; min. TTL 1 day
)
tgv.com. in ns ns1.tgv.com.
ns1.tgv.com. in a 161.44.128.70
hq.tgv.com. in a 161.44.128.70
in hinfo VAXSTATION-4000-90 VMS
tgv.com. in mx 10 hq.tgv.com.
fang.tgv.com. in a 161.44.128.87
in mx 10 hq.tgv.com.
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [20]
23. Retele de calculatoare
DNS|whois
(infoiasi)$ whois dom ibm.com
[whois.crsnic.net]
Whois Server Version 1.3
Domain Name: IBM.COM
Registrar: NETWORK SOLUTIONS, INC.
Whois Server: whois.networksolutions.com
Referral URL: http://www.networksolutions.com
Name Server: INTERNET-SERVER.ZURICH.IBM.COM
Name Server: NS.WATSON.IBM.COM
Name Server: NS.ERS.IBM.COM
Name Server: NS.ALMADEN.IBM.COM
Name Server: NS.AUSTIN.IBM.COM
Status: REGISTRAR-LOCK
Updated Date: 07-jan-2003
Creation Date: 19-mar-1986
Expiration Date: 20-mar-2005
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [23]
24. Retele de calculatoare
DNS|clienti, rezolveri,
servere
Cod aplicatie
cerere
Server DNS Alte servere
Cod rezolver raspuns
local DNS
UDP
aplicatie
Fisier de
config. Ca fisier de configurare
resolver
al resolver-ului: /etc/resolv.conf
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [24]
25. Retele de calculatoare
DNS|primitive
• Nu trebuie scris un resolver pentru a afla
adresa IP a unei gazde
• Adresele IP returnate sint network byte order
• Pentru a putea folosi functiile de conversie
DNS, la unele sisteme de operare (e.g., Sun)
va trebui la compilare sa folosim biblioteca
nsl (Name Server Library): gcc … -lnsl
• Functii principale:
– gethostbyname()
– gethostbyaddr()
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [25]
26. Retele de calculatoare
DNS|primitive
• Se foloseste structura hostent:
#include <netdb.h>
struct hostent {
char *h_name; /* nume oficial */
char **h_aliases; /* alias-uri */
int h_addrtype; /* AF_INET/AF_INET6 */
int h_length; /* lungime: 4 ori 16 */
char **h_addr_list; /* pointeri
la adresele IP */
};
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [26]
27. Retele de calculatoare
DNS|primitive
hostent
Nume oficial
h_name
alias 1
h_aliases
h_addrtype alias 2
h_length
null
h_addr_list
Adresa IP 1
Adresa IP 2
null
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [27]
28. Retele de calculatoare
DNS|primitive
struct hostent *gethostbyname
( const char *hostname );
• Returneaza:
– Succes – adresa structurii hostent create; se foloseste
de obicei prima: #define h_addr h_addr_list[0]
– Eroare – constanta NULL,
iar variabila h_errno indica eroarea aparuta:
• HOST_NOT_FOUND
• TRY_AGAIN
Constante definite
• NO_RECOVERY
in netdb.h
• NO_DATA
• NO_ADDRESS
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [28]
29. Retele de calculatoare
DNS|exemplu
• Completarea structurii sockaddr_in
avind in loc de adresa IP un nume simbolic:
struct sockaddr_in server;
struct hostent *ip_addr;
/* incercam sa gasim adresa IP */
if (!(ip_addr = gethostbyname (quot;www.w3.orgquot;)))
{ /* eroare la rezolvarea adresei */ }
server.sin_family = AF_INET;
server.sin_port = htons (80);
/* adresa IP o luam din structura ip_addr */
memcpy (&server.sin_addr.s_addr,
ip_addr->h_addr, sizeof (ip_addr->h_addr));
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [29]
30. Retele de calculatoare
DNS|primitive
• Se poate utiliza si gethostbyaddr()
• Alte functii utile:
– uname()– informatii privind gazda curenta
– gethostname()– asemanatoare cu uname()
– getservbyname()– ofera portul unui serviciu
– getservbyaddr()– ofera numele unui serviciu
asociat la un port
– gethostbyname2()– pentru adrese IPv6
– getaddrinfo(), getnameinfo()– folosite nu
doar pentru TCP/IP, ci pentru orice domeniu de
adrese (standard POSIX)
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [30]
31. Retele de calculatoare
DNS|IDN
• International Domain Names (IDN)
– Extensie care permite folosirea
caracterelor Unicode in numele de domenii,
nu doar a celor ASCII
– Suport pentru internationalizarea numelor
de domenii
– Pot fi exploatate pentru atacuri de tip
phishing (vezi unul din cursurile viitoare)
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [31]
32. Retele de calculatoare
Rezumat
• Domain Name System (DNS)
– Caracterizare
– Organizare
– Configurare
– Comenzi
– Primitive
– International Domain Names (IDN)
Sabin-Corneliu Buraga 2006/2007 – www.infoiasi.ro/~busaco/ [32]