IP주소 또는 도메인네임은 인터넷 상에서 중복되지 않는 유일한 것들이다. DNS는 크게 다 용과 같이 3가지 기능으로 구분할 수 있다.
· 도메인네임 공간(Domain Name Space) 및 리소스 레코드(Resource Record)
· 네임서버(Name Server)
· 리졸버(Resolver)
도메인네임 공간(Domain Name Space)은 흔히 인터넷에서 사용되고 있는 도메인네임의 계 층적 구조공간을 의미한다. www. .kernel.org는 이 도메인네임 공간에 속한 하나의 노드 즉, 호스트네임을 지칭한다. 도메인네임 공간의 분배와 도메인네임의 할당은 전 세계적으로 도 메인네임 할당 기관을 통해 체계적으로 할당, 관리되고 있다. 이를 통해 인터넷 상에서 특 정 도메인네임은 언제나 유일한 네임(globally unique name)으로써 유지된다. 도예인네임 공간은 네임 주소 영역을 분배, 할당, 구성하는 방식을 제공하며, 이러한 도메인 네임 공간은 트리(tree)형태의 계층적인 구조로 이루어져 있다.
리소스 레코드(Resource Record)는 도메인네임 공간 중에서 지정된 도메인네임에 대해 필 요한 인터넷 자원(Resource) 정보를 매핑하는 수단을 제공한다. 예를 들어 www.kernel. org의 IP주소가 204.152.191.5일 경우, 이를 인터넷 상에서 알려주기 위해서는 www. kernel. org라는 네임(Name)에 대해 IP주소 속성을 연결시켜 DNS 데이터베이스를 구 성하여야 한다. 이는 zone파일을 사용하여 www kernel.org 1800 IN A 204.152.191.50I 라는 형태의 표기를 사용하여 설정한다. 이러한 하나의 도메인네임(Domain Name)이 가지 는 속성정보를 지정하는 수단으로 정의된 것이 리소스 레코드이다.
리소스 레코드는 확장이 가능하다. 즉, IPV4 네트워크 주소 정보를 설정하기 위해 A type의 리소스 레코드가 사용되고 있으나, 조만간 IPV6가 도입됨에 따라 IPV6 네트워크 주소 정보 를 설정하기 위하여 AAAA type의 리소스 레코드가 추가로 점의되었다.
리소스 레코드의 확장은 가존에 정의된 리소스 레코드에 대해 아무런 영향이 없이 이루어진다. 리소스 레코드 는 도메인네암 시스템 체계에 있어서 도메인 데이터베이스를 구성하는 역할을 한다.
네임서버는 도메안 존(Domain Zone)의 정보를 소유하고 이에 대한 질의에 대해 응답하는 역할을 수행한다. 흔하 DNS 서버라고도 하며, 특히 특정 질의에 대해 자신이 소유한 도에 인 존(Domain Zone)의 정보만 그 응답으로 제공하고 동작하는 DNS 서버라는 의미로써, Iterative DNS 서버라고 불리기도 한다. 또한 도메인네임 공간상의 특정 영역(Zone)에 대해 관리권한이 위임된 서버이므로 Authoritative DNS 서버, Authoritative 네임서버라고도 한다. 네임서버는 인터넷상의 도에인네임에 대해 분산된 도메인 데이터베이스를 구성한다. 이때 도에인 데이터베이스는 각 네임서버에 다양한 형태의 분산구조로 설정된 리소스 레코드들로 이루어진다.
리졸버(Resolver)는 네임서버에 의해 구성된 도메인 데이터베이스를 검색하는 역할을 한다. 리졸버는 응용 애플리케이션 프로그램과 도메인네임 시스템간의 인터페이스 역할을 담당한 다. 또한 요청된 리소스 레코드가 존재하는 위치를 도메인네임 시스템에서 찾고 이 리소스 레코드의 정보를 최종 응답으로 되돌려 주는 기능을 담당한다. 리졸버는 전체 도메인네임 시스템에 대해 전체 도메인 데이터베이스를 검색할 수 있도록 도메인네임 시스템 검색의 시 작점이 되는 루트 네임서버(Root Name Server)의 IP주소 정보를 자신의 환경 구성 파일로 가지고 있다. 또한 리졸버는 동일한 DNS 질의를 짧은 시간내에 빈번하게 반복하는 것을 방 지하기 위하여 캐시(Cache)를 내부에 구현하여 DNS 질의 결과 데이터를 일정 기간동안 캐 시에 저장하여 관리한다. 각 리소스 레코드는 레코드 자체에 지정된 TTL(Time To Live) 시 간 동안만 리졸버의 캐시에 존재한 후 삭제된다. 그러나 이러한 리졸버의 전체 기능을 모든 호스트에 구현해야 하는 것은 아니다. 현재 대부분의 호스트에는 전체 리졸버 기능이 아닌 스터브 리졸버 형태로 구현하고 있다.
스터브 리졸버(Stub Resolver)는 호스트 내의 응용 프로그램에 프로그래밍 인터페이스를 제 공하고 응용 프로그램의 네임 질의 요청이 있는 경우, 시스템에 지정된 리졸버 역할의 네임 서버로 DNS 질의를 요청한다. 리졸버는 스터브 리졸버를 대신하여 전체 도메인네임 시스템 에 대하여 요청된 레코드가 존재하는 네임서버를 파악하고 해당 리소스 레코드 정보를 획득 한 다음 최종 응답결과를 스터브 리졸버에게 전달한다. 여기에서 스터브 리졸버는 전체 도 메인네임 시스템(DNS)에 대해 원하는 리소스 레코드의 위치를 파악할 수 있는 알고리즘을 구현하지 않는다. 다만 항상 DNS 요청을 처리할 수 있는 리졸버 DNS(Resolver DNS Server) 서버의 IP주소를 지정하는 것으로 충분하다. 흔히 PC에 설정하는 ISP 사업자가 제 공하는 DNS 서버 또는 네임서버는 이 리졸버 기능이 설정된 서버를 지정하는 것이다.
UNIX계열 호스트의 경우에는 리좀버 서버(Resolver Server)의 IP주소를 설정하는 환경 구성 파일로 /etc/resolve.conf파 일을 가지고 있다. Windows 계열 호스트는 "내 네트워크 환경" 의 등록정보의 인터넷 프로토 콜 등록정보에서 IP주소를 설정한다. 일반적으로 널리 사용되 고 있는 BIND는 네임서버와 리졸버를 구현한 DNS서버 소프트웨어이다. 도메인 데이터베이 스를 구성하는 리소스 레코드는 존(Zone)파일로 지정하며, 여기에 작성된 텍스트 형태의 리 소스 레코드 데이터는 DNS 데몬(Daemon)의 구동시 그 텍스트 표기 내용을 해석하여 데이 터베이스 형식으로 변환하고, 메모리에 리소스 레코드 데이터베이스를 구성한다.
BIND의 경우, 네임서버와 리졸버를 모두 네임 데몬(Name Daemon)에 포함하고 있다. 따라 서 BIND는 용도에 따라 네임서버로만 동작하게 하거나, 네임서버와 리졸버 모두의 기능을 수행하도록 설정 및 운영 할 수 있다.
이상과 같이 도메인네임 시스템(DNS)은 도메인네임체계와 각 도메인네임에 대한 속성정보 인 리소스 레코드들을 네임서버 소프트웨어로 구현하여 시스템화 하였다. 또한 분산 구조의 도메인네임 데이터베이스에 접근하여 원하는 도메인네임의 리소스 레코드 데이터를 검색하 기 위한 수단으로써 소프트웨어로 구현된 리졸버를 정의하였다. 그리고 최종 단말인 호스트 에서는 도메인네임에 대한 주소 변환을 위해 호스트 내부에 구현된 스터브 리졸버를 사용하 여 원하는 네임 변환 요청을 항으로써 전체 인터넷상의 도메인 데이터베이스에서 원하는 정 보를 얻는 것이다.
DNS의 구성요소 간에는 상호 도메인 데이터베이스의 검색과 응답을 위한 프로토콜이 필요 하다. DNS 프로토콜온 애플리케이션 계층에 속하는 애플리케이션 프로토골이다.
DNS 프로토콜은 네트워크를 경유하여 DNS 구현요소 간에 DNS 질의(DNS Query)와 응답 (DNS Response)을 수행하기 위한 클라이언트/서버 모델의 애플리케이션 프로토콜이다.
DNS 프로토콜은 (TCP/UDP)/IP 프로토콜 스택 위에 존재한다.
DNS 프로토콜은 TCP 및 UDP 포트번호 53번 을 사용한다. 네임서버는 TCP와 UDP 53번 포트를 디폴트 포트(Default Port)로 하여 네트워크상의 요청에 대기한다. DNS 질의의 대부 분은 UDP 포트 53번을 사용하여 질의와 응답이 이루어진다. 그러나 UDP 헤더 이후의 DNS 헤더를 포함한 DNS 메시지 영역의 길이가 512 바이트를 초과하는 경우에는 TCP 53 번 포트를 사용하는 TCP 연결을 통한 DNS 질의와 응답이 이루어지는 매카니즘이 존재한다. 이외에 TCP가 사용되는 경우는 동일한 도메인 존(Domain Zone)을 가지고 있는 네임서버간 의 도메인 존(Domain Zone) 데이터 송수신을 위한 존 트랜스퍼(Zone Transfrer)를 수행하 는 경우이다. 이 경우에는 많은 데이터의 전송이 필요하기 때문에 TCP를 사용한 연결을 통 해 데이터 전송요청이 이루어지게 된다.
이와 같이 네임서버가 TCP와 UDP의 53번 포트를 사용하기 때문에 일반적으로 리눅스 서버 에서 네임서버를 운영할 때에는 iptables 방화벽 사용시 TCP 53번 포트와 UDP 53번 포트를 열어 주어야 정상적인 네임서버 기능을 할 수 있게 되는 것이다.
DNS 프로토콜은 네임서버와 리졸버 간, 그리고 리졸버와 스터브 리졸버 간에 사용된다. 스터브 리졸버와 응용 프로그램은 프로그래밍 인터페이스를 사용하며 DNS 프토토콜을 사 용하지 않는다.