Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

DNS brukes av alle program som støtter tilkobling til tjenere ved hjelp av domenenavn. De kanskje mest kjente er nettleserne, hvor man kan bruke domenenavn som ntnu.no for å besøke NTNU's nettside istedenfor å måtte huske IP-adressen 129.241.56.116.

Et domene i en DNS-tjener inneholder som oftest flere såkalte Resource Records (RR). En spørring kan henten hente ut alle eller bare de av en viss type.

3. Virkemåte

Bruken av DNS er vanligvis transparent for sluttbruker. Når en nettleser skal åpne en nettside, vil spørringene mot DNS-tjeneren skje automatisk i bakgrunnen.

En klient gjør oppslag mot en DNS-tjener ved å sende spørringer til den. Spørring blir vanligvis sendt som UDP-pakker på port 53. TCP blir brukt hvis svaret overstiger 512 byte i størrelse. En spørring fra klient fører til ett svar fra tjener.En oppføring i en DNS-tjener inneholder som oftest flere såkalte ressurs-records (RR) for hvert domene. En spørring kan henten hente ut alle eller bare de av en viss type

Anatomi av en DNS-pakke

Spørringer og svar består av pakker med samme oppbygning. De begynner med en UDP- eller TCP-header avhengig av protokollen som blir brukt.

Image Added

Query ID (16 bit): En unik ID skapt av klienten og sendt med i spørringen. Tjeneren inkluderer denne i svaret. Også kalt Transaction ID.
QR (1 bit): Query/Response. Satt til 0 i spørring fra klient til tjener, 1 i svar fra tjener til klient.
Opcode (4 bit): Satt til 0 i klient ved standard spørring mot tjener. Denne blir inkludert uforandret i svar fra tjener. Resten av disse er enten utgåtte, reserverte eller brukes ikke ved vanlige spørringer fra klient til tjener. Komplett liste i lenken til IANA under kilder.

Flagg (7 bit):

  • AA (1 bit): Authoritative Answer: Satt til 1 i svar fra tjener til klient hvis tjeneren er autoritativ tjener for domenet i svaret.
  • TC (1 bit): Truncated. Satt til 1 i et svar fra tjener hvis svaret ikke får plass i en standard 512 byte stor UDP-pakke og har derfor blitt kuttet ned. For å få hele svaret må klienten sende en ny spørring med TCP.
  • RD (1 bit): Recursion Desired. Klienten setter denne til 1 hvis den ønsker at tjeneren skal utføre rekursive spørringer i tjenerhierarkiet for å finne all info. Klienten setter den til 0 hvis den er fornøyd med infoen som tjeneren har på nåværende tidspunkt.
  • RA (1 bit): Recursion Available. Settes til 1 i svar fra tjeneren hvis den tilbyr rekursive spørringer.
  • Z (3 bit): Reservert for fremtidig bruk. Må alltid settes til 0.

rcode (4 bit): Response Code. Settes i svar fra tjener til klient:

  • 0: Ingen feil.
  • 1: Formateringsfeil. Tjeneren kunne ikke forstå spørringen.
  • 2: Tjenerfeil. Tjeneren kunne ikke utføre spørringen på grunn av feil med tjeneren.
  • 3: Navnefeil. Domenenavnet i spørringen eksisterer ikke.
  • 4: Ikke implementert. Tjeneren støtter ikke denne type spørring.
  • 5: Avslått. Tjeneren nekter å utføre spørringen.
  • 6-15: Reservert til fremtidig bruk.

Question count (16 bit): Antall spørringer inkludert i pakken fra klient.
Answer count (16 bit): Antall RR i svaret fra tjener.
Authority count (16 bit): Antall RR i svaret som peker på de autoritative navnetjenerne for domenet.
Additional Record count (16 bit): Tilleggs-RR inkludert i svaret fra tjener. Kan f.eks. være IP-adressene til de autoritative navnetjerne hvis de inkludert i forrige felt. Brukes for å slippe flere spørringer mot samme tjener.
DNS Question or answer data (variende lengde): Inkluderer spørringer fra klient eller svar fra tjener.

Spørringer består av et visst antall spørringer satt i Question count (vanligvis 1). Det består av tre felt: QNAME, QTYPE og QCLASS. QNAME består av en eller flere "labels", som er domenenavnet i spørringen splittet opp på punktum. Hver label begynner med en byte som starter med 00. De seks siste bitene er lengden på resten av labelen i antall byte (maks 63). QTYPE er en 16-bits-verdi, som inneholder hvilken RR klienten ønsker. Komplett listen finnes i lenken til IANA. Vanlig verdier er 1 for A (IP-adresse) og 15 for MX (mail exchange, domenenavn til e-posttjener).

Alle svartyper er bygd opp på samme måte. De består av seks felt: NAMETYPECLASS, TTLRLENGTH og RDATA. NAME er samme som QNAME i spørringen. TYPE er tilsvarende QTYPE i spørringen. CLASS er en 16-bits-verdi som definerer navnerommet spørringen skal skje i. Så og si alltid satt til 1 for IN (Internett). TTL er på 32 bit og er antall sekunder RR-en kan lagres i cachen til klient før det må gjøres en ny spørring. RDLENGTH er på 16 bit og er lengden til RDATA i antall byte. RDATA har varierende lengde avhengig av hvilken type RR det gjelder.

Eksempel på en spørring.

Widget Connector
urlhttps://www.youtube.com/watch?v=kAL_DqSZ8A8

Her gjøres en spørring mot en DNS-tjener for domenenavnet ntnu.no. Dette er lik det som skjer hvis man prøver å åpne denne nettsiden i en nettleser:

...


Spørringen begynner med en transaksjons-ID generert av klienten. Deretter følger Wireshark legger alle 16 bits med flagg og opkoder under flags-seksjonen. Bit 1 er satt til 0, som betyr at dette er en spørring. Bit 8 er satt til 1, som betyr at det er ønsket at DNS-tjeneren søker rekursivt gjennom tjenerhierarkiet for å finne domenenavnet.

...

Transaksjons-ID-en er her den samme som klienten sendte i spørringen. Det gjør det mulig for klienten å holde styr på alle spørringer den utfører. Bit 1 er satt til 1, som betyr at dette er et svar på en spørring. Deretter følger bits flagg som sier at tjeneren er ikke-autorativ når det gjelder domenet, og at den tilbyr rekursive spørringer.
og at den kan utføre rekursive spørringer.
Answer RRs inneholder antall RR som finnes av type A. Deretter kommer en reprise av spørringen før pakken avsluttes med svaret fra tjeneren. Svaret inneholder da en RR av type A, som inneholder IP-adressen 129.241.56.116.

 

4. Kilder

https://tools.ietf.org/html/rfc1034
https://tools.ietf.org/html/rfc1035
http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml