DNS (Domain Name System) 이란?

인터넷을 통해 다른 서버와 통신하려면 해당 서버의 IP 주소가 필요하다.
IP 주소는 숫자로 되어 있어 사람이 기억하기 어렵기 때문에,
사람이 기억하기 쉽도록 문자로 표현한 것이 도메인 이름이다.
DNS는 도메인 이름을 IP 주소로 변환해주는 시스템으로
DNS는 이러한 도메인 이름과 IP 주소의 매핑 정보를 저장하고 관리하는 분산 데이터 베이스 시스템이다.

사용자가 웹 브라우저에 www.google.com 을 입력하면,
DNS 서버에 이 도메인 이름에 해당하는 IP 주소를 요청하고, DNS 서버는 해당 IP 주소를 반환한다.
전 세계에 분산된 DNS 서버들의 계층 구조를 통해 도메인 이름과 IP 주소의 매핑 정보를 효율적으로 관리한다.
분산된 구조 덕분에 인터넷은 안정적이고 확장 가능하게 운영될 수 있다.

💡 왜 분산 데이터 베이스 시스템일까?

한 대의 DNS 서버로 운영할 경우 요청 처리 속도가 느려지고 비효율적이기 때문이다.
여러 대의 DNS 서버를 운영할 경우, 각 서버가 도메인과 IP 주소 정보를 공유해야 하는데,
그렇지 않으면 일부 서버는 특정 도메인의 IP 주소를 알지 못할 수 있다.
이러한 문제를 해결하기 위해 도메인을 계층적으로 구분하고 정보를 분산하는 구조가 선택되었으며,
도메인 이름에 포함된 점(dot)은 이러한 계층 구조를 나타낸다.




DNS 작동 방식 맛보기

사용자가 웹 브라우저에 www.example.com 과 같은 도메인 이름을 입력하면

브라우저는 브라우저에 있는 캐시를 통해서 도메인에 대한 IP가 있는지 찾아보고

컴퓨터에 저장되어있는호스트 파일과 캐시에서도 IP를 찾아본다.

만약 IP 주소가 없다면 DNS 서버에 www.example.com 에 대한 IP를 달라고 요청하게되고

(생략…)

DNS 서버는 매핑되어 있는 IP 주소를 반환하여 웹사이트에 정상적으로 접속하게된다.

그렇다면 (생략…) 과정에는 무엇이 있을까?

일단 그 과정을 알기 위해선 DNS의 구성요소에 대해서 알아야한다.




DNS의 구성 요소

리졸버가 DNS 클라이언트 요청을 네임 서버로 전달하고 찾은 정보를 클라이언트에게 제공하는 기능을 수행한다.


도메인 네임 스페이스(Domain Name Space) : DNS가 저장 관리하는 계층적 구조

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


DNS 서버(DNS Server = Name Server) : 권한 있는 DNS 서버

  • DNS 정보를 가지고 있는 서버를 권한 있는 DNS 서버라고 한다.
  • 문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP 주소로 변환시키기 위해서는 도메인 네임 스페이스의 트리 구조에 대한 정보가 필요한데 이러한 정보를 가지고 있는 서버이다.
  • DNS는 분산 데이터 베이스 시스템이라고 했는데
    DNS는 서버를 여러개로 분리해서 안정적인 DNS 서비스를 제공하고있다.
    도메인 이름에 포함된 점(dot)은 계층 구조를 나타내는데
    계층구조에 따라 서버가 배치되어있다.

  • 최상위 서버인 .은 Root DNS Server
    하위도메인인 com이 Top-level DNS Server
    그 하위도메인은 second-level DNS Server
    그 하위도메인은 third-level DNS Server 이다.
    Top-level DNS Server(TLD) 아래는 sub DNS Server 라고 얘기하기도 한다.
    • 전 세계에 13개의 Root DNS 서버가 구축되어 있으며 이 DNS 서버를 복사하여 같은 기능을 담당하는 미러서버가 존재한다.


