DNS의 개념
1. DNS (Domain Name System)란?
DNS는 한마디로 말해서 사람들이 쓰기 편한 호스트 네임(www.naver.com)을 컴퓨터가 알아들을 수 있는 아이피 주소(125.209.222.141)로 바꿔주는 서비스이다.
세상에 있는 모든 서버의 주소는 IP 주소를 가지고 있다. 따라서 사용자들이 해당 서버에 접속하기 위해서는 그 서버의 IP 주소를 외우고 입력해야 한다. 하지만, IP 주소는 보다시피 그냥 숫자와 점의 조합으로 이루어진 주소로, 사람들이 외우고 사용하기 매우 불편하다.
그래서 DNS 라는 서비스를 이용해 영문 주소와 IP 주소를 쉽게 매핑(mapping)하여 사용할 수 있는 것이다.
즉, 우리는 인터넷을 사용할 때 항상 DNS 서비스를 이용하는 셈이다. 유튜브를 보려고 www.youtube.com에 접속할때도 알게 모르게 DNS 서비스를 이용하게 된다.
참고로 Host name과 Domain name을 헷갈리기 쉬운데 Host name은 컴퓨터의 이름, Domain name은 컴퓨터 그룹의 이름이라고 생각하면 된다.
www.naver.com , kin.naver.com, cafe.naver.com 에서 www, kin, cafe는 Host name이고 naver.com 은 Domain name 이다.
2. DNS가 제공하는 서비스
1) Hostname 을 IP 주소로 바꿔주는 서비스
- DNS의 가장 기본적인 서비스이다.
2) Host aliasing
- 호스트 이름이 너무 길 경우, 줄여서 부를 수 있도록 매핑 정보를 제공할 수 있다.
- 예를 들어 우리가 잘 알고있는 www.naver.com의 실제 호스트 이름은 www.naver.com.nheos.com이다. 이게 너무 기니까 전자와 같이 줄여서 부르는 것이 편하다.
3) Mail server aliasing
- 사용자들이 쓰는 메일 주소를 실제 메일 서비스를 제공하는 서버와 매핑시켜주는 기능을 제공할 수 있다.
- 예를 들어 ~~~@naver.com 이라는 이름으로 메일 서비스를 이용 했을 때, 해당 메일 서비스를 담당하는 메일 서버의 호스트명은 mx1.naver.com 이다.
4) Load distribution
- 서버에 여러개의 IP 주소를 대응하게 해줌으로써 서버의 부담을 분산해주는 기능을 제공할 수 있다.
- 예를 들어 네이버 서버의 IP 주소는 125.209.222.141과 223.130.195.95 두개이다. 이처럼 IP 주소를 여러개로 대응시킴으로써 네이버 서버의 부담을 분산해줄 수 있다. 하지만, 그렇다고 해서 네이버 서버를 두개의 컴퓨터가 담당하고 있다는 것은 아니다.
3. DNS 구조
DNS는 기본적으로 아래 그림과 같이 계층적인 구조를 가지고 있다.
위의 그림에서 가장 최상위에 위치한 DNS 서버를 루트 네임 서버라 하고,
그 바로 아래에 있는 DNS 서버를 TLD 네임 서버라고 한다. (Top Level Domain name)
그리고 실제 IP 주소를 가지고 있는 DNS 서버를 Authoritative name server라고 한다.
따라서 만약 사용자가 www.amazon.com 라고 주소창에 입력하면, 루트 네임 서버가 .com을 담당하는 TLD 네임 서버를 찾아준다. .com 을 담당하는 TLD 네임서버는 amazon.com을 담당하는 DNS 서버를 찾아줄 것이고, 결국 원하는 웹사이트의 IP 주소를 찾을 수 있게 된다.
루트 네임 서버는 초기에 13개만 존재했다. 대부분이 미국에 존재했으므로, 각 Local DNS 서버가 루트 네임 서버에 쿼리를 날리기 위해서는 해외에 존재하는 루트 네임 서버에 접근해야만 했다. 하지만, 현재는 13개의 루트 네임 서버를 미러링하는 서버가 우리나라를 포함한 전세계에 있으므로 그걸 이용하면 된다.
TLD 서버는 크게 두가지로 분류할 수 있다.
1) 특정 국가에서 관리하는 ccTLD (contry code TLD) ex] kr, jp, cn, uk, ...
2) 특정 기관에서 관리하는 gTLD (generic TLD) ex] org, edu, com, ...
앞서 DNS 는 계층적인 구조를 가지고 있다고 했는데, 특정 DNS 서버의 하위 DNS 서버는 해당하는 상위 DNS 서버가 모두 책임지고 관리하는 형태이다. 예를 들어 kr 이라는 TLD에 속해있는 하위 DNS 서버인 co, ac, re 등은 모두 kr가 관리해야한다.
4. Local DNS 서버
Local DNS 서버는 DNS 서비스를 이용할 때, 도와주는 역할을 한다.
주로 KT나 SKT 같은 ISP가 가지고 있으며, 사용자가 DNS 쿼리를 날리면 local DNS 서버가 가장 먼저 받게 된다.
실제로 DNS 가 동작하는 과정을 살펴보자. DNS 쿼리를 처리하는 방식에 따라 1) Iterative query와 2) recursive query 두가지로 분류할 수 있다.
[1] Iterative query
1) 사용자가 특정 호스트 이름의 IP 주소를 요청하는 쿼리를 날리면, Local DNS 서버가 먼저 받는다.
2) Local DNS 서버는 루트 네임 서버에게 쿼리를 날리고, 루트 네임 서버는 .edu에 해당하는 TLD를 알려준다.
3) Local DNS 서버는 edu에 해당하는 TLD에게 쿼리를 날리고, TLD는 umass.edu에 해당하는 DNS 서버를 알려준다.
4) Local DNS 서버는 umass.edu에 해당하는 DNS 서버에게 쿼리를 날리고, 해당 DNS 서버는 gaia.cs.umass.edu에 해당하는 IP 주소를 알려준다. 즉, umass.edu를 책임지는 DNS 서버가 authoritative name 서버인 것이다.
5) 마지막으로 Local DNS 서버가 사용자에게 IP 주소를 전달한다.
[2] Recursive query
1) 사용자가 특정 호스트 이름의 IP 주소를 요청하는 쿼리를 날리면, Local DNS 서버가 먼저 받는다.
2) Local DNS 서버는 루트 네임 서버에게 쿼리를 날리고, 루트 네임 서버는 .edu에 해당하는 TLD 서버에게 쿼리를 날린다.
3) edu에 해당하는 TLD 서버는 umass.edu에 해당하는 DNS 서버에게 쿼리를 날린다.
4) umass.edu에 해당하는 DNS 서버는 gaia.cs.umass.edu에 해당하는 IP 주소를 TLD 서버에게 알려준다. 즉, umass.edu를 책임지는 DNS 서버가 authoritative name 서버인 것이다.
5) TLD 서버는 루트 네임 서버에게 IP 주소를 알려준다.
6) 루트 네임 서버는 Local DNS 서버에게 IP 주소를 알려준다.
7) 마지막으로 Local DNS 서버가 사용자에게 IP 주소를 전달한다.
5. DNS caching
DNS 도 Local DNS 서버를 통해 caching을 한다.
Local DNS 서버에 이전에 사용했던 DNS 매핑 정보를 저장해 놓고, 같은 질의가 오면 빠르게 처리하는 방식이다. TTL(Time To Live) 개념을 사용하여, 특정기간동안 사용되지 않으면 자동으로 삭제된다.
특히 TLD 네임 서버는 Local DNS 서버에 캐싱되어 있는 경우가 많으므로, 루트 네임 서버에게 TLD 네임 서버를 물어보지 않는 경우가 대다수이다.
만약 특정 DNS 서버 내의 데이터가 바뀌면, IETF 표준 프로토콜을 이용해 자신을 캐싱하고 있는 DNS 서버에게 알려준다. (RFC 2136 참고)
6. DNS Resource Record
앞서 DNS 서버에서 IP주소와 호스트 네임을 매핑하고 있으며, DNS 서버에게 묻고 답하는 형태로 동작하는 것을 알아보았다. 그렇다면, 과연 어떤 식으로 매핑되어 있고, 어떤 형태로 묻고 답할까?
답은 바로 DNS 서버의 데이터베이스에 저장된 DNS Resource Record(RR) 를 통해 동작한다.
RR에는 type, name, ttl 등을 명시하고 있다. 특히 type의 경우 대표적으로 다음과 같은 종류가 있다.
1) type=A
- 호스트 네임을 IP 주소에 매핑하는 레코드
2) type=CNAME
- 실제 호스트 네임과 연결되는 별명을 정의하는 레코드 (실제 호스트 네임이 있어야 한다. 즉, type=A 레코드가 있어야 설정 가능하다.)
3) type=MX
- 메일 서버에 접근할 수 있는 정보를 제공하는 레코드
4) type=NS
- 해당 호스트 네임에 해당하는 authoritative name 서버를 제공하는 레코드
nslookup 툴을 이용하면 위와 같은 레코드를 활용해 물어보고 응답받을 수 있다. 참고로 type=NS일 경우 앞에 www는 빼주고 물어봐야 한다.
오늘 내용을 정리해보면,
1. DNS 는 호스트 네임을 IP주소로 매핑해주는 서비스이다.
2. DNS 는 계층적인 구조로 동작한다.
3. Local DNS 서버는 DNS 서비스를 도와주는 역할을 한다.
4. DNS 쿼리를 처리하는 방식에 따라 Iterative query와 Recursive query로 나눌 수 있다.
본 내용은 공부하며 정리한 것으로, 오류가 있을 수 있습니다.