DNS란 무엇인가?
웹 사이트에 들어가기 위해 반드시 필요한 것이 있다. 바로 www.naver.com 와 같은 형태의 도메인 주소이다.
네트워크 상에 있는 장비들과 서버들은 도메인 주소를 이용해 사이트를 찾을 수 없다. 이들은 1.1.1.1과 같은 IP 주소를 이용하여 자신과 타 장비를 식별하기 때문이다.
그렇다면 서버 식별을 도메인 주소를 사용하면 되지 않을까? 애석하게도 OSI 7계층의 3번째인 네트워크 계층에서 각 서버들을 구분하고 패킷을 전송하기 위해 사용하는 Internet Protocol (IP)에서 사용하는 주소가 IP 주소이다. 도메인 주소는 7계층인 애플리케이션 계층에서 주로 사용하는 주소이므로 서버 식별용으로 도메인 주소를 사용할 순 없다 (OSI 7계층에 대한 먼저 공부하는 것을 추천한다. 네트워크이든 서버이든 OSI 7계층은 무조건 알아야하는 기초 지식이다).
그렇다고 해서 사용자들이 사이트의 IP 주소를 이용할 수는 없다. 외우기가 힘들기 때문이다. www.naver.com 를 보면 네이버의 주소라는 것을 쉽게 생각할 수 있다. 하지만 125.209.222.142 를 보고 네이버라고 생각할 사람이 얼마나 있을까?
따라서 사용자 입장에서 편한 도메인 주소와 장비 입장에서 편한 IP 주소를 변환해줄 수 있는 무언가가 필요해지는데 이것이 DNS (Domain Name System) 이다.
이렇게 설명하면 쉬워보이는 DNS이지만 뚜껑을 열어보면 바로 닫고 싶을 정도로 내용이 만만치 않다. 한번에 보고 이해되면 좋겠지만, 전체를 다 이해하지 않아도 좋다. 실무에서 구르다보면 저절로 알게 될 내용들이다. ^^
DNS의 구성요소
DNS는 크게 3가지의 구성요소로 나눌 수 있는데 도메인 네임 스페이스, 리졸버, 네임 서버이다.
‘도메인 네임 스페이스 (Domain Name Space)’는 도메인 주소를 어떻게 관리할 지에 대한 방법이라고 생각하면 쉽다. 세상에는 몇 개일지 감히 상상하지도 못할 정도로 무수히 많은 도메인 주소가 존재하는데 이를 1~2대의 서버로 관리하지 않는다. 따라서 이 도메인 주소들을 관리하기 위해 무수히 많은 서버 (네임 서버)들을 이용해 관리하게 되는데, 네임 서버들에서 도메인 주소를 관리하는 방법 또는 관리 단위 정도라고 생각하자.
‘네임 서버 (Name Server)’는 도메인 주소를 관리하기 위해 사용하는 DNS 전용 서버이다. 널리 사용하는 bind나 Microsoft DNS 서버, 앞으로 설명하게 될 PowerDNS 등이 여기에 포함된다. 네임 서버는 도메인 네임 스페이스와 기타 다른 방법들을 통해 도메인 주소들을 관리하게 되는데 보통 도메인 주소의 일부만을 가진 분산 형태를 가진다.
‘리졸버 (Resolver)’는 DNS 상의 클라이언트이다. 네임 서버에게 도메인 주소에 대한 IP 주소를 물어보는 (이것의 반대 상황도 마찬가지) 장비 또는 프로그램이라고 보면 된다. 사용자의 PC가 될 수도 있고, 네임서버가 리졸버도 될 수 있는데 나중에 ‘DNS 동작 방식’을 보게 된다면 이해할 수 있을 것이다.
그럼 이제부터 DNS의 구성요소들을 하나하나 살펴보도록 한다.
도메인 네임 스페이스
일단 도메인 네임 스페이스를 설명하기 전에 먼저 도메인 주소에 대해 먼저 살펴보겠다.
도메인 주소 구조 (IPv4 기준)
- 주소의 영역을 . 으로 구분 -> 라벨(Label)
- 하나의 라벨은 최대 63개의 문자 (64byte) 사용 가능
- 대소문자 구분 없이 알파벳, -만 가능 (ASCII로 표현)
- 전체 도메인 주소의 최대 크기 : 255개의 문자 (255byte)
- 주소 해석은 오른쪽에서 부터
- 최상위 주소는 항상 가장 오른쪽에 있는 .(root)
도메인 주소에는 나름의 구조가 있다. 위에서 설명했다시피 도메인 주소는 수없이 많은 네임서버들에 의해 관리되는데, 각각의 도메인 주소들을 통으로 관리하는 것이 아니라 트리 구조로 분리시킨 다음에 각 부분들을 네임서버들에 나누어 관리하게 된다.
도메인 네임 스페이스라는 것은 도메인 주소를 관리하기 위한 전체 트리 구조를 의미한다. 각각의 노드에는 여러 네임 서버들이 모여서 도메인 주소의 일부분을 관리하게 된다.
여기서 도메인 네임 스페이스에 포함되는 각각의 노드들에 대해 알아본다.
- 루트 도메인 (Root Domain)
- 네임 스페이스에서 이름 해석의 출발지 역할을 수행하는 노드(서버)
- 최상위 도메인 서버의 정보를 가지고 있다.
- 전 세계에 13개의 원본 root 서버가 존재 (http://www.iana.org/domains/root/servers)
- 최상위 도메인 (Top Level Domain = TLD)
- 국가 코드 최상이 도메인 (ccTLD : country code TLD)
- .kr, .jp 등
- 일반 최상위 도메인 (gTLD = global TLD)
- .net, .com, org 등
- ARPA : 역방향 조회 시 사용되는 최상위 도메인
- in-addr.arpa
- 국가 코드 최상이 도메인 (ccTLD : country code TLD)
- 2차 도메인 (Second Level Domain, Sub Domain)
- TLD 하위에서 관리되는 서브 도메인
- 국가 도메인 하위에 기관 유형에 따른 분류
- .co (일반회사), .ac (교육기관), .go (정부기관) 등
- 서브 도메인 (Sub Domain)
- 상위 도메인에 소속되는 각 기관 또는 회사별 도메인
- ex : google, naver 등
- 상위 도메인에 소속되는 각 기관 또는 회사별 도메인
- 하위 노드는 무한정 만들 수 있지만 주소를 이룰 수 있는 문자 수에 제한이 있다 (255byte).
흔히 DNS하면 도메인 주소를 IP 주소로 변환해주는 것만을 생각하게 된다 (이를 ‘정방향 조회’라고 부른다). 하지만 DNS는 IP 주소를 도메인 주소로 변환하는 기능도 있다. 이를 ‘역방향 조회’라고 부른다.
보통 정방향 조회를 자주 사용하게 되지만, 특수한 상황(PTR/SPF 레코드를 이용한 스팸메일 필터링)에서 역방향 조회를 사용하게 된다.