DNS는 Host name에 해당하는 IP주소를 기록하는 일종의 전화번호부 같은 개념이다. 더 자세히 알아보기 위해 다음과 같은 순서로 살펴보겠다.
📌 순서
- DNS(Domain Name System)
- DNS Server
- DNS Recodes
DNS는 앞서 서두에서 언급했던 것과 같이
리소스 레코드
(Resource recode)를 가지며, 도메인 이름과 IP 주소를 서로 변환하는 역할을 한다.클라이언트가 웹 브라우저에 https://velog.io/@uijeong 라는 도메인 이름을 작성해서 요청하면, DNS 서비스를 통해 우리는 server의 IP주소로 요청을 보낼 수 있게 되는 것이다.
자세한 과정은 DNS 서버에 대해 다루면서 알아보자.
👀 DNS를 서버 하나에서 운영한다면 어떤 문제가 생길까?
단순히 생각해봐도 수많은 리소스 레코드를 검색하는데 오랜 시간이 걸릴 것이다. 먼 곳에서의 요청은 응답에 있어 큰 트래픽이 발생할 것이고, 서버가 다운되기라도 한다면 인터넷 사용에 큰 문제를 초래할 것이다.
DNS는 이런 문제점들을 서버의 세분화, 계층화를 통해 해결했다.
가장 최상위에 존재하는 서버이다. Top Level DNS Server로 접근할 수 있도록 도메인 이름과 서버 호스트 이름을 담은 레코드를 넘겨준다.
서버의 특징에 따라 com, edu, org 등으로 나눠진 서버이다. 여기서도 다음 단계로 넘어갈 수 있도록 도메인 이름과 서버 호스트 이름을 담은 레코드를 넘겨준다.
제일 하위에 존재하는 서버로, 네트워크를 운영하는 모든 기관은 자신의 Authoritative Server를 운영한다. 각 기관이 보유하고 있는 도메인에 속하는 호스트 이름에 대한 책임을 스스로 관리하겠다는 뜻이다.
각 네트워크 기관들이 내부에서 요청되는 DNS 쿼리에 대한 결과를 캐싱해둔 서버이다. DNS의 웹 캐시라고 생각하면 된다.
일종의 웹 캐시이기 때문에, 일관성 문제를 다루지 않을 수 없다. Local DNS Name Server의 일관성 문제를 해결하기 위해서 TTL(Time To Live) 필드가 사용된다. 즉, 유효기간이 정해져 있다는 뜻이다.
👉🏻 요청을 분산시키는 효과를 통해 서버의 부하가 적어진다.
👉🏻 쿼리 응답 시간이 감소한다.
👉🏻 IP 주소가 변경될 경우 네트워크를 운영하는 기관이 가지는 Authoritative Server의 레코드만을 수정하면 되므로, 관리가 수월해진다.
DNS Server가 보관하고 있는 Recode는
Name
,Value
,Type
,TTL
필드로 구성되어 있다.
A✔️
name = hostname, value = IP address
NS✔️
name = domain, value = hostname
Type 필드의 값은 이 외에도 여러 유형이 있지만, A, NS 두가지 타입을 중점적으로 살펴보도록 하자.
NS 타입과 A 타입은 한쌍으로 존재하며, 마지막 계층에서는 A 타입 레코드만 남는다.
👉🏻 Root DNS Server에 쿼리를 날린다.
👉🏻 Server로부터 NS, A type 레코드를 받는다.
👉🏻 받은 레코드 속 IP 주소가 가리키는 Top Level DNS Server에 쿼리를 날린다.
👉🏻 Server로부터 NS, A type 레코드를 받는다.
👉🏻 받은 레코드 속 IP 주소가 가리키는 Authoritative DNS Server에 쿼리를 날린다.
👉🏻 Server로부터 A type 레코드를 받는다. 이 레코드에서 최종적으로, 찾던 IP 주소를 얻을 수 있다.
DNS는 왜 높은 신뢰성을 보장하는 TCP가 아닌 UDP를 사용하는지 의문이 들 수 있다. 과연 왜 UDP를 사용한걸까?
이유✔️
👉🏻 데이터가 매우 작기 때문에 유실될 위험이 적다.
👉🏻 유실된다고 하더라고 위험성이 크지 않다.
👉🏻 실제 웹 요청을 위한 준비 단계에 불과하기 때문이다.