참고 자료:
DNS란 무엇입니까?
DNS란? (도메인 네임 시스템 개념부터 작동 방식까지
DNS 개념 및 동작 원리
DNS 개념 & 동작
DNS(도메인 이름 시스템)은 인터넷의 전화번호부라고 볼 수 있다. 인간은 google.com
또는 naver.com
과 같은 도메인 이름을 통해 온라인으로 정보에 접근한다. 웹 브라우저는 인터넷 프로토콜(IP) 주소를 통해 상호 작용한다. DNS는 브라우저가 인터넷 리소스를 로드할 수 있도록 도메인 이름을 IP 주소로 변환하는 역할을 한다.
쉽게 말해서 우리가 IP 주소인 192.168.1.1
같은 주소를 다 외우고 다닐수가 없어서 도메인 이름인 google.com
이나 naver.com
으로 사용하는데 이것을 다시 IP 주소로 변환해주는 것이 DNS인 것이다.
DNS는 아래 세가지 요소로 구성되어있다.
도메인 네임 스페이스(Domain Name Space)
네임 서버(Name Server)
리졸버(Resolver)
DNS는 전세계적인 거대한 분산 시스템이다. 도메인 네임 스페이스는 이러한 DNS가 저장 관리하는 계층적 구조를 의미한다. 최상위 루트 DNS 서버가 존재하고 그 하위로 연결된 모든 노드가 연속해서 이어진 계층 구조로 되어있다. (디렉토리 구조와 비슷하다.)
도메인 네임 스페이스의 트리 구조는 최상위 레벨부터 순차적으로 계층적 소속 관계를 나타낸다.
하위 조직의 네임 스페이스를 할당하고 관리하는 방식은 각 하위 기관의 관리 책임자에게 위임된다.
예를 들어 naver.com
도메인은 com
도메인을 관리하는 네임 서버에 등록되어있고 www.naver.com
은 naver.com
을 관리하는 네임 서버에 등록되어있다.
이러한 위임 구조는 호스트의 증가에 대한 관리가 효율적으로 이루어지는 것을 가능하게 한다.
도메인의 전체 이름을 표기하는 방식을 말한다.
일반적으로 도메인 이름은 www.naver.com
에서 naver.com
을 의미하기 때문에 이런 용어가 나왔다고 한다.
도메인 이름: naver.com
호스트 이름: www
FQDN: www.naver.com
문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP 주소로 변환시키기 위해서는 도메인 네임 스페이스의 트리 구조에 대한 정보가 필요한데 이러한 정보를 가지고 있는 서버를 네임 서버라고 한다.
데이터 베이스 역할, 찾아주는 역할, 요청 처리 응답을 구현한다.
전 세계에 13개의 Root DNS 서버가 구축되어 있다. 그리고 DNS 서버를 복사하여 같은 기능을 담당하는 미러 서버가 있다고 한다.
ICANN이 직접 관리하는 절대 존엄 서버이다.
TLD(Top-Level Domain) DNS 서버 IP 주소를 저장하고 안내하는 역할을 한다.
도메인 등록 기관이 관리하는 서버이다.
Authoritative DNS 서버의 주소를 저장하고 안내하는 역할을 한다.
도메인 판매 업체(가비아 등)의 DNS 설정이 변경되면 도메인 등록 기관으로 전달되기 때문에 어떤 도메인이 어떤 판매업체에서 구매했는지 알 수 있다.
실제 개인 도메인과 IP 주소의 관계가 기록되는 서버이다.
그래서 권한의 의미인 Authoritative가 붙었다. 일반적으로 도메인/호스팅 업체의 네임 서버를 말한다.
개인 DNS 구축도 이 경우에 해당한다.
DNS 서버는 도메인 네임 스페이스를 위한 권한 있는 DNS 서버와 권한이 없는 DNS 서버로 구분된다. 위의 3개의 서버는 권한이 있는 DNS 서버이다.
네임 스페이스를 위한 권한 있는 DNS 서버는 IP 주소와 도메인 이름을 매핑한다.
반면, 권한 없는 DNS 서버는 질의를 통해 IP 주소를 알아내거나 캐시한다.
리졸버는 웹 브라우저와 같은 DNS 클라이언트 요청을 네임 서버로 전달하고 네임 서버로부터 정보(도메인 이름과 IP 주소)를 받아 클라이언트에게 제공하는 기능을 수행한다.
이 과정에서 리졸버는 하나의 네임 서버에게 DNS 요청을 전달하고 해당 서버에 정보가 없으면 다른 네임 서버에게 요청을 보내 정보를 받아온다.
이렇듯 리졸버는 수많은 네임 서버에 접근하여 사용자로부터 요청 받은 도메인의 IP 정보를 조회하는 기능을 수행한다.
리졸버에 기능을 단말에서 구현하기에는 자원의 한계가 있기에 대부분 기능을 DNS 서버에 구현하고 클라이언트 호스트는 리졸버의 단순한 기능만을 지닌 리졸버 루틴을 구현하는 옵션이 제시되어있다.
이러한 단순화된 기능의 리졸버를 스터브 리졸버(Stud Resolver)라고 하며, 스터브 리졸버는 수 많은 네임 서버의 구조를 파악할 필요없이 리졸버가 구현된 DNS 서버의 IP 주소만 파악하면 된다.
클라이언트 호스트에서 설정하는 DNS 서버는 이와 같은 서버를 의미하는 것으로 도메인에 대한 질의를 받은 스터브 리졸버는 설정된 DNS 서버로 DNS Query를 전달하고 DNS 서버로부터 최종 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행한다.
DNS 클라이언트와 DNS 서버는 DNS 쿼리를 교환한다. DNS 쿼리는 Recursive(재귀적) 또는 Iterative(반복적)으로 구분된다. 단순한 개념으로 아래와 같은 방식으로 요청과 응답을 한다고 이해하면 된다.
결과물(IP 주소)를 돌려주는 작업이다. (결과적으로 Recursive 서버가 Recursive 쿼리를 웹 브라우저 등에게 돌려주는 역할을 한다.)
Recursive 쿼리를 받은 Recursive 서버는 Iterative 하게 권한 있는 네임 서버로 Iterative 쿼리를 보내서 결과적으로 IP 주소를 찾게 되고 해당 결과물을 응답한다.
간단하게 응답을 돌려주는 쿼리라고 생각하면 된다.
Recursive DNS 서버가 다른 DNS 서버에게 쿼리를 보내 응답을 요청하는 작업이다.
Recursive 서버가 권한 있는 네임 서버들에게 반복적으로 쿼리를 보내서 결과물(IP 주소)을 알아낸다. 이미 IP 주소가 캐시되어있다면 이 과정은 건너뛴다.
DFS, BFS 느낌(?)이 난다..😅
DNS의 동작 원리는 다음과 같다.
도메인 이름 조회 요청: 사용자가 브라우저를 통해 도메인 이름을 입력하면, 컴퓨터는 DNS에게 해당 도메인 이름에 대한 IP 주소를 요청한다.
로컬 DNS 캐시 검색: 컴퓨터의 운영체제 또는 라우터에게 로컬 DNS 캐시라고 불리는 기억 공간이 있다. 이 공간에 이전에 접근한 도메인 이름과 해당 도메인의 IP 주소가 저장되어 있다. 우선 로컬 DNS 캐시에서 해당 도메인 이름에 대한 IP 주소를 검색한다.
DNS 계층 구조 탐색: 로컬 DNS 캐시에 도메인 이름에 대한 IP 주소가 없는 경우, 계층적인 구조로 구성된 DNS 서버들을 탐색한다. 이러한 DNS 서버는 계층적으로 구성되어 있으며, 최상위 DNS 서버로부터 순차적으로 탐색한다.
DNS 서버 탐색: DNS 서버는 도메인 이름의 일부 또는 전체에 대한 IP 주소 정보를 가지고 있다. 로컬 DNS 캐시에 해당 정보가 없는 경우, DNS 서버에 요청을 전달하여 도메인 이름에 대한 IP 주소를 조회한다.
IP 주소 반환: DNS 서버가 도메인 이름에 대한 IP 주소를 찾으면, 이를 로컬 DNS 캐시에 저장하고 컴퓨터에게 반환한다. 컴퓨터는 이 IP 주소를 사용하여 도메인에 접근하고 통신을 수행한다.
이전에 퍼블리셔로 일하면서 DNS에 관해 1도 모를때 레코드에 관한 업무지시를 받았었다.
그때는 진짜 팀원들도 다 몰라서 고생했었는데 이참에 다 공부해둬야겠다고 생각해서 작성한다.
DNS는 얕게보면 쉽게 이해할 수 있는데 깊게 들어가면 상당히 복잡한 개념인 것 같다.😣
그래도 이렇게 한번 깊게 공부해두면 머리속에 캐싱되니 필요할 때 쉽게 이해할 수 있을 것 같다.