DNS(Domain Name System)

소프트웨어 마에스트로 14기로 활동하면서 전담 멘토님께서 주관하시는 AWS 특강을 수강하게 되었고, 해당 특강을 통해 학습한 키워드를 재학습하여 내 지식으로 만들고자 게시글을 작성하게 되었다.


DNS?

  우리는 웹사이트에 접속하기 위해 외우기 어려운 IP 주소 대신 도메인 이름을 사용한다. 도메인 이름을 사용했을 때는 입력한 도메인을 실제 네트워크 상에서 사용하는 IP 주소로 바꾸고 해당 IP 주소로 접속하는 과정이 필요하다. 이러한 과정 및 전체 시스템을 DNS(Domain Name System)라고 한다.
  이러한 시스템은 전세계적으로 약속된 규칙을 공유하는데, 상위 기관에서 인증된 기관에게 도메인을 생성하거나 IP 주소로 변경할 수 있는 ‘권한’을 부여한다. 이와 같이 DNS는 상위 기관과 하위 기관으로 이루어진 ‘계층 구조’를 가지는 ‘분산 데이터베이스’ 구조를 가진다.

DNS 구성 요소

Domain Name Space

image

  DNS는 전세계적인 거대한 분산 시스템이다. 도메인 네임 스페이스는 이러한 DNS가 저장 및 관리하는 계층적 구조를 의미한다. 도메인 네임 스페이스는 최상위에 루트 DNS 서버가 존재하고 그 하위로 연결된 모든 노드가 연속해서 이어진 계층 구조로 되어있다. (폴더 구조와 유사하다.)

계층적 도메인 레벨 (Hierarchical Domain Level)

  • 도메인 네임 스페이스의 트리 구조는 최상위 레벨부터 순차적으로 계층적 소속 관계를 나타냄
  • 하위 조직의 네임 스페이스를 할당하고 관리하는 방식은 각 하위 기관의 관리 책임자에게 위임
    • gifthub.kr 도메인은 kr 도메인을 관리하는 네임 서버에 등록되어 있고, www.gifthub.krgifthub.kr을 관리하는 네임 서버에 등록되어 있음
    • blog.gifthub.kr을 생성하기 위해서는 gifthub.kr 도메인을 관리하는 네임 서버의 레코드만을 수정함으로써 가능
      • 이러한 위임 구조는 호스트의 증가에 대한 관리가 효율적으로 이루어지는 것을 가능하게 함

전체 도메인 이름 (FQDN: Fully Qualified Domain Name)

  • 도메인의 전체 이름을 표기하는 방식을 의미
  • 도메인 이름 : gifthub.kr
  • 호스트 이름 : www
  • FQDN : www.gifthub.kr

  문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP 주소로 변환시키기 위해서 도메인 네임 스페이스의 트리 구조에 대한 정보가 필요한데, 이러한 정보를 가지고 있는 서버를 의미한다. 데이터베이스의 역할(저장, 관리)과 찾아주는 역할, 요청 처리 응답 구현의 역할을 한다. 전 세계에서는 13(패킷의 실질적인 크기 제한으로 인해 루트 DNS 서버 수를 13개 서버 주소로 제한하도록 결정되었다고 함)개의 Root DNS 서버가 구축되어 있다고 한다. 추가로 DNS 서버를 복사하여 같은 기능을 담당하는 미러 서버가 있다고 한다.

Root DNS 서버

  • ICANN이 직접 관리하는 절대 존엄 서버
  • TLD DNS 서버 IP 주소를 저장하고 안내하는 역할을 수행

Top-Level Domain(TLD) DNS 서버

  • 도메인 등록 기관이 관리하는 서버
  • Authorititave DNS 서버의 주소를 저장하고 안내하는 역할을 수행
  • 도메인 판매 업체의 DNS 설정이 변경되면 도메인 등록 기관으로 전달되기 때문에 어떤 도메인이 어떤 판매업체에서 구매했는지 알 수 있음

Second-Level Domain(SLD) DNS 서버 (Authoritative DNS 서버)

  • 실제 개인 도메인과 IP 주소의 관계가 기록(저장, 변경)되는 서버
    • 그래서 권한의 의미인 Authoritative라고도 함
  • 일반적으로 도메인/호스팅 업체의 네임 서버를 의미
  • 개인 DNS 구축 시에도 이 경우에 해당함

