본문 바로가기
CS 공부

DNS - Domain Name, Name Server, Query, DNS Cache

by 나노다 2024. 12. 16.

DNS (Domain Name System)

계층적이고 분산된 Domain Name에 대한 관리 체계를 뜻한다!

지금은 무슨 말인지 모르겄으니 차근차근 관련 정보를 알아보도록 하자!

 

Domain Name

숫자들로 빼곡한 IP 주소를 전부 기억하기 어려울 뿐 아니라, IP 주소는 가변적이다 보니까, 

실제 웹 환경에선 주소에 대응되는 도메인 네임을 통해 호스트들을 식별하게 됨!

 도메인 네임은 DNS 서버에서 관리를 하고, 만약 특정 호스트의 주소가 변경되더라도,

그 호스트의 도메인 네임에 바뀐 주소를 다시 연결해주는 식으로 대처할 수 있게 된다!

연락처에서 IP 주소는 010-0000-0000라고, 도메인 네임은 "김철수"라고 생각하면 쉽다!

 

도메인 네임 표현

도메인 네임은 온점 기준으로 계층적으로 구분된 문자열이다!

계층은 도메인 네임 뒤에서부터 상위 계층으로, 앞으로 갈 수록 하위 계층에 해당한다!

도메인 이름 전체를 FQDN (Full-Qualified Domain Name)이라 하고,

FQDN을 알면 비로소 그 호스트를 식별할 수 있게 된다! (=그 호스트의 IP주소를 알 수 있게 됨)

젤 대빵은 루트 도메인이고, 그 다음이 최상위 도메인, 그 후로는 N단계 도메인이라 칭한다!

 

# 루트 도메인 Root Domain : 대개 생략돼있지만, 도메인 젤 마지막에 위치한 온점!

# 최상위 도메인 TLD (Top-Level Domain)

# N단계 도메인 N Level Domain

 

서브 도메인
기본 도메인 앞에 추가로 붙어, 주 도메인에 관련된 구체적인 서비스나 페이지를 구분해준다!
example.com이 기본 도메인이라고 할 때,
# 사이트의 다른 섹션을 구분 : blog.example.com이나 shop.example.com 등등
# 국가별로 구분 : kr.example.com이나 us.example.com 등등
# 특정 서비스 구분 : mail.example.com이나 ftp.example.com 등등
앞에 붙은 blog, shop, kr, us, mail, ftp 등등이 전부 서브 도메인에 해당!

 

Name Server

계층별 도메인 마다 담당 네임 서버가 하나씩 존재한다!

각각이 맡은 도메인을 관리하고 있고, 각 네임 서버들은 부하를 방지하고 가용성을 높이기 위해 분산돼있다!

Resolve

도메인 네임에 대응하는 IP 주소를 풀어내는 과정이다!

클라이언트가 로컬 네임서버에 도메인을 풀어다오 하는 요청을 보내면,

로컬 네임서버에서 계층 담당 네임서버에 질의 (Query)를 보내게 되는 방식이고,

질의 유형에는 크게 재귀 질의 (Recursive Query), 반복 질의 (Iterative Query) 두 가지 방식이 있다!

우선 대표적인 네임 서버 유형에 대해 알아보자!

 

로컬 네임서버 Local Name Server

클라이언트와 가장 가까이 맞닿아 있어, 최초로 찾게 되는 네임 서버다!

클라이언트에게 도메인 네임에 대한 질의를 받으면, 로컬 네임서버가 대신 각 네임서버와 소통하게 된다!

로컬 네임서버의 주소는 일반적으로 ISP (Internet Service Provider),

즉 통신사에서 자동으로 할당해준 주소를 활용하기도 하고,

GoogleDNS나 OpenDNS와 같은 다른 서버 주소를 직접 입력해 이용하기도 함!

 

루트 네임서버 Root Name Server

루트 도메인 네임을 관리하는 서버다!

로컬 네임서버에서 클라이언트의 질의를 바로 해결해주지 못 할 경우 첫번째로 질의하게 되는 곳으로,

루트 네임 서버에서도 해결이 안 될 경우 TLD 네임서버의 IP 주소를 알려준다!

 

TLD 네임서버 Top-Level Domain Name Server

최상위 도메인 네임을 관리하는 서버다!

마찬가지로 여기서도 해결이 안 될 경우 하위 도메인 서버의 IP 주소를 알려주게 되고,

하위 도메인 서버는 또 다음 단계의 도메인 서버로 계속 질의를 토스하는 느낌!

 

책임 네임서버 Authoritative Name Server

최종적으로 신뢰할 수 있는 IP 주소를 반환해주는 서버다!

 

질의 방식

재귀적 질의 Recursive Query

클라이언트 → 로컬 네임서버  → 루트 네임서버  → TLD 네임서버  → N단계 네임서버  → 책임 네임서버

위 순서대로 도메인에 대한 질의를 보내고, 최종 변환된 IP 주소를 역순으로 응답하는 방식

 

반복적 질의 Iterative Query

클라이언트  → 로컬 네임서버   → 각 계층 네임서버들과 따로따로 질의응답

로컬 네임서버는 질의응답들의 결과를 종합한 최종 IP 주소를 클라이언트에 전달해준다!

 

DNS Cache

다만 어느 방식의 Query든 거쳐야할 절차가 많은 건 분명하고,

이에 따라 당연히 시간 소모도 크고, 주고 받는 메세지(=데이터) 수도 지나치게 많아질 수 있음

특히 모든 도메인이 거치게 되는 루트 네임서버에 대한 과부하가 우려된다!!

따라서 네임서버들은 DNS 캐시를 활용해 자동응답기(?)를 설치해두었다!

DNS 캐시란 기존 응답 결과를 임시로 저장해두다가, 추후 같은 질의가 왔을 시 그 답을 그대로 활용하는 것!!

 

# 캐시를 활용함으로써 불필요한 통신 절차를 최소화하고, 질의하는 쪽도 더 빠르게 원하는 주소를 얻을 수 있게 된다!

# 캐시는 TTL 속성과 함께 저장되기 때문에, 수명이 다 되면 폐기된다!

# 이 캐시들을 저장하는 용도로만 사용하는 서버들도 존재한다!