DNS(Domain Name System)

DNS 서비스 이용하면 호스트 네임과 IP 주소를 가지고 있어서 해당 호스트 네임으로 매핑되는 IP 주소를 가져올 수 있다. 결국 DNS란 인터넷 통신을 위해 호스트 이름과 IP 주소 정보를 관리하고 매핑하는 분산 데이터베이스 시스템이다. 결국 DNS는 호스트 네임을 IP 주소로 변환해주는 서비스이다. Domain Name Server 는 Domain Name System을 구성하는 일부의 요소이다.


호스트와 도메인의 관계와 헷갈림에 대해서. (생활코딩)


만약 

하나의 도메인이 있다고 가정한다면,

하나의 도메인 내에 있는 여러 개의 호스트를 등록할 수 있으며, 그 여러 개의 호스트는 IP 와 매칭된다. 결과적으로 하나의 도메인이 여러 개의 서버를 가질 수 있으며, 그 때 사용되는 식별자가 호스트이다.


만약

세 대의 서버가 있고, 세 대의 서버(머신) 혹은 응답하는 호스트들은 각각 다른 IP 를 이용하고 있다.

  • (www).ooo2.org (155.68.24.88)

  • blog.ooo2.org (155.68.24.89)

  • dev.ooo2.org (155.68.24.90)

컴퓨터의 관점에서 살펴보면, ooo2.org 는 도메인이 되고, www, blog, dev 는 호스트가 된다. 

+) github page
  • 인터넷에 접속되어있는 컴퓨터 한 대, 한 대를 모두 호스트라고 칭한다.
  • 인터넷에 접속되어있는 컴퓨터를 제공하는 사업을 호스팅사업이라고 한다.
    • 호스팅 사업의 목적이 웹, 웹서버라고 한다면 웹 호스팅이라고 한다.
    • html 파일만을 제공하는 사업은 스태틱 웹 호스팅이라고 한다.


DNS 구성요소


(1) 도메인 네임 스페이스 (Domain Name Space)와 리소스 레코드(Resource Record)

DNS는 거대한 분산 네이밍 시스템이며, 도메인 네임 스페이스는 이러한 DNS가 저장/관리하는 계층적인 구조를 의미한다. 도메인 네임이 중복되지 않게 네임을 생성하여 사용하도록 정의된 네임 구성 체계라고 보면 된다. 


Domain Name System에서 하나의 도메인 네임은 유일한 값을 갖는다. 리소스 레코드는 도메인 네임을 설정할 수 있는 데이터 타입이다. 데이터베이스 시스템으로써 Domain Name System은 도메인 네임을 키 값으로 하여 이를 도메인 네임에 필요한 데이터를 설정하게 된다. 도메인 네임 데이터는 사전에 약속된 데이터타입과 포맷으로 적용해야 한다. 결국 리소스 레코드는 도메인 네임에 설정할 수 있는 데이터의 종류를 정의한 것이다.


(2) 네임 서버 (Name Server)

숫자로 구성된 IP 주소와 함께 기억하기 쉬운 도메인 네임을 사용한다. 문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP로 변환 동작을 위해 해당하는 정보를 가지고 있는 서버이다. 


네임 서버는 도메인의 데이터를 보유하고, 외부 인터넷으로부터 도메인 네임과 그 네임에 대한 데이터 질의를 수신했을 때, 보유한 데이터를 검색하여 조회하고 있는 데이터로 응답하는 역할을 담당하도록 구현한 서버 프로그램을 의미한다.


(3) 리졸버 (Resolver)

웹 브라우저와 같은 DNS 클라이언트의 요청을 네임 서버로 전달하고 네임 서버로부터 정보를 받아 최종결과를 클라이언트에게 제공하는 기능을 수행한다. 


Domain Name System 이 분산 데이터베이스 시스템의 방식을 취하고 있기 때문에 데이터가 하나의 시스템이 아니라 인터넷 각 네임서버에 흩어져 산재하고 있다. 이러한 이유때문에 이를 조회하기 위한 리졸버가 필요한 것이다.


DNS 동작원리

cmd 실행 이후 ipconfig -all 입력 후 엔터를 치면 아래와 같은 내용이 보인다.

  • 일반적으로 두 개의 DNS 주소를 받는다.

    • Primary DNS 서버

    • Secondary DNS 서버 : primary dns 서버가 죽는 경우, 사용하기 위함

