DNS 는 Domain Name Service의 약자로 도메인 이름을 기반으로 IP 주소를 알아내는 이름 해석의 과정을 거친다.
보통 구글에 접속할 경우에 google.com 으로 URL을 작성한 뒤 접속을 한다.
하지만 구글의 IP 주소는 따로 존재한다.
이런식으로 IP 주소 대신 특정 호스트를 지칭하는 이름을 사용하여 쉽게
목적지 주소를 기억할 수 있도록 하는 방식이 존재한다.
네트워크에서 도메인 이름을 기반으로 IP 주소를 알아내는 것을 이름해석(name resolution) 이라고 한다.
이러한 역할을 수행하는 것이 DNS 이다.
예를들어 사용자가 웹브라우저로 www.google.com 으로 URL을 입력하면서 구글의 아이피 주소를 물어본다.
그럼 해당 DNS 서버에서 구글의 IP주소를 알려주며 해당 IP 주소로 접속하는 과정을 거친다.
이러한 과정이 도메인 이름을 기반으로 IP 주소를 알아낸 이름해석의 과정이다.
이런식으로 도메인 이름으로 호스트 IP주소를 얻는 조회 방법을 '정방향 조회(Forward Query)' 라고 부른다.
반대로 호스트 IP 주소로 도메인 이름을 얻는 방법은 '역방향 조회(Reverse Query)'라고 부른다.
일반적으로는 정방향 조회를 대부분 사용한다.
DNS 는 호스트를 식별하고 관리하기 위해서 도메인 네임 공간이라는 계층 구조를 갖는다.
이 계층 구조는 트리형으로 위의 그림과 같이 생겼다.
맨 위층의 최상의 도메인은 Top Level Domain 으로 TLD 라고 부른다.
그 아래 하위에는 서브도메인이 있으며 주로 최상위 도메인에 등록 기관에서 관리하는 기관의 이름을 나타낸다.
또 아래 호스트 이름은 특정 호스트의 이름을 지칭한다.
앞에서 DNS의 이름해석 기능은 도메인 이름을 기반으로 IP를 알아낸다고 언급했다.
DNS 는 DNS 클라이언트를 통해 DNS 서버에 질의를 보낸다.
이 질의 방식에는 재귀적 질의 방식과 반복적 질의 방식이 존재한다.
1. 재귀적 질의 방식의 동작
클라이언트는 Local DNS 서버를 통해 Root DNS 서버에 요청하고
루트 서버는 해당 도메인의 IP 주소가 자신의 서버에 등록되었는지를 검사하게 된다.
만약 등록되어있지 않다면, 아래층 서버인 TLD DNS 서버에 질의한다.
그러면 TLD DNS 서버에서도 자신의 서버에 해당 도메인의 IP 주소가 등록되어 있는지 검사한다.
등록되어 있지 않다면 또 아래 서버에 질의하게 된다.
이런식으로 재귀적으로 해당 도메인의 IP 주소를 가지고 있는 서버까지 요청을 하고
응답을 받아오는 것이 재귀적 질의 방식이다.
2. 반복적 질의 방식의 동작
반복적 질의 방식은 최종적인 IP 주소를 받을 때까지
요청과 응답을 계속 하는 방식이다.
Local DNS 서버가 ROOT DNS 서버에게 도메인의 IP 주소를 질의하고,
루트서버는 자신은 모르지만 TLD DNS 서버의 IP주소를 응답으로 반환한다.
그럼 Local DNS 서버가 다시 TLD 서버로 해당 도메인의 IP 주소를 질의하고,
TLD 서버는 서브 도메인 서버의 IP 주소를 응답으로 반환한다.
같은 상황을 반복하여 최종적으로 해당 도메인의 IP 주소를 응답받은 Local DNS 서버는
해당 IP 정보를 클라이언트에게 전달한다.
이러한 방식으로 최종적으로 IP 주소를 응답받을 때까지 요청과 응답을
반복해서 주고받는 방식이 반복적 질의 방식이다.