리졸버(Resolver) : 권한 없는 DNS 서버

  • DNS 정보를 가지고 있지 않은 서버를 권한 없는 DNS 서버라고 한다.
  • 캐시에 IP 주소가 없다면 Resolver는 다른 DNS 서버들에게 차례대로 질의를 보낸다.
  • Resolver는 브라우저에서 도메인 이름에 대한 IP 주소를 요청할 때 처음 도달하는 곳으로
    질의를 통해 권한 있는 DNS 서버로부터 IP 주소를 알아내거나 캐시하는 역할을 한다.

💡 질의란?

DNS 시스템에서 질의 는 클라이언트와 DNS 서버 간의 역할을 명확하게 구분하기 위해 사용되는 방식이다.
DNS에서 질의 방식에는 재귀적 질의와 반복적 질의가 있다.

재귀적 질의 (**Recursive Query**)

DNS 서버가 클라이언트 대신 모든 질의를 처리해주는 방식으로
클라이언트는 한 번의 질의만으로 원하는 정보를 얻을 수 있다.
자세히는 아래 과정을 재귀적 질의라고 할 수 있다.

1. 클라이언트는 자신이 알고 있는 DNS 서버에 질의를 보낸다.
2. DNS 서버는 루트 DNS 서버부터 시작하여 최종적으로 요청된 도메인의 IP 주소를 찾을 때까지 모든 질의를 대신 수행한다.
3. 최종적으로 찾은 IP 주소를 클라이언트에게 전달한다.

반복적 질의 (Iterative Query)

DNS 서버가 자신이 가지고 있는 정보만을 바탕으로 질의에 대한 답변을 해주는 방식으로
요청받은 도메인에 대한 정보가 없으면, 다음 단계의 서버를 알려주고 질의를 다시 수행하도록 유도한다.
자세히는 아래 과정을 재귀적 질의라고 할 수 있다.

1. 캐시에 IP 주소가 없다면 Resolver는 루트 서버에 질의를 보낸다.
2. 루트 서버는 요청된 도메인의 TLD(Top-Level Domain) 서버를 알려준다.
3. 클라이언트는 TLD 서버에 질의를 보내고, TLD 서버는 다시 권한 서버를 알려준다.
4. 이러한 과정을 반복하며 최종적으로 요청된 도메인의 IP 주소를 찾을 때까지 계속된다.




DNS의 작동 방식

이제 본격적으로 (생략…) 부분에 대해 알아보도록 하자.
DNS의 작동 방식의 전체과정은 다음과 같다.

  1. 사용자 입력: 사용자가 웹 브라우저에 www.example.com 과 같은 도메인 이름을 입력한다.
  2. 캐시확인: Resolver는 우선 자신의 캐시에 해당 도메인 이름에 대한 IP 주소가 저장되어있는지 확인한다.
  3. IP 주소반환 or DNS 서버에 요청:
    **캐시에 저장된 IP가 있다면, Resolver는 해당 IP 주소를 반환하게된다.
    만약 캐시에 저장된 IP 주소가 없거나, 캐시에 저장된 IP 주소가 만료되었다면, Resolver는 DNS 서버에 요청을 한다.
  4. Root DNS Server 부터 하위 도메인으로 재귀적 질의:
    Root DNS Server는 모든 도메인 이름에 대한 IP 주소를 가지고 있지 않고 있고 TLD DNS Server에 대한 정보를 가지고 있기 때문에 TLD DNS Server의 IP 주소를 Resolver에게 전달한다.
    그럼 Resolver는 TLD DNS Server에 대해 질의를 수행하여 Resolver는 .com 에 대해 TLD DNS Server에 요청을 보낸다.
    이러한 과정을 반복하며 최종적으로 요청된 도메인의 IP 주소를 찾을 때까지 계속된다.
  5. IP 주소 반환: sub DNS Server 에서 www.example.com 에 대한 IP 주소를 찾으면 Resolver에게 반환한다.
  6. 캐시저장: Resolver는 IP 주소를 캐시에 저장하고 이후 동일한 도메인 이름에 대한 질의가 즐어올 때 캐시에 저장된 IP 주소를 사용하도록 한다.
  7. 웹 서버 접속: Resolver IP 주소를 브라우저에게 전달하고 이를 통해서 웹사이트에 정상적으로 접속하게된다.

