DNS: domain name system
DNS는 한마디로 말해서 사람들이 쓰기 편한 호스트 네임(www.naver.com
)을 컴퓨터가 알아들을 수 있는 아이피 주소(125.209.222.141
)로 바꿔주는 시스템이다.
세상에 있는 모든 서버의 주소는 IP 주소를 가지고 있다.
따라서 사용자들이 해당 서버에 접속하기 위해서는 그 서버의 IP 주소를 외우고 입력해야 한다.
하지만, IP 주소는 보다시피 그냥 숫자와 점의 조합으로 이루어진 주소로, 사람들이 외우고 사용하기 매우 불편하다.
그래서 DNS 라는 서비스를 이용해 영문 주소와 IP 주소를 쉽게 매핑(mapping)하여 사용할 수 있는 것이다.
DNS가 제공하는 서비스
-
- Hostname을 IP 주소로 바꿔주는 서비스 (hostname to IP address translation)
- DNS의 가장 기본적인 서비스이다.
-
- Host aliasing
- 호스트 이름이 너무 길 경우, 줄여서 부를 수 있도록 매핑 정보를 제공할 수 있다.
- 예를 들어 우리가 잘 알고있는
www.naver.com
의 실제 호스트 이름은www.naver.com.nheos.com
이다. 이게 너무 기니까 전자와 같이 줄여서 부르는 것이 편하다.
-
- 도메인 이름으로 메일 서버의 호스트 이름 찾기 (Mail server aliasing)
- 사용자들이 쓰는 메일 주소를 실제 메일 서비스를 제공하는 서버와 매핑시켜주는 기능을 제공할 수 있다.
- 예를 들어
~~~@naver.com
이라는 이름으로 메일 서비스를 이용 했을 때, 해당 메일 서비스를 담당하는 메일 서버의 호스트명은mx1.naver.com
이다.
-
- 동일 도메인 주소에 접근하는 클라이언트들에게 IP 주소 분산 시켜 주기 (Load distribution)
- 서버에 여러개의 IP 주소를 대응하게 해줌으로써 서버의 부담을 분산해주는 기능을 제공할 수 있다.
- 예를 들어 네이버 서버의 IP 주소는
125.209.222.141
과223.130.195.95
두 개이다. - 이처럼 IP 주소를 여러개로 대응시킴으로써 네이버 서버의 부담을 분산해줄 수 있다.
- 하지만, 그렇다고 해서 네이버 서버를 두개의 컴퓨터가 담당하고 있다는 것은 아니다.
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개의 루트 네임 서버를 미러링하는 서버가 전세계에 있으므로 그걸 이용하면 된다. 현재, 우리나라에서 가장 가까운 건 도쿄에 있는 서버이다.
- 만일 DNS 서버를 하나로 둔다면?
- 시간이 오래 걸림 (traffic volume / distant centralized database)
- Single Point of Failure (하나의 centralized server die > 서비스 중단)
- maintenance
Local DNS 서버
Local DNS 서버는 DNS 서비스를 이용할 때, 도와주는 역할을 한다.
주로 KT나 SKT 같은 ISP가 가지고 있으며, 사용자가 DNS 쿼리를 날리면 local DNS 서버가 가장 먼저 받게 된다.
DNS 쿼리를 처리하는 방식에 따라 Iterative query와 recursive query로 분류할 수 있다.
Iterative query
- 사용자가 특정 호스트 이름의 IP 주소를 요청하는 쿼리를 날리면, Local DNS 서버가 먼저 받는다.
- Local DNS 서버는 루트 네임 서버에게 쿼리를 날리고, 루트 네임 서버는 .edu에 해당하는 TLD를 알려준다.
- Local DNS 서버는 edu에 해당하는 TLD에게 쿼리를 날리고, TLD는 umass.edu에 해당하는 DNS 서버를 알려준다.
- Local DNS 서버는 umass.edu에 해당하는 DNS 서버에게 쿼리를 날리고, 해당 DNS 서버는 gaia.cs.umass.edu에 해당하는 IP 주소를 알려준다. 즉, umass.edu를 책임지는 DNS 서버가 authoritative name 서버인 것이다.
- 마지막으로 Local DNS 서버가 사용자에게 IP 주소를 전달한다.
Recursive query
- 사용자가 특정 호스트 이름의 IP 주소를 요청하는 쿼리를 날리면, Local DNS 서버가 먼저 받는다.
- Local DNS 서버는 루트 네임 서버에게 쿼리를 날리고, 루트 네임 서버는 .edu에 해당하는 TLD 서버에게 쿼리를 날린다.
- edu에 해당하는 TLD 서버는 umass.edu에 해당하는 DNS 서버에게 쿼리를 날린다.
- umass.edu에 해당하는 DNS 서버는 gaia.cs.umass.edu에 해당하는 IP 주소를 TLD 서버에게 알려준다. 즉, umass.edu를 책임지는 DNS 서버가 authoritative name 서버인 것이다.
- TLD 서버는 루트 네임 서버에게 IP 주소를 알려준다.
- 루트 네임 서버는 Local DNS 서버에게 IP 주소를 알려준다.
- 마지막으로 Local DNS 서버가 사용자에게 IP 주소를 전달한다.
DNS caching
DNS도 Local DNS 서버를 통해 caching을 한다. Local DNS 서버에 이전에 사용했던 DNS 매핑 정보를 저장해 놓고, 같은 질의가 오면 빠르게 처리하는 방식이다. TTL(Time To Live) 개념을 사용하여, 특정 기간동안 사용되지 않으면 자동으로 삭제된다.
특히 TLD 네임 서버는 Local DNS 서버에 캐싱되어 있는 경우가 많으므로, 루트 네임 서버에게 TLD 네임 서버를 물어보지 않는 경우가 대다수이다.
함께 보면 좋은 글
[네트워크] Cookies(쿠키), Web caches(웹 캐시), Proxy server(프록시 서버)
참고 자료
- Computer Networking: A Top Down Approach 6th edition - Jim Kurose, Keith Ross Addison-Wesley March 2012
- https://ddongwon.tistory.com/m/74
- https://velog.io/@lychee/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-2.4#iterated-query
'Computer Science > Computer Network' 카테고리의 다른 글
[네트워크] "BitTorrent" - P2P applications (2) (0) | 2022.10.18 |
---|---|
[네트워크] "Napster", "Gnutella" - P2P applications (1) (0) | 2022.10.18 |
[네트워크] Cookies(쿠키), Web caches(웹 캐시), Proxy server(프록시 서버) (0) | 2022.10.17 |
[네트워크] Web, HTTP(Hyper Text Transfer Protocol) (0) | 2022.10.17 |
[네트워크 애플리케이션 구조] client-server, P2P (0) | 2022.10.17 |