[네트워크] DNS: Domain Name System

oldshoe·2024년 4월 18일

네트워크

목록 보기
11/34

DNS: Domain Name System

어떤 서버로 접속하기 위해서는 IP 주소와 포트 번호를 알아야 한다.
IP 주소는 기억하기 어렵기 때문에 인터넷 호스트를 나타내기 위해서 Domain name을 사용한다.
Domain name은 어떤 호스트의 IP 주소와 매핑되어 있다.
(만약에 접속한 사람이 너무 많아서 서버가 여러 개 존재할 때 한 Domain에서 여러 IP를 매핑한다.)
사람들은 Domain name을 이용해서 웹 서버에 접속한다.
패킷들, 데이터를 서버로 보내기 위해서는 서버의 IP 주소가 필요하다.
우리가 입력하는 Domain name을 IP 주소로 변환해야하는데 이것을 하는 것이 DNS이다.

일종의 distributed한 데이터베이스라고 생각하면 된다.
전세계적으로 도메인 네임 서버가 많이 존재하기 때문에 계층 구조로 구현되어있다.

applicaton-layer protocol을 이용해 통신을 해서 Domain Name에 매핑된 IP 주소를 가져오는 것이 목적이다.
HTTP, SMTP와 달리 core internet function(보조적 프로토콜)이다.
network core의 라우터에 없고 edge에 host에서 구현한다.

DNS의 계층 구조

만약에 어떤 사용자가 www.amazon.com에 접속을 시도한다고 가정해보자.
먼저 Root DNS Server에 물어보고, Root DNS 서버는 com DNS server를 찾아준다.
그리고 com DNS server는 자신이 가지고 있는 Domain 중에서 amazon.com에 해당하는 DNS server를 찾아준다. 그리고 해당 도메인에 매핑된 IP 주소를 amazon.com DNS server가 알려주고, IP 주소를 가지고 사용자는 웹 페이지에 접속할 수 있다.

DNS: root name servers

가장 상위의 name server이다.
처음에는 local name server에 물어보는데 만약에 없으면 root name server로 연결해준다.
아까 설명했듯, 직접 ip 주소를 알려주는 것은 아니고 하위 서버의 주소를 알려준다.

Local DNS name server

계층 구조에 속해있지 않고 기관마다, 그러니까 ISP마다 있을 수도 있다.
Host가 DNS 쿼리를 보내면, 쿼리는 일단 Local DNS name server로 전달된다.
(아까 root name server 설명에 적혀있었다.)
local cache를 사용함으로써 IP 주소를 이미 알고 있으면 바로 반환한다.
proxy, 계층 구조로의 forwarding 역할을 수행한다.

TLD: authoritative servers

TLD(Top-Level Domain server)는 국가 코드 최상위 도메인(.kr, .uk, .fr 등)과 일반 최상위 도메인(.com, .edu, .org 등)을 의미한다.

Domain Name은 계층 구조로 나타나 있고, Domain Name에서 뒤로 올수록 더 상위 계층에 해당하는 Domain이다. 예를 들어, google.co.kr 이면 맨 뒤 .kr은 최상위 도메인이고, .co는 회사들을 포함하는 도메인이다.

authoritative DNS servers는 야후나 네이버 등의 서버를 말한다.

Root server -> TLD server -> authoritative server 순으로 IP 주소를 알려준다.

DNS name resolution

DNS 서버를 여러 개 거치면서 주소를 알아내는 과정에는 두 가지가 있다.

iterated query

사진 그대로 보면, 먼저 local DNS server에 물어보고 없으면 root DNS server로 질의를 한다. root DNS server는 이 도메인에 해당하는 TLD server를 연결해준다.

Recursive query

Root DNS server에서 하위 DNS server를 찾고, 그 서버가 또다시 재귀적(Recursive)으로 하위 DNS server를 찾아서 답을 찾는다. 결국엔 Root DNS server에게서 답을 받을 수 있다.
하지만, 이러한 방법은 상위 계층 DNS server에 너무 큰 부하를 줄 수 있다는 단점을 지니고 있다.

Caching, Updating DNS Records

어떤 네임 서버던간에, 새로운 매핑을 알게 되면 캐싱을 한다.
어느 정도 시간(TTL)이 지나면 지워 버린다. (바뀔수도 있기 때문에...)
TLD 서버는 보통 Locam Name Server에 캐싱해놓는다.
이는 Root Name에 대한 트래픽을 감소시킬 수 있다.

그러나 이는 문제를 일으킬 수 있는데, 예시는 다음과 같다.
예를 들어 TTL이 일주일 인데, 그 일주일 사이에 정보가 바뀌면 잘못된 정보를 TTL의 남은 기간동안 가지고 있기 때문이다.
새로운 서버와 변경점에 대한 업데이트와 알려주는 메커니즘을 IETF 표준으로 정의해두었다.
(RFC 2136으로 문서화되어 있다.)

DNS records

resource records(RR)을 분산 데이터베이스에 저장해놓는다.

  • ttl : 유효기간
    4가지의 type이 존재한다.
    이 type에 따라 name과 value의 의미가 달라진다.

  • A type
    name : hostname / value : IP address

  • NS type
    name : domain / value : hostname of authoritative name server for this domain

  • CNAME type
    도메인 이름을 다른 도메인 이름으로 매핑한다.
    A type record가 있어야 설정이 가능하다.
    name : the real name / value : 별칭

  • MX type
    value : mail server의 이름

Inserting records into DNS

예를 들어 Network Utopia라는 회사가 생겼다고 가정하자.
그러면 networkutopia.com을 DNS에 등록해야 한다.
Authoritative name serer의 IP 주소와 host name을 TLD 서버에 등록한다.
NS type의 RR(도메인 이름과 authoritative name server의 host name)과 A type의 RR(hostname과 실제 IP 주소)이 들어간다. 만약 메일 서버도 있으면 MX type RR도 같이 등록한다.

이렇게 하면 local DNS 서버에 domain을 찾으려고 하면 root에서 TLD로 가서 authoritative로 가서 정보를 얻을 수 있다.

이러한 도메인 이름 사용을 위해서 DNS resistrar를 통해 등록 절차를 밟아야한다.

DNS protocol messages

DNS의 query와 reply는 안의 내용만 다르고, 같은 format을 가진다.


  • Identification
    DNS 쿼리와 해당 쿼리에 대한 응답을 서로 연결하는 데 사용되는 고유한 식별자 역할.
    DNS 요청이 발생할 때, 클라이언트는 이 필드에 고유한 값을 할당한다.
    그런 다음, DNS 서버는 응답 메시지에서의 동일한 값을 사용하여, 클라이언트가 보낸 원래 요청과 응답을 매칭시킬 수 있다.

  • flags
    이 필드에는 각종 정보를 담고 있다. 이 메시지가 query인지, reply인지에 대한 정보를 가지고 있고, 재귀 탐색을 지원하는지, 재귀 탐색을 원하는지, 응답 서버가 권한이 있는지에 대한 정보가 있다.

  • questions : Domin Name과 resource record를 포함한 DNS query 부분이 들어있다.

  • answers : DNS query에 대한 응답으로 반환되는 정보를 포함되는 부분이다. 사용자가 질의한 도메인에 대한 IP 주소가 반환되는 부분이다.

  • Authority : 쿼리에 대한 권한 정보를 포함하고, 해당 도메인의 이름의 권한 있는 DNS 서버의 정보를 제공해서 신뢰성과 권한을 확인한다.

  • Additional info : 추가적인 도움되는 정보들

profile
toomuxi : There are many things in the world that I want to do

0개의 댓글