Domain Name System의 약자로 IP주소를 외우기 어렵기 때문에 DNS를 이용하여 IP주소를 매핑해주어 복잡한 IP를 외우지 않아도 호스트에 접근할 수 있다.
과거에는 하나의 호스트 파일에 모든 주소와 이름을 저장하고 주기적으로 갱신했다. 모든 주소와 이름을 호스트파일에 저장을 하면 크기가 너무 커지고 전 세계의 모든 호스트파일에 변화가 있을 때 마다 갱신하는 것은 불가능하기 때문에 오늘날에는 여러대의 DNS서버를 이용하여 관리하고 있다.
khweather.devookim.ga
를 예시로 들어보자.
도메인의 마지막에는 .
이 찍혀있는데 생략되어있다. 정확하게는 khweather.devookim.ga.
인 것 이다.
마지막 .
은 Root, ga
는 Top-level, devookim
은 Second-level, kheather
은 sub로 나눌 수 있다.
도메인 이름 공간은 도메인 이름을 트리 형태로 구성한 것이다. 트리는 루트 존에서 시작하여 여러개의 하위 존으로 나뉜다. 각 DNS존은 하나의 권한 있는 네임 서버에 의해 관리되는 노드들의 집합이다.
khweather.devookim.ga
에서
ga
가 최상이 노드이고
devookim
은 ga
도메인의 서브도메인이며
khweather
은 devookim.ga
도메인의 서브도메인이다.
서브도메인은 127단계까지 가능하며 각 레이블은 최대 63개의 문자를 사용할 수 있고 전체 도메인 이름은 253자를 넘을 수 없다.
1) 클라이언트가 khweather.devookim.ga
에 접속하려고 할 때 맨 처음 로컬 NS로 요청을 보낸다. 로컬 네임서버는 루트 서버의 주소를 알고 있기 때문에 루트서버에 요청을 보낸다.
2) 루트서버는 최상위 도메인 서버에 khweather.devookim.ga
를 참조하라고 요청을 보낸다. 그러면 ga
네임서버가 응답을 할 것이고 ga
네임서버의 주소를 로컬 네임서버에 응답한다.
3) 로컬 네임서버는 ga
네임서버에 khweather.devookim.ga
를 참조하라고 요청보내고 devookim
네임서버가 응답을 한다. 그러면 ga
네임서버는 devookim
네임서버의 주소를 로컬 네임서버에 응답한다.
4) 로컬 네임서버는 결국 khweather
네임서버의 주소를 알게 되었고 khweather.devookim.ga
를 참조하라고 요청을 보낸다. khweather
네임서버는 IP주소를 알고있기 때문에 로컬네임서버에 IP주소를 응답한다.
5) IP주소를 응답받은 로컬 네임서버는 클라이언트에게 IP주소를 응답한다.
각 서버에는 도메인네임 혹은 서버주소와 도메인타입을 통해 권한을 판별한다.
예를 들어 Top-level domain
서버 에서는 dns4u.ga
에 대한 요청을 ns01.freenom.com
주소로 응답하고 있고 authoritative name server
는 dns4u.ga
에 대한 요청을 52.231.13.22
주소로 응답하고 있다.
이런 과정을 이름-주소 해석(name - address resolution)이라고 하는데 두가지 방식이 있다.
반복적 해석(iterative)
위 예시처럼 네임서버에 들어온 요청에 대해 IP주소가 존재하면 IP주소를 응답하고 그렇지 않으면 다른 네임서버의 주소를 응답하며 반복 해석한다.
재귀적 해석(recursive)
서버가 요청에 대한 권한이 없다면 다른 네임서버에 쿼리를 전달하면서 반복 해석한다.
A
도메인을 ip로 가르키게 하는 것
CNAME
도메인을 다른 도메인으로 가르키게 하는 것