안녕하세요.
이번에 작성할 네트워크지식은 DNS입니다.
네이버 부스트캠프 최종프로젝트에서 트래픽분석 플랫폼을 만들었는데요. 사이트 동작원리를 이해하기 위해선 dns지식이 필요합니다. 그래서 이번기회에 DNS대해 정리해보며 프로젝트 아키텍처와 관련하여 글을 작성해보려고 합니다.
DNS란 Domain Name System의 약자로서, 도메인 이름과 IP주소를 변환해주는 역할을 합니다.
조금 더 쉽게 정의해볼게요
DNS는 인터넷의 전화번호부다.
사림이 이해하기 쉬운 서버의 주소인 도메인(www.google.com)을 컴퓨터가 이해하는 IP주소(172.217.161.78)으로 변환해주는 인프라이다.
이런 전화번호부는 한대의 서버로 동작하지 않습니다.
정확히는 계층구조를 가지는 분산 데이터 베이스 구조로 이루어져 있습니다.
서버가 한대라면 당연히 느리고 트래픽이 몰릴 수 밖에 없기 때문이죠. 또한, 서버를 분산 시켜 한 서버에 장애가 생겨도 전체 시스템이 중단되는걸 방지하였습니다.
크게 2가지로 볼 수 있습니다. 병목현상과 캐싱.
만약 모든 도메인정보를 하나의 중앙 데이터베이스에 저장한다면 어떻게 될까요? 위에서 서버를 여러개 둔 이유와 같습니다. 요청이 많아지면 병목현상이 발생하게 되겠죠. 또한 계층 구조는 캐싱을 효과적으로 만듭니다. DNS 서버는 이전 쿼리의 결과를 캐시에 저장하여 같은 정보에 대한 반복적인 쿼리를 줄일 수 있습니다. 이는 응답 시간을 단축하고 네트워크 트래픽을 감소시키게 됩니다.
DNS 서버는 사용자가 도메인이름을 웹 브라우저에 입력할 때 해당 사용자를 어떤 서버에 연결할 것인지 제어합니다. 이러한 요청을 쿼리라고 합니다.
그림 1. DNS Resolver 이미지
사용자가 도메인 이름을 입력하면, 해당 도메인 이름을 IP주소로 변환하기 위해 DNS서버에 요청하여 질문하는 역할을 하는 것을 DNS Resolver라고 합니다. 사용자의 PC에 존재하며, 가장 가까운 DNS서버로 쿼리를 날리게 됩니다.
그림 2. DNS구조 이미지
상위 계층의 DNS 서버(=네임 서버)가 하위 계층의 서버를 관리하며 하위 계층 서버의 IP주소를 알고 있습니다. 루트 서버에는 1단계 도메인에 대한 IP 주소들이 저장되어 있고 1단계 도메인 서버들을 관리합니다. 각각의 1단계 도메인 서버에는 2단계 도메인의 IP 주소가 저장되어 있으며, 2단계 도메인 서버에는 3단계 도메인 서버의 IP 주소가 저장되어 있습니다. 도메인 주소의 경계를 점(” . ”)으로 표시하며 뒤에서 앞으로 역방향으로 해석합니다.
계층구조를 위에서부터 top-down식으로 훑어보겠습니다.
루트 서버는 루트영역에서 작동하는 DNS 서버입니다. 캐시되지 않은 DNS쿼리가 요청될 때마다 루트영역에서 DNS조회를 실시합니다. 루트영역을 따라 TLD, 하위도메인 서버에 도달할 때까지(원하는 도메인까지) 계층구조로 이동합니다.
이런 루트 서버는 전세계에 걸쳐 13개 존재합니다. 정확하게 말하자면 루트 서버의 IP주소는 13개 있습니다. 13개의 IP주소 각각에는 Anycast 라우팅으로 요청을 분산하는 식으로 구성되어있습니다. 애니캐스트 라우팅은 동일한 IP주소를 여러 물리적 서버에 할당하는 방식입니다. 일반적으로 요청자로부터 가장 가까운 거리에 있는 서버를 선택하여 최적화 합니다. 요청하는 사용자의 소프트웨어의 DNS Resolver는 이 13개의 루트서버의 주소를 가지고 있습니다. DNS lookup(DNS레코드 조회)시마다 항상 루트서버를 먼저 확인하는식으로 요청이 이루어집니다.
최상위 도메인 TLD(Top Level Domain)은 루트 도메인 바로 아래에 위치하는 계층입니다. URL의 마지막 점(.) 뒤에 오는 부분으로, 도메인 이름의 가장 오른쪽 부분입니다. TLD는 크게 두 가지 유형으로 분류됩니다
예: .com, .org, .net, .edu, .gov, .mil, .int
예: .kr(한국), .jp(일본), .uk(영국), cn(중국)
TLD 서버는 특정 도메인의 권한 있는 네임서버(Authoritative Name Server)가 어디에 있는지 알려주는 역할을 합니다. 예를 들어, .com TLD 서버는 example.com이라는 도메인의 네임서버가 어디에 있는지 알려줍니다.
2단계 도메인 SLD(Second Level Domain)은 TLD 바로 아래에 위치하는 계층입니다. 이것은 우리가 일반적으로 "도메인 이름"이라고 부르는 부분으로, 개인이나 조직이 등록하고 소유할 수 있는 부분입니다.
예를 들어, ns1.example.com에서 example이 2단계 도메인입니다.
2단계 도메인에 추가적으로 도메인이 붙을 수 있는데, 이를 서브도메인이라고합니다. 3단계 외에도 추가적인 단계로 서브도메인이 붙을 수 있습니다.
예를들어 ns1.example.com에서 ns1이 3단계 도메인입니다.
DNS 쿼리 과정에서, DNS 리졸버는 루트 서버부터 시작하여 TLD 서버를 거쳐 최종적으로 권한 있는 네임서버에 도달합니다. 권한 있는 네임서버는 특정 도메인과 그 하위 도메인들에 대한 최종적인 DNS 정보를 제공하는 서버입니다.
권한 있는 네임서버는 도메인 이름과 IP 주소 간의 매핑 정보를 보유하고 있어, 해당 도메인 이름에 맞는 IP 주소를 반환해줍니다. 예를 들어, example.com의 권한 있는 네임서버는 example.com 및 www.example.com, mail.example.com 등의 서브도메인에 대한 정확한 IP 주소 정보를 제공할 수 있습니다.
그림 3. DNS 동작순서 이미지
그림 4. 프로젝트 아키텍처 구조
트래픽 분석 플랫폼을 만들면서 만든 아키텍처입니다.
단점 : 아웃 바운드 트래픽이 2번 발생하게 됨 (클라이언트 → 프록시, 프록시 → 유저)