이러한 과정을 통해 사용자는 복잡한 IP 주소를 외울 필요 없이 편리하게 도메인 이름으로 웹사이트에 접속할 수 있다.




DNS 레코드

DNS 서버는 데이터베이스의 한 종류이며,
DNS 서버가 클라이언트로부터 질의를 받았을 때 그에 맞는 데이터를 응답해야 한다.
데이터베이스의 각 항목을 DNS에서는 DNS 레코드 라고 부른다.
DNS 레코드는 도메인 이름과 IP 주소, 그리고 기타 관련 정보를 연결하는 역할을 한다.
주요 DNS 레코드의 종류는 다음과 같다.

  • A 레코드: 도메인 이름과 IPv4 주소를 매핑한다. 가장 기본적인 레코드이다.

    도메인 타입 값/위치
    dongsup.com A xx.xxx.xxx.xxx
    www.dongsup.com A xx.xxx.xxx.xxx
  • CNAME 레코드: 하나의 도메인 이름에 다른 도메인 이름을 연결한다. 즉, 도메인 이름에 별칭을 부여하는 역할을 한다.

    도메인 타입 값/위치
    dongsup.com A xx.xxx.xxx.xxx
    www.dongsup.com CNAME dongsup.com

    💡 CNAME 레코드는 어떤 장점이 있을까?

    서버 IP가 변경해야하는 일이 생겼다면,
    CNAME 레코드로 매핑한 도메인 이름만 변경해주면 된다.
    만약 A 레코드로 매핑한 도메인 이름의 수가 많다면 일일이 변경해줘야할 것이다.
    CNAME 레코드를 사용하면 이러한 번거로움을 줄일 수 있다.

  • NS 레코드: 도메인에 대한 권한 있는 DNS 서버를 지정한다. 다른 DNS 서버에 도메인 이름에 대한 권한을 위임해줄 수 있다.

    도메인 타입 값/위치
    dongsup.com NS ds.dongsup.com

    💡 다른 DNS 서버에 도메인 이름에 대한 권한을 위임해줄 수 있다는 것은?

    ◾ 어떤 도메인에 대한 질의가 들어왔을 때, 어떤 DNS 서버에서 정확한 정보를 찾아야 하는지를 알려주는 역할을 한다.
    ◾ 만약 위와 NS 레코드가 매핑 되어있다면 dongsup.com 에 대한 모든 DNS 관련 질의는 ds.dongsup.com 으로 전달되어 처리된다는 의미이다.

  • MX 레코드: 메일 서버의 주소를 지정한다. 이메일 전송에 사용된다.
  • TXT 레코드: 텍스트 정보를 저장한다. SPF(Sender Policy Framework)나 DKIM(DomainKeys Identified Mail)과 같은 이메일 인증 기술에 사용되거나, 도메인 소유권 확인 등에 사용된다.


그래서 이 레코드들이 어떤 역할을?

도메인을 등록할때 주로 DNS 서버를 직접 구축하기보다는
한국인터넷진흥원, 가비아와 같은 도메인 판매 업체를 통해서
원하는 도메인을 구매하고 매핑하고 싶은 서버 IP 주소에 DNS 레코드를 추가해서 IP 주소를 매핑하게 된다.

도메인 타입 값/위치
dongsup.com A xx.xxx.xxx.xxx
www.dongsup.com CNAME dongsup.com