이 두 개의 주소는 엘지 유 플러스 DNS 서버의 주소이다. 그럼 아래의 동작을 수행한다고 생각하자

  1. PC 브라우저에 www.naver.com 을 입력한다. 그러면 PC는 미리 설정되어 있는 DNS 서버에게 "www.naver.com" 이란 호스트 네임에 대한 IP주소를 물어본다. (단말에 설정되어 있는 이 DNS 를 Local DNS라고 부른다. 여기선 203.248.252.2 다. )

  2. Local DNS 에는 "www.naver.com" 에 대한 IP 주소가 있을 수도 혹은 없을 수도 있다. 만약 있다면 Local DNS가 바로 PC 에 IP주소를 주고 처리가 끝나지만 없는 경우에는 Local DNS 는 "www.naver.com"에 대한 IP 주소를 알아내려고 할 것이다. (Local DNS 에서 캐시를 확인하는 것이다. 존재시 해당 IP 를 바로 반환한다. )

  3. Local DNS 는 "www.naver.com" 에 대한 IP 주소를 찾아내기 위해 다른 DNS 서버들과 통신(DNS 메세지) 을 시작한다. 먼저 Root DNS 에게 "www.naver.com"에 대한 IP 주소를 아는지 확인한다. 이를 위해 Local DNS 서버에는 Root DNS 서버의 정보 (IP주소) 가 미리 설정되어 있어야 한다.

  4. Root DNS 는 전 세계에 얼마 구축되어 있지 않다고 한다. (원문 작성일 기준, 전세계적으로 13대 구축) 우리나라의 경우는 Root DNS 는 없고 Root DNS 서버에 대한 미러 서버를 운용하고 있다고 한다.

  5. Root DNS 서버는 "www.naver.com" 의 IP 주소를 모르고 그에 대한 정보를 알고 있는 다른 DNS 서버의 주소를 알려준다.

  6. 이 다른 DNS 서버는 "com" 도메인을 관리하는 DNS 서버이다.

  7. Local DNS는 com 도메인을 관리하는 DNS 서버에게 다시 "www.naver.com" 의 IP 주소를 물어본다.

  8. com 도메인을 관리하는 DNS 서버에는 해당 정보가 없으며 그에 대한 정보를 알고 있는 다른 DNS 서버의 주소를 알려준다.

  9. 이 다른 DNS 서버는 "naver.com" 도메인을 관리하는 DNS 서버이다.

  10. Local DNS는 naver.com 도메인을 관리하는 DNS 서버에게 다시 "www.naver.com" 의 IP 주소를 물어본다.

  11. 해당 DNS 서버는 "www.naver.com" 호스트 네임에 대한 IP 주소 정보를 가지고 있기 때문에 Local DNS에게 해당 호스트 네임의 IP 주소를 응답한다.

  12. 이를 수신한 Local DNS 는 www.naver.com 에 대한 IP 주소를 캐싱하고 (이후의 똑같은 요청이 왔을 경우 바로 보여주기 위해서) 그 IP주소를 PC 에 전달한다. 여기서 캐싱은 모든 DNS 에 질의를 요청하고 응답받는 과정에서 매번 일어난다.

이와같이 Local DNS 서버가 여러 DNS 서버를 차례대로 방문하면서 호스트 네임에 대한 IP 주소를 묻고 있다. Domain Name Space 계층적으로 탐색하고 있으며, 이렇게 답을 찾는 과정을 Recursive Query 라고 한다. 아래의 그림을 보며 다시 이해하자.


DNS 데이터

DNS 에는 필드가 네개가 존재한다. Name, Value, Type, TTL.

Type 필드는 해당 값에 따라 레코드의 의미가 달라짐을 의미하는데, 만약 Type 값이 A 인 경우 Name 컬럼의 값은 호스트 네임이 되고 Value 컬럼의 값은 IP 주소가 된다. 반면에 Type 값이 NS 인 경우 Name 컬럼의 값은 도메인이 되고 Value 컬럼의 값은 Name 컬럼의 값에 있는 도메인에 대한 권한이 있는 네임 서버의 호스트 네임이다. 아래의 표를 확인하자.




Posted by doubler
,