권한 없는 DNS 서버 (리졸버 서버, 리컬시브 서버, 리커서)

  • DNS 서버는 도메인 네임 스페이스를 위한 권한 있는 DNS 서버와 권한 없는 DNS 서버로 구분됨 (앞서 언급한 3가지는 권한 있는 DNS 서버)
  • 네임 스페이스를 위한 권한 있는 DNS 서버는 IP 주소와 도메인 이름을 매핑함
  • 네임 스페이스를 위한 권한 없는 DNS 서버는 질의를 통해 IP 주소를 알아내거나 캐시함

리졸버(Resolver)

  리졸버는 웹 브라우저와 같은 DNS 클라이언트의 요청을 네임 서버로 저장하고 네임 서버로부터 정보(도메인과 IP 주소)를 받아 클라이언트에게 제공하는 기능을 수행한다. 이 과정에서 하나의 네임 서버에게 DNS 요청을 전달하고 해당 서버에 정보가 없으면 다른 네임 서버에게 요청을 보내 정보를 받아온다.
  이렇듯 리졸버는 수많은 네임 서버에 접근하여 사용자로부터 요청받은 도메인의 IP 정보를 조회하는 기능을 수행한다. 하지만 리졸버의 기능을 단말에 구현하는 것은 자원의 한계가 있기 때문에 대부분의 기능을 DNS 서버에 구현하고 클라이언트 호스트는 리졸버의 단순한 기능만을 가진 리졸버 루틴을 구현하는 옵션이 제시되어 있다.
  이렇게 단순화된 기능의 리졸버를 스터브 리졸버(Stub Resolver)라고 하며, 이는 수많은 네임 서버의 구조를 파악할 필요 없이 리졸버가 구현된 DNS 서버의 IP 주소만 파악하면 된다.
  클라이언트 호스트에서 설정하는 DNS 서버(Recursive DNS Server)는 이와 같은 서버를 의미하는 것으로, 도메인에 대한 질의를 받은 스터브 리졸버는 설정된 DNS 서버로 DNS Query(질의)를 전달하고 DNS 서버로부터 최종 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행한다.

DNS 동작 방식

image

DNS Query?

  DNS 클라이언트와 DNS 서버는 DNS 쿼리를 교환하게 되는데, 이는 Recursive(재귀적) 또는 Iterative(반복적)으로 구분된다.

Recursive Query (재귀적 질의)

  • 결과물인 IP 주소를 돌려주는 작업
    • 결과적으로 Recursive 서버가 Recursive 쿼리를 웹 브라우저 등에게 돌려주는 역할을 수행함
  • Recursive 쿼리를 받은 Recursive 서버는 Iterative 하게 권한 있는 네임 서버로 Iterative 쿼리를 보내서 결과적으로 IP 주소를 찾게 되고 해당 결과물을 응답함

Iterative Query (반복적 질의)

  • Recursive DNS 서버가 다른 DNS 서버에게 쿼리를 보내어 응답을 요청하는 작업
    • Recursive 서버가 권한 있는 네임 서버들에게 반복적으로 쿼리를 보내서 결과물(IP wnth)를 알아냄
  • Recursive 서버에 이미 IP 주소가 캐시되어 있다면 위 과정은 생략됨

전체 동작 과정 예시

  1. 웹 브라우저에서 www.gifthub.kr을 입력
  2. 웹 브라우저는 이전에 방문한 적이 있는 지 확인
    • 브라우저 캐시 확인
    • OS 캐시 확인
    • 라우터 캐시 확인
    • ISP 캐시 확인 (Recursive DNS Server)
  3. ISP에서 DNS Iterative하게 쿼리를 보냄
  4. ISP는 Authoritative DNS 서버에서 최종적으로 IP 주소를 응답받음
  5. ISP는 해당 IP 주소를 캐시함
  6. 웹 브라우저에게 응답 전송

DNS 레코드 종류

  • SOA(Start of Authority) : 권한 시작을 지정하고, 권한이 있는 서버를 가리킴
  • A(Host Record) : FQDN과 32비트의 IPv4 주소를 연결
  • AAAA(IPv6호스트) : FQDN과 128비트의 IPv6 주소를 연결
  • CNAME(Alias Record) : 실제 도메인 이름과 연결되는 가상 도메인 이름(별칭)
  • MX(Mail Exchane Record) : 주어진 사서함에 도달할 수 있는 라우팅 정보 제공
  • SRV(Service Resources) : 비슷한 TCP/IP 서비스를 제공하는 다수의 서버 위치 정보를 제공
  • NS(Name Servers) : 도메인 서버 목록을 지정

Reference