DNS의 개념과 작동원리
📌 DNS (Domain Name System)
도메인네임시스템 (Domain Name System, DNS)는 호스트의 도메인네임(www.naver.com)을
네트워크주소(223.130.195.200)로 변환해주거나, 그 반대의 역할을 수행하는 시스템
naver.com, google.com 등의 주소들도 Domain Name인것이며 이들은 문자열의 탈을 쓴 IP이다
이처럼 cmd에서 ping을 찍어보면 해당 Domain Name의 IP를 확인할 수 있으며
보이는 바와 같이 naver.com 이라는 DN은 223.130.195.200 이라는 IP를 가리키고있다.
이렇게 DN으로 조회된 ip를 주소창에 www.naver.com 대신 입력하게되면 마찬가지로 네이버홈페이지로 가게된다.
그렇다면 왜 DN을 쓸까?
저 ip주소를 직접 외워서 사용하는 사람은 많지 않을것이다. 휴대전화로 예를들면 홍길동한테 문자를 보내려면 전화번호부에 저장해둔 홍길동을 찾는게 010-1234-5678을 외워서 직접 입력하는 것보다 간편하기때문이다.
📌 DNS의 작동원리
1. 도메인주소 naver.com을 주소창에 입력
2. 도메인주소들을 갖고있는 네임서버 (DNS서버)에 접속
3. 네임서버에 접속한 도메인(naver.com)과 연결되어있는 IP정보(223.130.195.200)을 확인하고 IP를 사용자PC에 전달
4. 사용자 PC는 전달받은 서버의 IP주소로 접속
5. 서버의 IP로 연결된 브라우저에 서버의 내용(홈페이지)를 출력
클라이언트가 도메인명(DN)을 브라우저에 입력하게되면, 도메인정보가 저장된 네임서버 (DNS서버)로 가서 도메인과 일치하는 IP주소로 가라고 지시하고, 다시 해당 IP주소로 접속하게되면 홈페이지가 열리는 흐름이다.
단지, DNS서버에서 도메인&IP정보를 얻는 과정이 복잡하게 되어있는데
이는 전세계에 도메인의 수가 너무 많으므로 DNS서버 종류를 계층화해서 단계적으로 처리하기 때문이다.
📍 DNS 동작 순서
1. 웹 브라우저에 www.naver.com 을 입력하면 먼저 PC에 저장된 Local DNS(기지국 DNS서버)에게 "www.naver.com" 이라는 호스트네임에 에 대한 IP주소를 요청한다
💡 Local DNS(기지국 DNS 서버) 란?
기본적으로 인터넷을 사용하기 위해선 IP를 할당해주는 통신사(KT, SK, LG 등...)에 등록하게 된다.
컴퓨터의 LAN선을 통해 인터넷이 연결되면, 가입했던 각 통신사의 기지국 DNS 서버가 등록되게 된다.
그러니까 KT를 사용하는 집이면 KT DNS가 되고, SK통신사 사용하는 집이면 SK DNS가 자동으로 셋팅 된다.
Local DNS에는 "www.naver.com의 IP주소"가 있을 수도 있고 없을 수도 있다.(이 포스팅에서는 없다고 가정)
만일 이전에 네이버에 접속했던 기록이 있다면 Local DNS에 접속정보가 캐싱되어있어 바로 PC에 IP주소를 주고끝난다(현재1번에서 8번으로 바로 넘어가는것이다)
⬇
2. "www.naver.com"이 없었으니 Local DNS는 해당 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 서버 종류
📍 Local(기지국 DNS)서버
위에서 다뤘듯, URL에 Domain Name을 입력했을 때 해당 IP를 찾기위해 가장 먼저 찾는 DNS서버로
"naver.com" 이라는 주소를 입력했을때
찾는 도메인주소가 있다면 -> Local DNS Server : "해당 IP주소는 000.000.000.000 이야"
찾는 도메인주소가 없다면 -> Local DNS Server : "우리는 없으니까 Root DNS서버에 물어볼게"
📍 Root DNS 서버
위에서 Local DNS서버에게 "naver.com에 대한 IP주소"가 있는지 물어보았고 해당 도메인주소가 없다면 Root DNS서버에 물어보게된다.
Root DNS는 최상위 DNS서버로 해당 DNS부터 시작해서 아래 딸린 node DNS서버에게로 차례차례 물어보게되는 트리 구조로 짜여져있다.
즉, 모든 DNS 서버들을 이 Root DNS Server 의 주소를 기본적으로 갖고있다는 말이다.
때문에 모르는 Domain Name이 온다면 가장먼저 Root DNS 에게 물어보게되는것이다.
하지만 Root DNS Server의 목록에도 해당 Domain Name의 IP정보가 없다면 다음 DNS서버로 요청해주는데 그것이 TLD(최상위 도메인) 서버이다. 도메인이 naver.com.com 이라면 뒤의 문자를 보고 .com을 관리하는 TLD서버에게 물어보라고 정보를 주는것이다.
Root DNS Server : "나는 해당도메인주소를 갖고있지 않지만 naver.com중 .com을 알고있으니 com DNS주소에게 물어봐라"
📍 TLD 서버 ( Top-Level Domain, 최상위 도메인 서버 )
인터넷 도메인의 체계에서 최상위는 루트(root)이며 인터넷도메인의 시작점이된다.
그리고 이 루트 도메인 바로 아래단계에 있는것을 1단계 도메인이라고 하며 이를 TLD(최상위 도메인)이라고 한다.
TLD는 국가명을 나타내는 국가최상위도메인과 일반적으로 사용되는 일반최상위도메인으로 구분된다.
도메인을 구입할경우 1단계의 도메인중에 하나를 선택하고 원하는 도메인명을 지정하여 등록한다
좀더 깊게 보자면 최상위 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서버주소를 Local DNS서버에서 받아 다시 TLD서버에 요청을 했다.
그리고 TLD서버에서는 Second-level DNS서버를 return해준다
만약 naver.com을 요청했다면, TLD서버에서는 .com을 파악하고 그 앞의 문자열(naver)을 확인한 뒤 네이버 서버에 요청하는것이다.
그렇게 요청받은 Second DNS서버는 자체적으로 sub도메인 서버로 다시 넘기게된다
📍 Sub DNS 서버 (최하위서버)
서브도메인서버란 www. dev. mail. cafe. 등의 구분을 하는 최하위서버를 말한다
naver 서버라도 메일, 카페, 블로그 등 여러 서비스가 있고 이들을 구분하는 도메인네임이라고 보면 된다.
ex) "www.naver.com" , "mail.naver.com", "cafe.naver.com" ,,,
📌 DNS 문자열 구조
지금까지 사용해오던 도메인 url은 다음과 같은 구성으로 이루어져있던것이다.
모든 Computer들은 Root domain DNS server의 IP주소는 알고있다.
Root domain을 담당하는 DNS서버는 TLD(Top-level domain)를 담당하는 서버목록과 IP를,
TLD(Top-level domain)를 담당하는 DNS서버는 Second-level domin을 담당하는 서버목록과 IP를,
Second-level domain을 담당하는 DNS서버는 Sub domain을 담당하는 서버목록과 IP를 알고있는것이고
결국 blog.example.com.의 IP주소는 Sub domain을 전담하고있는 DNS서버가 알고있는것이다.
-참고페이지
https://inpa.tistory.com/entry/
https://www.netnod.se/i-root/what-are-root-name-servers