DNS(Domain Name System)
이리저리 찾아보니 설명이 조금씩 다르더라. 표현 방식이 다른 건지, 정의가 광범위한 건지...
이럴 경우엔 가장 단순한 정의에서 시작해야겠다.
- 정의
DNS는 국제적 단위로 웹 사이트의 IP 주소와 Domain 주소를 이어주는 시스템(환경)이다. 예전에는 네트워크의 크기도 작고, IP 주소를 가진 시스템도 적어서 별 필요가 없었지만 이제는 IP 주소를 할당할 시스템이 무수히 많다 보니 숫자보다는 문자로 기억하는 것이 편해서 생겼다고 한다.
- 어디에서 뭘 하는 시스템인가?
TCP/IP 네트워크 상에서 문자로 만들어진 도메인을 컴퓨터가 처리할 수 있는 IP 주소로 변환하는 작업을 한다.
이러한 작업을 실행하는 서버를 DNS 서버라고 한다. DNS가 Domain Name Server라고 오해하기 쉬운데, 작업을 맡은 서버와 프로토콜은 구분해야 한다.
-> 웹 페이지로 접속하려는 사용자(브라우저)가 문자로 된 사이트의 주소를 입력한다.
-> DNS 서버가 사용자에게 입력된 사이트 문자 주소에 대응되는 사이트의 숫자(IP) 주소를 보내준다.
-> 사용자는 받은 주소로 접속해 웹 서버(호스팅 서버)에게 페이지를 요청한다.
-> 호스팅 서버가 사용자에게 페이지를 보내준다. 끝!
- DNS의 종류
찾다 보면 이래저래 분류가 달라 헷갈린다. 일단 내가 찾은 것에 의하면 여러 DNS 서버들은 모두 아래 4가지 중 하나에 해당한다. 찾는 곳마다 명칭이 달라서 뭐가 맞는지 헷갈린다.
1. Local DNS Server
일명 기지국 서버. 사용자가 URL에 Domain Name을 입력하면 가장 먼저 찾는 DNS 서버다.
인터넷이 연결되면 ISP(Internet Service Provider), 즉 통신사에서 운영하는 DNS 서버가 Local DNS 서버로 등록된다.
2. Root DNS Server
만약 Local DNS Server가 질의받은 주소의 IP를 모른다면 해당 DNS 서버는 Root DNS Server에게 물어본다.
트리 구조로 보면 Root DNS는 최상위 DNS 서버다. 그러니 로컬 DNS 서버가 트리 구조를 거슬러 올라가 Root DNS 서버에게 물어보면, Root DNS 서버는 다른 자식 노드(DNS 서버)들에게 다시 물어본다. 만약 Root DNS 서버가 요청받은 주소의 IP를 찾지 못했다면 Local DNS에게 TLD DNS Server의 주소를 알려준다.
3. TLD(Top-Level Domain) DNS Server
일명 최상위 도메인. 대표적으로는 .kr/.jp/.US 등의 국가 코드 최상위 도메인(Country Code Top-Level Domain)과 .com/.net/.org 등의 일반 최상위 도메인(Generic Top-Level Domain)이 있다.
4. Cache DNS
매번 DNS 서버를 찾기엔 효율이 떨어지기에 최근에 방문했던 주소의 정보를 캐시의 형태로 저장해 두는 것이다. 저장해둔 도메인과 IP 주소의 관계에 손을 대지는 않고 오직 캐시만 보관한다. PC에 보관한다고 한다.
DNS 서버의 분류 방식이 다른 글을 서너 가지 정도 보았지만, 예습을 권장받을 때 들은 기준에 제일 부합하는 방향으로 정리했다. 그리고 살펴보니 명칭만 다르지 내용은 비슷했다.
- DNS 질의 방식
위에서 말했듯, DNS 서버를 분류한 방식이 여기저기 난잡하다. 그러니 우선 DNS가 주소를 알아내기 위해 실행하는 질의 과정을 이해하는 것이 우선이다. 질의 방식은 재귀적 질의 방식과 반복적 질의 방식이 있다.
(※ 여러 글을 찾아봤는데 2가지 질의 방식에 대해 어떤 것이 재귀적이고 어떤 것이 반복적인지 명칭 지정이 갈렸다. 나는 이 분류가 맞다고 생각해서 작성했지만, 더 찾아봐야겠다.)
(아래 과정 중 책임 DNS라는 것이 나오는데, 계층 방식으로 DNS를 구별할 때 나온다. 인터넷을 통해 서비스를 제공하는 모든 기관이 가지는 서버다.)
재귀적 질의(Recursive Query)
-> 캐시 DNS에 없음
-> 로컬 DNS에게 요청 : 로컬 DNS에게 해당 정보가 없다면 루트 DNS에게 물어본다.
-> 루트 DNS도 모르면 최상위 DNS에게 물어본다.
-> 최상위 DNS도 모르면 책임 DNS에게 물어본다.
-> 책임 DNS는 알고 있으니 최상위 DNS에게 알려줌.
-> 지나온 경로를 거슬러 올라가며 서로에게 알려줌.
-> 로컬 DNS는 정보를 받아 자신의 DNS 레코드에 추가.
대충 재귀 함수를 생각하면 된다. 답변을 주기 전에 다시 요청으로 들어가고, 답변을 얻으면 역으로 거슬러 올라온다.
반복적 질의(Interactive Query)
-> 캐시 DNS에 없음 : 로컬 DNS에게 요청(물어봄)
-> 로컬 DNS에게 해당 정보가 없으면 루트 DNS에게 요청 : 루트 DNS도 모름
-> 루트 DNS는 자신도 모르니 TLD DNS 서버의 주소를 알려줌 : 로컬 DNS가 다시 TLD DNS에게 물어봄
-> TLD DNS도 모른다면 TLD DNS는 로컬 DNS에게 책임 DNS의 주소를 알려줌
-> 책임 DNS는 알고 있기에 로컬 DNS에게 알려줌
-> 로컬 DNS는 받은 정보를 클라이언트에게 넘겨주고 DNS 레코드에 저장
로컬 DNS가 계속 물어보니 대충 반복적 구조가 맞는 것 같다.
재귀나 반복이나 명칭과 내용이 잘 맞는 것 같은데... 반대로 해도 말은 되니 헷갈린다.
- DNS Record
DNS가 받은 요청을 어떻게 처리할 것인가에 대한 정보.
A(Host) : 주소/호스트 레코드;
-> 정규화된 도메인 이름/호스트명(FQDN)을 IPv4에 연결한다.
AAAA : 주소 레코드;
-> 호스트를 IPv6에 연결한다.
CNAME(Canonical NAME) : 별칭 레코드;
-> 실제 호스트명(A 레코드)과 연결되는 별칭을 정의한다.
MX(Mail Exchange) : 메일 교환 레코드;
-> 메일 서버에 도달할 수 있는 라우팅 정보를 제공한다.
SRV(Service) : 서비스 위치 레코드;
-> 비슷한 TCP/IP 서비스를 제공하는 다수의 서버 위치 정보를 제공한다.
PTR(Pointer) : 포인터 리소스 레코드;
-> 다른 DNS 레코드를 가리킨다. 역방향 조회에서 A 레코드를 가리킬 때 사용한다.
SOA(Start Of Authority) : 권한 시작 레코드;
-> DNS 영역의 주 DNS 서버를 정의하며, 일련번호를 통해 영역의 변경 사항을 기록한다. 영역의 새로고침/재시도 간격과 기본 TTL 값을 정의하기도 한다.
NS(Name Server) : 네임 서버 레코드;
-> 영역을 풀이할 수 있는 DNS 서버의 목록
연결된 개념이 많기도 하고, 찾는 글마다 구별 방식이 달라서 꽤나 까다로운 내용이다.
이래서 외우지 말고 이해하라고 하는 것 같다. 이해를 해놓으면 구별이 어떻든 상관없어 보인다.
'IT 지식' 카테고리의 다른 글
LCU in AWS (0) | 2022.02.14 |
---|---|
면접 예상 질문 정리 중 (0) | 2022.01.06 |
OSI 7계층, TCP/IP 모델 (0) | 2021.07.25 |
Port, MAC Address, Forwarding (0) | 2021.07.22 |
IPv6 (0) | 2021.07.22 |
댓글