만약 위와 같이 도메인을 구매하고 매핑 설정을 하였다면
DNS 서버에 해당 도메인에관한 IP주소가 매핑되고
권한서버에 설정한 매핑정보가 들어가게된다.


이것이 도메인 이름을 IP주소 반환할 때 어떤 영향을 끼칠까?

작동방식을 살펴보면,

  • 클라이언트의 질의:
    • 사용자가 브라우저 주소창에 dongsup.com을 입력한다.
    • 브라우저는 운영체제에 설정된 DNS 서버에 dongsup.com에 대한 IP 주소를 요청한다.
  • 루트 서버로의 질의:

    • DNS 서버는 루트 서버에 .com TLD에 대한 정보를 요청한다.
    • 루트 서버는 .com TLD를 관리하는 권한 서버의 주소 a.gtld-servers.net 를 DNS 서버에 알려준다.

      도메인 타입 값/위치
      .com NS a.gtld-servers.net
  • TLD 서버로의 질의:

    • DNS 서버는 루트 서버로부터 받은 정보를 이용하여 .com TLD의 권한 서버a.gtld-servers.netdongsup.com에 대한 정보를 요청한다.
    • .com TLD의 권한 서버는 dongsup.com 도메인을 관리하는 권한 서버의 주소ns.gabia.co.kr 를 DNS 서버에 알려준다.

      도메인 타입 값/위치
      dongsup.com NS ns.gabia.co.kr
  • 권한 서버로의 질의:

    • DNS 서버는 ns.gabia.co.krdongsup.com에 대한 정보를 요청한다.
    • ns.gabia.co.kr 서버는 dongsup.com에 대한 A 레코드를 찾아서 해당 IP 주소를 DNS 서버에 알려준다.
    • 만약 주소창에 www.dongsup.com 으로 입력했다면, DNS 서버는 www.dongsup.com 에 대한 질의를 수행하고, 이 과정에서 ns.gabia.co.kr 에 정보를 요청하며, ns.gabia.co.kr 서버는 www.dongsup.com 의 A 레코드를 찾기 위해 dongsup.com 의 A 레코드를 확인한 후, www.dongsup.comdongsup.com 의 서브도메인으로 설정되어 있다면 해당 IP 주소를 DNS 서버에 알려준다.

      도메인 타입 값/위치
      dongsup.com A xx.xxx.xxx.xxx
      www.dongsup.com CNAME dongsup.com
  • 클라이언트에게 응답:
    • DNS 서버는 찾은 IP 주소를 클라이언트에게 전달한다.
    • 클라이언트는 받은 IP 주소를 이용하여 해당 서버에 연결하고, 웹 페이지를 요청한다.

이러한 DNS 레코드들을 통해 다양한 서비스들이 도메인 이름을 기반으로 운영될 수 있다.




DNS가 UDP를 사용하는 이유

DNS는 빠른 응답 속도가 매우 중요한 서비스이다.
따라서 연결 설정에 드는 비용이 없고, 오버헤드가 적은 UDP(User Datagram Protocol) 를 전송 프로토콜로 사용한다.
UDP는 데이터를 전송하기 전에 연결을 설정하는 과정이 없기 때문에,
TCP(Transmission Control Protocol)보다 훨씬 빠른 속도로 데이터를 전송할 수 있다.

물론 UDP는 데이터 전송의 신뢰성을 보장하지 않는다.
데이터가 손실되거나 순서가 뒤바뀔 수 있다.
하지만 DNS는 이러한 문제점을 어느 정도 보완하기 위해 자체적인 재전송 메커니즘을 가지고 있으며,
대부분의 경우 UDP를 사용함으로써 얻는 속도 이점이 신뢰성 문제보다 훨씬 크기 때문에 UDP를 사용하는 것이다.
또한 DNS는 응답 정보를 캐싱하여 반복적인 질의를 최소화함으로써 속도를 더욱 향상시킨다.




Reference

카테고리:

업데이트:

댓글남기기