DNS
DNS란 할당된 도메인 영역에 대한 정보를 가지고 있는 서버로, 주로 도메인을 IP주소로 변환하는 역할을 하는 분산 데이터베이스 시스템이다.
개요
DSN는 도메인 네임 시스템(Domain Name System)의 약자로 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터나 네트워크로 연결된 임의의 장치의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호인 IP 주소로 변환해준다. 즉, 인터넷 도메인 주소 체계로서 TCP/IP의 응용에서, www.wiki.hash.kr과 같은 주 컴퓨터의 도메인 이름을 192.168.1.0과 같은 IP 주소로 변환하고 라우팅 정보를 제공하는 분산형 데이터베이스 시스템이다.
인터넷은 2개의 주요 이름공간을 관리하는데, 하나는 도메인 네임 계층, 다른 하나는 인터넷 프로토콜 주소 공간이다. 도메인 네임 시스템은 도메인 네임계층을 관리하며 해당 네임 계층과 주소 공간 간의 변환 서비스를 제공한다. 인터넷 네임 서버와 통신 프로토콜은 DNS 시스템을 구현한다. DNS 네임 서버는 도메인을 위한 DNS 레코드를 저장하는 서버이며, 데이터베이스에 대한 쿼리의 응답 정보와 함께 응답한다.[1]
등장배경
DNS의 기원은 1960년대부터 올라온다. 1960년대 말 미국의 아르파넷(ARPANET)이 등장한다. 아르파넷은 미국의 주요 연구기관을 연결한 광역 컴퓨터망으로써 미국 국방부의 ARPA(Advanced Research Project Agency)가 투자하여 개발하였다.
1980년대 초 TCP/IP 프로토콜이 개발되었다. IP는 'Internet Protocol'의 약자로서 산재한 컴퓨터 네트워크 간에 상호 연동을 하기 위한 프로토콜이다. TCP/IP 프로토콜은 빠른 속도로 아르파넷에서 컴퓨터 네트워킹의 표준 프로콜이 되었는데, 이 당시만 해도 DNS는 존재하지 않았다. 버클리 대학의 BSD Unix에 TCP/IP 프로토콜이 탑재되는 동시에 아르파넷에 연결된 호스트 수가 급격하게 증가했다. 1974년 기준 아르파넷은 총 23개의 호스트만이 존재하고 있었는데, 1981년에는 213개, 1983년에는 562개, 1984년에는 1024개, 1985년는 1961개, 1987년에는 28174개로 기하급수적인 증가세를 보였다.
이렇듯 TCP/IP를 기반으로 형성된 지역 및 광역 네트워크를 인터넷(Internet)이라 부르게 되었는데, TCP/IP 표준 프로토콜의 등장과 BSD Unix의 TCP/IP 지원으로 갑작스럽게 증가한 호스트로 인해 문제가 생겼다. 그것은 기하급수적으로 증가해버린 호스트의 네임의 구성 및 관리이다. 초기 아르파넷 환경에서는 각 호스트의 주소를 모두 외울 수 있었고, 호스트 수가 증가함에 따라 니모닉(Nemonic)을 호스트별로 부여해 쉽게 기억할 수 있게 하였지만. 호스트의 이름이 변경되거나 호스트의 수가 증가함에 따라 이런 방법의 변경 및 분배는 한계에 달하게 되었다. 더불어 인터넷의 규모가 날로 커지면서 호스트 이름과 IP주소 레코드를 자동적으로 관리하는 체계가 필요하게 되어 DNS가 등장했다.
구조
DNS는 도메인 이름과 IP주소의 매핑을 위한 관리 체계로 크게 도메인 네임 스페이스, 네임서버, 리졸버로 구성된다.
도메인 네임 스페이스
도메인 네임 스페이스(Domain Name Space)는 거대한 분산 네이밍 시스템인 DNS가 저장 및 관리하는 계층적 구조를 말한다.
도메인 이름 공간은 도메인 이름이 트리 형태로 구성되어 있다. 트리의 각 노드는 리소스 레코드를 가지며 0개 이상의 레코드를 가질 수 있다. 트리는 최상위에 루트존에서 시작하여서 인터넷에 연결된 모든 노드가 연속해서 이어진 하위 존으로 나누어져있다. 각 DSN존은 하나의 권한 있는 서버에 의해 관리되는 노드들의 집합이다. 각 존과 도메인은 그 하위 도메인에 관한 정보를 관리한다.
하나의 네임 서버가 여러 개의 존을 관리할 수도 있다. 관리 권한은 분할되어 새로운 존을 형성할 수 있으며, 기존의 도메인 이름 공간의 일부분이 서브 도메인 형태로 다른 네임 서버에 권한이 위엄된다. 그리고 기존의 존은 새로운 존에 대한 권한을 잃게된다.
도메인 네임 서버
숫자로 구성된 IP 주소와 함께 사용하기 편리하고 기억하기 쉬운 이유로 도메인 이름을 사용한다. 그러나 실제 [[웹 클라이언트와 웹 서버 간의 통신은 숫자로 표현된 IP주 주소를 사용하여 통신한다. 이를 위해서 문자열로 표현된 도메인 이름을 컴퓨터가 통신할 때 사용하는 숫자로 변환시켜 주어야 한다. 이러한 동작을 위해 도메인 네임 스페이스의 트리 구조에 대한 정보가 필요하며, 이러한 정보를 가지고 있는 서버를 도메인 네임 서버라고한다.
- 도메인 이름 형성에 관한 규칙으로 도메인 이름은 한 개 이상의 부분(레이블)로 이루어지고, 점으로 구분하여 붙여 쓴다.
- 가장 오른쪽 레이블은 최상위 도메인을 의미한다. 예를 들어, 도메인 이름 www.example.com은 최상위 도메인 com에 속한다.
- 도메인의 계층 구조는 오른쪽부터 왼쪽으로 내려간다. 왼쪽의 레이블은 오른쪽의 서브도메인이다. 예를 들어, 레이블 example은 com 도메인의 서브도메인이며, www는 example.com의 서브도메인이다. 서브도메인은 127단계까지 가능하다.
- 각 레이블은 최대 63개 문자를 사용할 수 있고, 전체 도메인 이름은 253개 문자를 초과할 수 없다. 실제로는 도메인 레지스트리에 더 짧은 제한을 가질 수 있다.
- 도메인 이름은 기술적으로 옥텟으로 표현할 수 있는 모든 문자를 사용할 수 있다. 그러나 DNS 루트 존과 대부분의 서브도메인에서는 제한된 형식과 문자들만 허용한다. 레이블에 사용될 수 있는 문자는 아스키 문자 집합의 부분집합과 알파벳 a부터 z, A부터 Z, 숫자 0부터 9와 하이픈(-)을 포함한다. 이 규칙은 letter(문자), digit(숫자), hyphen(하이픈)의 첫글자를 따서 LDH 규칙이라고 한다. 도메인 이름은 대소문자 구분없이 해석되고, 레이블은 하이픈으로 시작하거나 끝날 수 없다.[1]
리졸버
리졸버는 웹 브라우저와 같은 DNS 클라이언트의 요청을 네임 서버로 전달하고, 네임 서버로부터 도메인 이름과 IP 주소를 받아 클라이언트에게 제공하는 기능을 수행한다.
이 과정에서 리졸버는 하나의 네임 서버에게 DNS 요청을 전달하고, 해당 서버에 정보가 없으면 다른 네임 서버에게 요청을 보내 정보를 받아 온다. 이렇듯 리졸버는 수많은 네임 서버에 접근하여 사용자로부러 요청 받은 도메인의 IP 정보를 조회하는 기능을 수행 할 수 있어야 한다.
하지만 이러한 리졸버의 모든 기능을 PC와 같은 클라이언트 호스트에 구현하는 것은 단말 시스템 자원의 한계와 같은 제약이 있다. 이에 따라 리졸버의 대부분의 기능을 DNS 서버에 구현하고, 클라이언트 호스트는 리졸버의 단순한 기능만을 지닌 리졸버 루틴을 구현하는 옵션이 제시되었다. 이러한 단순화된 기능의 리졸버를 스터브 리졸브라고 하며, 스터브 리졸버는 수 많은 네임 서버의 구조를 파악할 필요 없이 리졸버가 구현된 네임 서버의 IP 주소만 파악하면 된다. 클라이언트 호스트에 설정하는 DNS 서버는 이와 같은 네임 서버를 의미하는 것으로, 도멩니에 대한 질의를 받은 스터브 리졸번느 설정된 네임 서버로 DNS 질의를 전달하고 네임 서버로부터 최종 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행한다.
각주
참고자료
- 고인돌SE, 〈DNS 개요〉, 《네이버블로그》
- 〈DNS〉, 《위키백과》
- Netmanias teach,〈DNS 기본 동작 원리〉, 《넷매니아즈》