DNS (Domain Name System) 란?
도메인 네임 시스템 (Domain Name System, DNS) 은 호스트의 도메인네임 (www.example.com)을 네트워크주소(192.168.1.0)로 변환하거나, 그 반대의 역할을 수행하는 시스템이다.
예를 들면 우리가 자주 접하는 naver.com , google.com 모두 DNS을 가진 DN(Domain Name)이라고 할 수 있다.
이들은 사실 사람이 파악하기 쉽도록 문자열로 변환된 IP이다.
서비스 | 도메인 주소 | IP 주소 |
다음(Daum) | daum.net | 203.133.167.81 |
네이버(Naver) | naver.com | 223.130.200.104 |
구글(Google) | google.com | 142.250.207.14 |
cmd에서 naver의 DN을 적어 ping을 확인해 보자
naver.com의 IP 주소는 210.130.195.200 인걸 확인할 수 있다.
원래는 IP주소를 브라우저에게 제공하면 해당 서버에서 홈페이지를 제공하는 식으로 동작한다.
하지만 우리가 저런 복잡한 숫자덩어리를 외우고 있기엔 너무 힘드니까, 마치 별명을 지어 전화번호부에 정리하고 접근하기 쉽게 하는 시스템 인 것이다.
사용자가 웹브라우저에 도메인 'naver.com'을 입력하면 아래와 같은 과정을 거치게 된다.
- 도메인 주소 naver.com을 브라우저에 입력하게 되면, 도메인 주소들을 가지고 있는 네임서버(DNS 서버)에 접속
- 네임서버에 접속한 도메인(naver.com)과 연결된 IP 정보(223.130.192.200)를 확인하고, IP를 사용자 PC에 전달
- 사용자 PC는 전달받은 서버의 IP 주소로 접속
- 서버의 IP로 연결된 브라우저에 서버의 내용(홈페이지)을 출력
물론 실제로 이렇게 간단히 이루어지지 않고 좀 더 복잡한 과정을 통해 출력 되어지게 된다.
DNS 작동 원리
위에서 DNS 동작에 대해 알아봤지만 보다 자세히 어떻게 동작하는지 알아보자.
위에서 소개했듯이 DNS 동작 과정을 큰 그림으로 본다면,
클라이언트가 도메인명을 브라우저에 검색하면, 먼저 도메인 정보가 저장된 네임 서버(DNS 서버)로 가서 도메인과 일치하는 IP주소로 가라고 지시하게 되고, 다시 그 IP주소로 접속하게 되면 홈페이지가 열리는 기본적인 흐름은 같다.
단지, DNS 서버에서 도메인 & IP정보를 얻는 과정이 약간 복잡하게 되어 있을 뿐이다.
전세계에 도메인 수가 너무 많기 때문에 DNS 서버 종류를 계층화해서 단계적으로 처리하기 때문이다.
DNS 동작 순서
1. 웹 브라우저에 www.naver.com을 입력하면 먼저 PC에 저장된 Local DNS(기지국 DNS 서버)에게 "www.naver.com"이라는 hostname에 대한 IP 주소를 요청한다.
※ 참고
Local DNS(기지국 DNS 서버) 란?
기본적으로 인터넷을 사용하기 위해선 IP를 할당해주는 통신사(KT, SK, LG 등...)에 등록하게 된다.
컴퓨터의 LAN선을 통해 인터넷이 연결되면, 가입했던 각 통신사의 기지국 DNS 서버가 등록되게 된다.
그러니까 KT를 사용하는 집이면 KT DNS가 되고, SK통신사 사용하는 집이면 SK DNS가 자동으로 셋팅 된다.
Local DNS 에는 "www.naver.com 의 IP 주소"가 있을 수도 없을 수도 있다. (여기서는 Local DNS에 "www.naver.com 의 IP 주소"가 없다고 가정 한다.)
만일 예전에 네이버에 접속했던 전적이 있다면, Local DNS에 접속정보가 캐싱이 되어있어, 바로 PC에 IP 주소를 주고 끝난다. (바로 1번 → 8번으로 넘어가 빠르게 웹페이지에 접속할수 있다)
2. 그러면 Local DNS는 이제 "www.naver.com 의 IP 주소"를 찾아내기 위해 다른 DNS 서버들과 통신(DNS 쿼리)을 시작한다.
먼저 Root DNS 서버에게 "www.naver.com 의 IP 주소"를 요청한다.
※ 참고
Root DNS(루트 네임서버) 란?
Root DNS는 인터넷의 도메인 네임 시스템의 루트 존이다.
ICANN이 직접 관리하는 절대 존엄 서버로, TLD DNS 서버 IP들을 저장해두고 안내하는 역할을 한다.
전세계에 961개의 루트 DNS가 운영되고 있다.
3. Root DNS 서버 는 "www.naver.com 의 IP 주소" 를 찾을 수 없어 Local DNS 서버에게 "www.naver.com 의 IP 주소 찾을 수 없다고 다른 DNS 서버에게 물어봐" 라고 응답을 한다.
4. 이제 Local DNS 서버는 com 도메인을 관리하는 TLD DNS 서버(최상위 도메인 서버)에 다시 www.naver.com에 대한 IP 주소를 요청한다.
※ 참고
TLD(Top-Level Domain, 최상위 도메인) DNS Server 란?
TLD는 도메인 등록 기관(Registry)이 관리하는 서버로, 도메인 네임의 가장 마지막 부분을 말한다.
예를들어 웹사이트에서 한번쯤은 봐왔던 .com 이나 co.kr 같은 도메인들을 관리하고 부여하는 서버이다.
Authoritative DNS 서버 주소를 저장해두고 안내하는 역할을 한다. (밑에서 배움)
5. com 도메인을 관리하는 DNS 서버에도 해당 정보가 없으면, Local DNS 서버에게 "www.naver.com 의 IP 주소 찾을 수 없음. 다른 DNS 서버에게 물어봐" 라고 응답을 한다.
6. 이제 Local DNS 서버는 naver.com DNS 서버(Authoritative DNS 서버)에게 다시 "www.naver.com 의 IP 주소" 를 요청한다.
※ 참고
Authoritative DNS Server 란?
실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버.
그래서 권한의 의미인 Authoritative가 붙는다.
일반적으로 도메인/호스팅 업체의 ‘네임서버’를 말하지만, 개인이나 회사 DNS 서버 구축을 한 경우에도 여기에 해당하게 된다.
7. naver.com DNS 서버 에는 "www.naver.com 의 IP 주소" 가 있다.
그래서 Local DNS 서버에게 "www.naver.com에 대한 IP 주소는 222.122.195.6" 라는 응답을 한다.
8. 이를 수신한 Local DNS는 www.naver.com 의 IP 주소를 캐싱을 하고 이후 다른 요청이 있을시 응답할 수 있도록 IP 주소 정보를 단말(PC)에 전달해 준다.
※ 참고
이렇게 Local DNS 서버가 여러 DNS 서버에 차례대로 (Root DNS 서버 → TLD DNS 서버(.com) → Authoritative DNS 서버(naver.com) 요청하여 그 답을 찾는 과정을 재귀적 쿼리 Recursive Query 라고 부른다.
DNS 서버 종류
DNS 동작 과정에서 잠시 소개되었던 도메인 서버 종류에 대해 자세히 알아보자
기지국 DNS 서버
인터넷을 설치시 각각 통신사가 있다. 그리고 각각의 통신사마다 DNS 서버가 존재한다.
위에서 다뤘듯이, URL에 Domain Name을 입력했을 때 해당 IP를 찾기위해 가장먼저 찾는 DNS서버 이다.
다시 복습하자면, "naver.com"이라는 도메인 주소를 입력했다고 했을 때, 다음과 같이 응답하게 된다
Root DNS 서버
위에서 기지국 DNS한테 우리는 처음 해당 도메인 네임에 대한 IP주소가 있는지 물어봤었다.
하지만 기지국 DNS서버에 해당 도메인에 대한 IP주소가 없을때는 해당 DNS서버는 Root DNS서버에게 물어보게 된다.
Root DNS는 최상위 DNS서버로 해당 DNS부터 시작해서 아래 딸린 node DNS 서버에게로 차례차례 물어보게 되는 구조로 짜여져 있다.
트리 구조로 되어 있으며 아래와 같다.
즉, 모든 DNS 서버들은 이 Root DNS Server의 주소를 기본적으로 갖고 있다는 말이다.
그래서 모르는 Domain name이 온다면 가장 먼저 Root DNS에게 물어보게 되는 것이다.
하지만 Root DNS Server의 목록에도 해당 Domain Name의 IP 정보가 없다면 다음 DNS 서버로 리턴을 해주는데, 그것이 바로 TLD(최상위 도메인) 서버 이다.
도메인이 google.com 이라면 뒤의 문자를 보고 .com을 관리하는 TLD 서버에게 물어보라고 정보를 주는 것이다.
Root DNS Server : "나한탠 해당 도메인 주소가 없다. 대신 google.com의 주소중 .com의 주소를 알고 있으니,
com DNS주소에게 물어봐라."
TLD 서버 (Top-Level Domaion, 최상위 도메인 서버)
위에서 살펴봤듯이, 인터넷 도메인의 체계에서 최상위는 루트(root)로서 인터넷도메인의 시작점이 된다.
그리고 이 루트도메인 바로 아래 단계에 있는 것을 1단계 도메인이라고 하며 이를 TLD(최상위 도메인)이라고 한다.
TLD 최상위 도메인은 국가명을 나타내는 국가최상위도메인과 일반적으로 사용되는 일반최상위도메인으로 구분된다.
도메인을 구입할 경우 1단계의 도메인중에 하나를 선택하고 원하는 도메인명을 지정하여 등록한다.
※ 참고
.biz : 사업
.com : 영리 목적의 기업이나 단체
.co.국가로 쓰기도 한다.(co.kr 등)
.edu : 미국의 4년제 이상 교육기관
.info : 정보 관련
.jobs : 취업 관련 사이트
.name : 개인 사용자
.net : 네트워크를 관리하는 기관
.org : 비영리 기관
좀더 깊숙히 들어가자면, 최상위 ICANN(인터넷주소 관리 기구) 아래에 REGISTRY, NIC(국가단위)가 있고, REGISTRY 아래에 우리가 흔이 보는 gTLD(.com / .net) 그리고 new gTLD가 있고, NIC아래에는 공공사이트에서 쓰는 ccTLD(.kr / .jp) 도메인 주소가 있다.
※ 참고
예를들어 velog.io 와 github.io (깃허브 블로그)는 영국령 인도양 지역의 인터넷 국가 코드 최상위 도메인이다.
.io 도메인을 쓰면 기존 com, net이 점유하고 있던 도메인들을 벗어나 새롭게 도메인을 확보할 수 있다고 한다.
Second-level DNS 서버 (2차 도메인)
위에서 Root DNS 서버에서 return해준 TLD 서버주소를 기지국 DNS 서버에서 받아서 다시 TLD 서버에 요청을 했었다.
그리고 TLD 서버에서는 Second-level DNS 서버를 return 해준다.
만일 naver.com 이나 google.com을 요청했다면, TLD 서버에서 .com을 파악하고 그 앞에 달린 문자열을 보고 네이버나 구글 서버에게 요청을 하는 것이다.
그렇게 요청 받은 Second DNS 서버는 자체적으로 sub 도메인 서버로 또 넘기게 된다.
Sub DNS 서버 (최하위 서버)
서브 도메인 서버는 www. dev. mail. cafe. 등등 을 구분하는 최하위 서버를 말한다.
naver 서버라도 그 안에서 네이버 홈, 메일, 블로그, 카페 등 여러 서비스가 있다. 이 서비스들을 구분하는 도메인 네임이라고 보면 된다.
정리하자면 DNS 서버는 다음과 같은 구조로 되어 있는 것이다.
DNS 문자열 구조
위에서 DNS 동작 과정과 더불어 DNS 서버가 맡는 역할들을 알아보았다.
정리 하자면, 우리가 아무 생각없이 사용하던 도메인 url은 다음과 같이 구성되어 있던 것이다.
모든 컴퓨들은 Root domain DNS server의 IP 주소는 알고있다.
그리고 Root domain을 담당하는 DNS 서버는 TLD(Top-level domain)을 담당하는 서버 목록과 IP를,
TLD(Top-level domain)을 담당하는 DNS 서버는 Second-level domain을 담당하는 서버 목록과 IP를,
Second-level domain을 담당하는 DNS 서버는 SUb domain을 담당하는 서버 목록과 IP를 알고 있는것이고,
결국, blog.example.com.의 IP주소는 Sub domain을 전담하고 있는 DNS 서버가 알고 있는 것이다.
- Host가 Root에 IP를 물어봄
- com으로 끝나니까, com을 전담하는 DNS server를 알려줌
- example.com을 전담하는 DNS server를 알려줌
- Sub domain DNS server를 알려줌
- 해당 Domain에 대한 IP 주소를 Host에게 보냄
- IP 주소 get!
DNS Cache
위 과정을 통해 우리 PC는 "www.naver.com" 의 IP주소를 성공적으로 받아왔었다.
몇 분 후 다시 "www.naver.com"에 방문하려고 했을 때, 또다시 위와 같은 복잡한 과정을 반복해서 IP 주소를 받아올까?
그러면 너무 비 효율적이다.
때문에, PC에는 DNS Cache라는 Cache를 활용해 Cache안에 자주 쓰는 Domain Name 주소를 저장해 놓는다.
이를 확인하는 방법은 Window 기준 다음과 같다.
> ipconfig /displaydns
이런 Cache정보가 수십개 나오게 된다.
이 정보를 가지고 우리 PC는 찾는 과정 없이 바로 IP주소를 찾을 수 있게 되는 것이다.
위에 TTL(Time To Live)라는 옵션값은 DNS서버나 사용자 PC의 캐쉬(메모리)에 3600초를 시작으로 매초마다 시간이 감소 되다 0이 되면 메모리에서 사라지게 된다. (사진상에는 캐쉬가 사라지기까지 19초 남았다는 뜻이다)
DNS 사용 시 주의사항
DNS 캐시를 통해서 좀더 빠른 응답속도를 얻을수 있지만 문제점도 존재한다
바이러스나 네트워크 오류, 혹은 여러가지 이유로 DNS 캐시정보가 변조될수 있기 때문이다
즉, 특정 도메인을 입력했을 때 원래의 IP 주소가 아닌 해킹사이트 IP 주소로 변경될 수 있다. 그래서 주기적으로 캐싱된 DNS 를 정리해 줄 필요가 있다
참고