요즘 TCP/IP 네트워크 과정을 다이어그램으로 시각화하는 과정을 그리고 있다. 공부했던 DNS 부분이 딱 한마디로 퉁쳐지는 것을 느꼈다. "DNS 서버에게 IP주소를 받아온다." 분명 무언가 더 많을텐데. 하여 찾아보니 역시나 복잡한 과정이 있었다. 우선 다이어그램으로 같이 나타낼 수 있는 부분까지 공부해보려한다.
DNS Domain Name System
정의
DNS는 사용자가 IP주소 대신 도메인 이름을 사용하여 웹사이트에 연결할 수 있도록 한다. 인터넷 전화번호부로 많이 비교한다. 웹 브라우저는 IP 주소를 통해 상호작용한다. DNS는 브라우저가 인터넷 자원을 로드할 수 있도록 도메인 이름을 IP주소로 변환한다.
구성요소
Domain Name Space
- 규칙(방법)으로 도메인 이름 저장을 분산함.
- 전세계적인 거대한 분산 시스템인 DNS가 저장, 관리하는 계층적 구조를 의미한다.
- 최상위에 Root DNS Server가 존재하고 그 하위로 연결된 모든 노드가 연속해서 이어지는 계층적 구조로 되어있다. (폴더 구조와 비슷하다.)
도메인을 계층적으로 구분하는, 정보(도메인과 IP주소)를 분산하는 구조를 선택하게 됨.
도메인에 닷(dot), 점이 있는 것. 점은 계층을 나타낸다.
DNS Resolver (Local DNS server)
- Resolver = Recursive DNS Server = Local Server(of ISP) = Recursor
- URL에 Domain Name을 입력했을 때 해당 IP를 찾기위해 가장 먼저 찾는 DNS서버
- DNS 클라이언트 요청을 네임서버로 전달하고 찾은 정보를 클라이언트에게 제공하는 기능을 수행한다.
- 권한 없는 DNS 서버.
- 대표적으로 KT/LG/SK와 같은 ISP(통신사) DNS가 있고, 브라우저 우회 용도로 많이 쓰는 구글 DNS, 클라우드 플레어와 같은 Public DNS 서버가 있다.
Name Server (DNS Server)
- 해당 도메인 이름의 IP 주소를 찾는다.
- 권한이 있는 DNS 서버.
- 문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP주소로 변환시키기 위해선 Domain Name Space의 트리 구조에 대한 정보가 필요하다. 이런 정보를 갖고 있는 서버를 네임 서버라고 함.
- DB 역할, 찾아주는 역할, 요청 처리 응답 구현
1. Root DNS Server
ICANN(Internet corporation for Assigned Names ans Number: 국제 인터넷 주소 관리 기구)
이 직접 관리하는 최상위 DNS 서버.
TLD DNS 서버 IP 주소를 저장하고 안내하는 역할.
루트 네임서버는 해당 도메인의 확장자(.com,. net, .org, etc.)에 따라 재귀 확인자를 TLD 네임서버에 보내 응답한다.
2. Top-Level Domain(TLD) DNS Server
- (1) 국가 코드 최상위 도메인(Country Code Top-Level Domain, ccTLD)
.kr, .jp. .CN, .US 등
- (2) 일반 최상위 도메인(generic top-level domain, gTLD)
.com, .net, .org 등.
3. Second-Level Domain(SLD) 혹은 Authoritative DNS Server
실제 개인 도메인과 IP 주소의 관계가 기록되는 서버.
Authoritative(권한)이 붙은 이유. 일반적으로 도메인/호스팅 업체의 네임서버를 말함.
개인 DNS를 구축해도 이 경우에 해당한다.
4. Resolver Server (권한 없는 DNS Server)
DNS 서버는 Domain Name Space를 위한 권한이 있는 DNS 서버와 권한이 없는 DNS 서버로 구분된다.
위 1,2,3은 권한이 있는 서버로, IP 주소와 도메인 이름을 매핑한다.
권한 없는 서버는 질의를 통해 IP주소를 알아내거나 캐시한다.
DNS Query란?
- DNS 클라이언트와 DNS 서버는 DNS 쿼리를 교환한다.
- DNS 쿼리는 Recursive(재귀적) 또는 Iterative(반복적)으로 구분된다.
Iterative Query (반복적 질의)
- 말 그대로 반복적인 쿼리
- 반복적으로 DNS server들에게 물어보면서 점점 찾아나가는 방식
- Iterative query는 DNS 클라이언트가 Root Server부터 TLD Server, Authoritative Server까지 차례대로 쿼리를 보내고, 각각의 서버에서는 다음 쿼리할 서버의 IP 주소를 클라이언트에게 반환하며, 클라이언트는 이 정보를 바탕으로 다음 쿼리를 보낸다. 이 과정은 계속 반복되며, 최종적으로 클라이언트는 해결된 IP 주소를 받게 됨.
- 대부분의 DNS 서비스 제공업체들은 Recursive query를 제한하고, Iterative query를 권장
Recursive Query (재귀적 질의)
- 재귀를 이용한 쿼리
- 재귀적으로 DNS server들에게 물어보면서 점점 찾아나가는 방식
- Recursion query는 DNS 클라이언트가 Root Server부터 Authoritative Server까지 쿼리를 보내면, Authoritative Server는 자신이 아는 IP 주소를 반환하거나, 모른다면 경우 하위 DNS 서버에 대한 추가 쿼리를 수행한다. 이 과정은 더 이상 하위 서버가 없을 때까지 반복. 최종적으로 클라이언트는 해결된 IP 주소를 받게 됨.
- Recursive Query는 클라이언트가 요청하는 쿼리 과정에서 Authoritative Server에 대한 추가 쿼리를 수행하기 때문에, 이러한 추가 쿼리 과정에서 중간에 위치한 DNS 서버들이 악성 코드나 위조된 DNS 정보를 제공할 가능성이 있음.
동작 과정
- 웹 브라우저에 www.naver.com을 입력한다.
- 웹 브라우저는 이전에 방문한적 있는지 찾는다.
- 브라우저 캐시 확인
- OS 캐시 확인
- 라우터 캐시 확인
- ISP 캐시 확인(Local DNS Server)
-
ISP(Local DNS Server)에서 Root DNS에게 Iterative하게 쿼리를 날리고, 전체 IP주소를 반환할 때까지 반복적 질의 수행.
-
ISP는 Authoritative DNS 서버에서 최종적으로 IP 주소를 응답받는다.
-
ISP는 해당 IP 주소를 캐시한다.
-
웹 브라우저에게 응답한다.
참조 ✅
DNS란 무엇입니까? | DNS 작동 원리
DNS란?
DNS에 대한 설명
DNS - local DNS server
[cs]DNS/ ISP/Gateway