심심한 개발자의 취미생활

DNS

  • DNS는 Domain Name System의 약어로, 네트워크 통신을 위한 IP 주소 체계를 문자 형태인 도메인으로 매핑하여 연결하는 서비스르 의미한다.

도메인 구조

  • ballboy.github.io.

루트 도메인 (.)

  • 모든 도메인 주소의 가장 마지막에는 온점이 있는데, 일반적으로 이 부분은 생략하고 사용한다. 위 주소에서 가장 마지막에 위치하는 온점을 루트 도메인이라고 한다.

탑 레벨 도메인 (TLD) (.io)

  • 도메인 주소에서 가장 상위에 위치한 도메인을 탑 레벨 도메인이라고 하며, 줄여서 TLD(Top Level Domain)라고 한다.
  • TLD에는 여러 종류가 있는데, TLD는 서비스의 성격, 국가 등을 표현한다.
    • .com(기업), .gov(정부), .edu(교육)...
    • .kr(한국), .jp(일본), .us(미국)...

세컨드 레벨 도메인 (SLD) (github)

  • TLD 다음에 위치한 두 번째 도메인 영역을 세컨드 레벨 도메인 이라고 하며, 줄여서 SLD(Second Level Domain)라고 한다. (github)
  • SLD는 상위 TLD에서 유일하게 존재하고 식별하는 도메인 영역으로, 도메인 이름은 SLD와 TLD를 합친 형태로 표현한다.
    • github.io

서브 도메인

  • 도메인을 용도에 따라 앞에 명칭을 부여하여 분류할 수 있는데, 이를 서브 도메인이라고 한다.

DNS 서버 종류

  • 도메인 구조를 루트 도메인, TLD, SLD, 서브 도메인으로 구분하는 가장 큰 이유는 영역별 도메인을 관리하는 주체를 분리하기 위해서이다.
  • 도메인은 DNS 네임 서버로 관리하는데, 이 때 도메인 영역 별로 DNS 네임 서버를 분류해서 관리한다.

루트 네임 서버

  • 루트 도메인을 관리하는 DNS 서버를 루트 네임 서버라고 한다.
  • DNS 요청에 대해 TLD에 해당는 네임 서버 정보를 응답한다
  • 루트 네임 서버는 전 세계에 13개만 존재한다.

TLD 네임 서버

  • 도메인 이름의 최상위 영역인 TLD를 관리하는 DNS 서버로, TLD 네임 서버라고 한다.
  • TLD 영역에서 식별되는 모든 SLD를 관리하여 DNS 요청에 대해 SLD 네임 서버 정보를 응답한다.

SLD 네임 서버

  • 실질적인 도메인 이름을 관리하는 DNS 서버로, SLD 네임 서버(권한 있는 네임 서버)라고 한다.
  • SLD 네임 서버는 실제 도메인의 최종 관리 서버로 권한이 있는 네임 서버라고 한다.
  • 도메인 주소에 대한 IP 주소를 확인하는 가장 마지막 단계이다.

DNS 해석기

  • 사용자와 네임 서버 사이에서 중계자 역할을 수행하는 목적으로, 사용자가 DNS 해석기로 DNS 요청을 하면, DNS 해석기가 DNS 네임 서버와 정보를 주고 받아 도메인 주소를 해석하여 최종적으로 IP 주소를 사용자에게 알려준다.

DNS 통신 흐름

[사용자] (ballboydev.github.io)
   ┃
(1)┃(5)
   ┃
[DNS 서버]
   ┃
[DNS 해석기]
   ┃ 
┏━━┻━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃(4)            ┃(3)            ┃(2)
┃               ┃               ┃
[SLD 네임 서버]   [TLD 네임 서버]   [루트 네임 서버]
(github.io.)    (.io.)          (.)
  1. 사용자 PC에서 ballboydev.github.io이라는 도메인 주소의 IP 주소를 알기 위해 DNS 서버에 요청 한다. 요청 받은 DNS 서버는 DNS 해석기를 이용하여 다양한 네임 서버와 통신하는 중계자 역할을 한다.

  2. 기본적으로 DNS 해석기는 전 세계에 있는 루트 네임 서버의 주소를 알고 있으며, 해당 루트 네임 서버에 ballboydev.github.io의 도메인 주소의 IP 주소를 문의한다. 하지만 루트 네임서버는 ballboydev.github.io의 도메인 주소를 알지 못하지만, .io의 TLD 네임 서버는 알고 있기 때문에 해당 정보를 DNS 해석기에 전달한다.

  3. DNS 해석기는 .net에 해당하는 TLD 네임 서버에 ballboydev.github.io 도메인 주소의 IP 주소를 물어 보지만 TLD 서버 역시 도메인 주소를 알지 못하지만 알고 있는 github.io의 SLD 네임 서버 정보를 DNS 해석기에 전달한다.

  4. DNS 해석기는 github.io에 해당하는 SLD 네임 서버에 ballboydev.github.io 도메인 주소의 IP 주소를 문의하고, 이 SLD 네임 서버는 도메인 주소의 최종 정보가 있기에 ballboydev.github.io에 대한 IP 주소를 DNS 해석기에 전달한다.

  5. DNS 해석기는 ballboydev.github.io에 최종적으로 해석한 IP 주소를 사용자 PC에 전달하고, 사용자는 IP주소를 통해 통신을 시도하게 된다.

DNS 레코드 유형

  • DNS 레코드는 도메인에 대한 요청 처리 방법을 정의한 것으로, 용도에 따라 DNS 레코드 유형을 분류한다.
  • nslookup : 도메인 기반으로 IP 주소를 조회하는 명령어
    • nslookup ballboydev.github.io
    • 특정 DNS 서버를 통해 IP 주소 조회
      • nslookup ballboydev.github.io 8.8.8.8
        • 8.8.8.8 : google DNS 서버
    • IPv6 조회
      • nslookup -type=AAAA ballboydev.github.io

A 레코드 유형

  • 도메인 이름을 IPv4 주소로 매핑하는 가장 기본적인 DNS 레코드 유형
  • ballboydev.github.io 이라는 도메인 주소로 문의 하면 IPv4 주소 185.199.111.153로 응답한다.

ballboydev.github.io A 185.199.111.153

AAAA 레코드 유형

  • 도메인 이름을 IPv6 주소로 매핑하는 DNS 레코드 유형

ballboydev.github.io AAAA 2606:50c0:8000::153

NS 레코드 유형

  • 도메인 이름의 네임 서버 주소로 매핑하는 DNS 레코드 유형

net NS a.gtld-servers.net

CNAME 레코드 유형

  • 도메인 이름의 별칭을 지정하는 DNS 레코드 유형으로, 다른 도메인 이름을 정의한다.

www.example.com CNAME example.com