Developer Jay

[Network] DNS(Domain Name System)

18 Aug 2022

Intro

DNS(Domain Name System)에 대해 알아보자


1. DNS(Domain Name System) 개요

  • TCP/IP의 네트워크는 IP주소를 기반으로 통신 상대를 지정하므로 IP주소를 모르면 상대에게 메시지를 전달할 수 없다. (전화를 걸 때 상대의 전화번호가 필요한 것과 유사하다.)
  • 그렇다면 서버에 접속하기 위한 URL에 도메인명이 아닌 IP주소를 쓰면 좋을 것이라고 생각할 수 있다.
    (실제로 도메인명 대신 IP주소를 입력하더라도 올바르게 작동한다.)
  • 전화번호를 기억하기 어려운 것과 마찬가지로 숫자를 나열한 IP주소를 사람이 기억하기엔 어려우므로 사람 입장에서는 URL에는 IP주소가 아닌 도메인명을 쓸 수 있도록 하는 것이 좋다.
  • 하지만 사람이 이름을 사용하는 것이 편리한 것과 반대로 라우터는 IP주소를 사용하는 것이 효율적이다.
  • 도메인명을 알면 IP주소를 알 수 있다거나 반대로 IP주소를 알면 도메인명을 알 수 있다는 원리를 바탕으로, 사람과 라우터와의 차이를 해소하는 것이 바로 DNS 이다.


2. DNS(Domain Name System) 기본 동작

image

  • 도메인명을 가지고 IP주소를 조사하는 방법은 간단하다.
    가장 가까운 DNS 서버에 “www.lab.cyber.co.kr이라는 서버의 IP주소를 알려주세요.”라고 조회하는 것이다.
  • 그러면 DNS 서버가 “그 서버의 IP 주소는 xxx.xxx.xxx.xxx 입니다.”라는 식으로 알려준다.
  • 정리하자면 DNS 서버의 기본 동작은 클라이언트로부터 조회 메시지를 받고 조회의 내용에 응답하는 형태로 정보를 회답하는 것이다.
  • 여기서 남은 의문점은 클라이언트는 어느 DNS 서버 주소에 cyber 라는 이름의 DNS를 조회해야 하는것이며, 반대로 서버 관리자는 어느 DNS 서버에 cyber 라는 도메인을 등록하여야 하는 것인가? 이다.
    이 내용은 아래에서 자세히 다루도록 하겠다.


3. DNS(Domain Name System) 계층

  • 인터넷에는 막대한 수의 서버가 있으므로 전부 한대의 DNS 서버에 등록하는 것은 불가능하다.
  • 따라서 현재 DNS 서버 구조는 DNS 정보를 분산 시켜서 다수의 DNS 서버에 등록하고, 다수의 DNS 서버가 서로 연대하여 어디에 정보가 있는지를 찾아내는 구조이다.
  • 우선 DNS 서버에 등록한 정보에는 모든 도메인명이라는 계층적 구조를 가진 이름이 붙어있다.
    계층이라면 어렵게 느껴지지만 회사의 사업부, 부, 과와 같은 계층과 같다고 생각하면 되고 이렇게 계층화 함으로써 다수의 정보를 깔끔하게 정리할 수 있다.
  • 예를 들어 DNS에서 취급하는 이름은 www.cyber.co.kr 처럼 점으로 구분되어 있는데, 이 점이 계층을 구분하며 오른쪽에 위치한 것이 더 상위의 계층임을 의미한다.
  • 그러므로 kr 이라는 도메인 아래에 co 라는 도메인이 있고 그 아래에 cyber 라는 도메인이 있으며 또 그 아래에 www 라는 이름이 있는 셈이 된다.
  • 여기서 최상위인 kr 도메인은 대한민국에 할당된 도메인이며 바로 아래에 있는 co 도메인은 국내의 도메인을 분류하기 위해 설치된 도메인이다. 그 아래에 있는 cyber 가 회사에 할당된 도메인이며 최하위인 www가 바로 서버의 이름이다.


4. DNS(Domain Name System) 조회

image

  • 마지막으로 클라이언트 입장에서 엑세스 대상인 서버가 어느 DNS 서버에 등록되어 있는지를 찾아내는 방법에 대해 알아보자
  • 인터넷에 있는 모든 DNS를 일일히 뒤져볼순 없으므로 다음과 같은 방법이 고안 되었다.
  • 먼저 하위의 도메인을 담당하는 DNS 서버의 IP주소를 그 상위의 DNS 서버에 등록한다. 그리고 상위의 DNS 서버를 또 그 상위의 DNS 서버에 등록하는 식으로 차례대로 등록한다.
  • 위의 계층 설명에서는 kr 이라는 최상위 도메인의 DNS 서버에 하위의 DNS 서버를 등록하는 것으로 끝나는 것처럼 보이지만, 인터넷의 도메인은 com 이나 kr 같은 최상위 도메인 위에 또 하나의 루트 도메인이 존재한다.
    (루트 도메인에는 com 이나 kr과 같은 도메인명이 없으므로 보통 도메인을 쓸 때는 점을 생략한다.)
  • 결국 kr 위에도 루트 도메인이 존재하므로 루트 DNS 서버에 kr의 DNS 서버를 등록 함으로써 루트 도메인으로부터 차례대로 아래쪽으로 거슬러 내려갈 수 있는 구조가 완성된다.
  • 마지막으로 모든 DNS 서버에 루트 DNS 서버의 주소를 등록한다.
    이로써 어느 DNS 서버에서든지 루트 도메인에 엑세스할 수 있고, 그 결과 어느 클라이언트에서든지 아무 DNS 서버에 엑세스하면 루트 도메인을 경유하여 도메인의 계층 아래로 찾아가 최종적으로 원하는 DNS 서버에 도착하여 서버 정보를 조회할 수 있게 된다.


5. DNS(Domain Name System) 캐시

  • 항상 루트 DNS에서부터 원하는 도메인의 서버 정보를 찾는다면 이는 응답성이 상당히 떨어질 것이다.
    따라서 DNS 서버는 한 번 조사한 도메인 정보를 캐시에 기록할 수 있는데, 조회한 이름에 해당하는 정보가 캐시에 있으면 그 정보를 회답하기 위함이다. (같은 원리로 로컬에도 DNS 캐시가 존재한다.)
  • 이 캐시의 원리에는 한 가지 주의할 점이 있는데, 캐시에 서버의 정보가 저장되어 있는 와중에 서버 정보가 변경될 수도 있으므로 캐시 안에 저장된 정보는 올바르다고 단언할 수 없다는 것이다.
  • 따라서 DNS 서버에 등록하는 정보에는 TTL(Time To Live)를 설정하여 이 유효 기간이 지나면 캐시에서 삭제한다. 또한 조회에 대해 응답할 때 이 정보가 캐싱된 정보인지 등록처 DNS 서버에서 조회한 회답인지를 알려주고 있다.