네트워크

DNS(Domain Name System)란? 도메인부터 시작하는 DNS 정리

우잉~ 2024. 12. 22. 13:34

DNS의 정의

DNS란 도메인 주소 → IP 주소 변환 프로토콜이다.

 

DNS는 Domain Name System의 약자이다.

 

그럼 여기서 Domain은 도대체 무엇인가?

도메인은 사람들이 인터넷에서 쉽게 식별할 수 있는 텍스트 기반 주소 체계를 뜻한다.

 

그럼 다시 DNS로 돌아와서

DNS란 텍스트 기반 주소를 IP 주소(숫자)로 변환해주는 프로토콜이라고 말할 수 있다.

 

 

구글 사이트에 들어가기 위해서 www.google.com과 같은 도메인 주소를 이용하여 접속할 수 있다. 

 

* 도메인 주소의 실제 IP를 알아내고 싶다면 명령 프롬프트에서 nslookup 도메인 주소를 입력하면 된다!

nslookup 예시

 

 

하지만 실제 네트워크에서는 도메인 주소에 해당하는 실제 IP 주소를 이용하게 된다.

사용자가 도메인 주소를 사용하여 서비스를 요청하면 네트워크 설정에 입력한 DNS로 해당 도메인에 대한 IP 주소를 내부 네트워크에 물어보고, 응답값으로 요청한 도메인의 서비스 IP를 받게 됨으로써 사이트에 접속할 수 있게 된다.

  1. 도메인 주소를 이용한 사용자 요청
  2. DNS로 해당 도메인에 대한 IP 주소 질의
  3. 요청한 도메인 서비스 IP 주소 응답
  4. 사용자 접속 완료

도메인 주소를 이용한 IP 주소 요청 및 통신

 

 

DNS 구조

도메인은 단순한 글자와 .으로 이루어진 것 같지만, 사실 이러한 모습에도 규칙이 있다.

무려 계층 구조 & 역트리 구조이다.

생김새는 그래보이지 않지만 취상위 루트부터 Top-level 도메인, Second-level 도메인, Third-level 도메인이 존재하며, 하위 레벨로 원하는 주소를 단계적으로 찾아간다.

Root → Top-Level Domain → Second-Level Domain → Third-Level Domain

도메인 계층

 

 

1. 루트 도메인

도메인의 최상위 영역

DNS 서버는 사용자가 쿼리한 도메인에 대한 값을 가지고 있거나 캐시에 저장된 정보를 이용하여 응답하게 되는데,

쿼리한 도메인이 DNS 서버에 정보가 없을 때 루트 DNS에 쿼리하게 된다.

DNS 서버를 설치하게 되면 루트 DNS IP 주소가 기록된 힌트 파일을 가지게 되어 루트 DNS를 따로 설정할 필요는 없다.

 

2. Top-Level Domain(TLD)

최상위 도메인은 6가지 유형으로 나뉜다.

  1. Generic(gTLD): 일반적으로 사용
  2. coutry-code(ccTLD): 국가 최상위 도메인. ISO 3166 표준에 의해 규정된 국가 코드 사용
  3. sponsored(sTLD): 특정 목적을 위한 스폰서를 두고 있음. (예시: 민족공동체, 전문가 집단, 지리적 위치 등)
  4. infratructure: 운용상 중요한 인프라 식별자 공간 지원 위한 도메인
  5. generic-restricted(grTLD): 특정 기준을 충족하는 사람 또는 단체
  6. test(tTLD): 개발 프로세스에서 테스트 목적으로 사용

 

도메인 이름 사용하는 도메인 비고
Generic(gTLD) com, edu, gov, int, mil, net, org com: 일반 기업체
edu: 4년제 이상 교육기관
gov: 미국 연방정부기관
int: 국제기구, 기관
mil: 미국 연방군사기관
net: 네트워크 관련 기관
org: 비영리기관
coutry-code(ccTLD) kr, tw, au 등 그 외 도메인 코드 확인
https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2
sponsored(sTLD) aero, asia, museum 등  
infratructure arpa  
generic-restricted(grTLD) biz, name, pro  
test(tTLD) .test  

 

 

DNS 동작 방식

도메인을 IP 주소로 변환하기 위해서는 DNS 서버에 도메인을 쿼리하는 과정이 필요하다.

하지만 DNS 서버를 안 쓰는 방법도 존재하긴 하다. 로컬에 직접 IP 주소와 도메인을 설정하는 것이다.

 

로컬에서 도메인, IP를 관리하는 파일hosts 파일이라고 한다.

이 hosts 파일에 도메인과 IP 주소를 설정하면 이 파일에 담긴 도메인 리스트는 항상 DNS 캐시에 저장된다.

 

도메인을 쿼리하게 되면 DNS에 쿼리를 하기 전 로컬에 있는 DNS 캐시 정보를 먼저 확인하는 과정을 거친다.

캐시에 정보가 있으면 DNS 서버에 별도로 쿼리하지 않는다.

  1. 도메인 주소를 이용한 사용자 요청
  2. 로컬 DNS 캐시 정보 확인 후 있으면 3번 건너뛰기 (추가)
  3. DNS로 해당 도메인에 대한 IP 주소 질의
  4. 요청한 도메인 서비스 IP 주소 응답
  5. 사용자 접속 완료

Windows에서 DNS 캐시를 확인하는 명령어는 ipconfig /displaydns이다.

윈도 DNS 캐시 값

 

이렇게 로컬에서도 도메인과 IP 주소를 매핑할 수 있는 파일이 따로 존재하는데 왜 굳이 도메인을 DNS 서버로 쿼리해야 하는 걸까?

이전에는 인터넷에 연결된 단말이 별로 없었다. 하지만 인터넷이 상용화된 후 단말들이 엄청나게 증가했기 때문에 중앙화하기 위해 DNS 체계를 만들게 된 것이다.

기존 hosts 체계 + DNS 체계가 결합됨으로써 도메인 이름 쿼리 프로세스가 생성되었다.

 

여태까지 DNS 서버에 도메인을 쿼리하면 DNS 시스템이 도메인에 대한 값을 전달해주게 된다는 사실에 대해서 알아보았다.

위에서 DNS 서버에 도메인을 쿼리하는 내용에 대해 이야기했으니 이번에는 DNS 서버가 도메인 값을 어떻게 뱉어내는지에 대해 조금 더 자세히 알아보겠다.

 

인터넷이 상용화되면서 엄청나게 많은 IP 주소를 사용하고 있고, 도메인 주소 또한 어마무시하게 많이 존재한다.

그래서 DNS는 분산된 데이터베이스로 서로 도와주도록 설계되어있다고 한다.

자신이 가진 도메인 정보가 아닐 경우, 다른 DNS에 질의해 결과를 받아올 수 있다.

 

최종적으로 DNS 질의 과정은 아래와 같다.

 

  • 로컬 캐시 확인(1): 사용자가 웹 서버에 접근하려는 요청을 보내면 호스트(사용자 컴퓨터)는 로컬 캐시를 확인하여 요청한 도메인 이름의 IP 주소가 저장되어 있는지 확인 → 있으면 IP 주소 반환 후 과정 종료
  • DNS 서버 요청 전송(2): 로컬 캐시에 정보가 없다면 호스트가 DNS 서버에 쿼리 전송
  • DNS 서버의 로컬 캐시 확인(3): DNS 서버의 자체 로컬 캐시를 확인하여 요청 도메인의 IP 주소가 있는지 확인   있으면 IP 주소 호스트에 반환
  • 로컬 캐시에 없을 경우 반복적 쿼리 수행(4~8): 다른 상위 DNS 서버로 요청을 전달하게 됨. (4) 최상위 DNS 서버(TLD 서버)로 쿼리를 전송하여 해당 도메인에 대한 정보 요청. (5) TLD 서버는 tistory.com 도메인에 대한 정보를 가지고 있는 하위 권한 DNS 서버로 요청 전달. (6~8) 반복적 쿼리가 계속되며, 최종적으로 tistory.com 웹 서버에 대한 IP 주소 찾음
  • 로컬 캐시 저장 후 호스트에게 응답(9)
  • 사용자는 반환된 IP 주소를 이용하여 웹 서버에 접속할 수 있음(10)

재귀적 쿼리(Recursive Query): 쿼리를 보낸 클라이언트에 서버가 최종 결괏값을 반환하는 서버 중심 쿼리(클라이언트 - 로컬 DNS 간 사용)

반복적 쿼리: 최종값을 받을 때까지 클라이언트에서 쿼리를 계속 진행하는 방식(로컬 DNS 서버 - 상위 DNS간 사용)

DNS 질의 과정에서의 재귀적 쿼리와 반복적 쿼리 과정

 

DNS의 마스터 서버와 슬레이브 서버

DNS 서버에서는 2개의 서버로 나눌 수 있다.

  • 마스터 서버(프라이머리 서버)
  • 슬레이브 서버(세컨더리 서버)

두 서버는 도메인에 대한 존(Zone) 파일을 직접 관리하는지에 대한 여부로 구분할 수 있다.

마스터 서버는 직접 존 파일을 생성하여 도메인 정보를 관리하고, 슬레이브 서버는 마스터가 생성한 존 파일을 복제하게 된다. → 이 과정을 영역 전송(Zone Transfer)라고 한다.

 

만약에 마스터 서버에 이상이 생기면 어떻게 될까?

DNS 설정에는 만료 시간(Expiry Time)이 존재하는데, 이 시간이 지나면 슬레이브 서버가 도메인에 대한 질의를 응답할 수 없게 된다. + 존 정보도 받아올 수 없으므로 사용이 불가능해진다.

이러한 상황을 막기 위해서는 만료 시간 내에 마스터 서버를 복구하거나, 슬레이브 서버를 마스터로 전환하는 방법을 사용해야 한다.

 

 

 

DNS 주요 레코드

레코드 종류 내용
A(IPv4 호스트) 도메인 주소를 IPv4로 매핑
AAAA(IPv6 호스트) 도메인 주소를 IPv6으로 매핑
CNAME(별칭) 도메인 주소에 대한 별칭 (예: www)
SOA(권한 시작) 본 영역 데이터에 대한 권한
해당 도메인에 대해서는 다른 네임 서버에 질의하지 않고 직접 응답
NS(도메인의 네임 서버) 본 영역에 대한 네임 서버
하위 도메인에 대한 권한을 다른 네임 서버로 위임하는 역할로도 많이 사용
MX(메일 교환기) 도메인에 대한 메일 서버 정보(Mail eXchanger)
PTR(포인터) IP 주소를 도메인에 매핑(역방향)
IP 주소에 대한 질의를 도메인 주소로 응답하기 위한 레코드
TXT(레코드) 도메인에 대한 일반 텍스트

 

 

+ 메일 서버를 운영하기 위해 필요한 화이트 도메인이라는 개념이 존재한다. 한국인터넷진흥원(KISA)에서 정상적인 도메인을 인증하고 관리하는 제도로, 사전에 등록된 개인 혹은 사업자에 한해 국내 주요 포탈 사이트로의 이메일 전송을 보장해준다. 

++ 화이트 도메인과 반대로 불법 스팸메일을 발송하는 사이트를 실시간 블랙리스트(RBL, Realtime Blacking List) 정보로 관리하여 메일 발송을 제한하고도 있다.

++ 도메인을 한글 주소로 만들 수도 있는데, 이는 한글을 "퓨니 코드"로 변경하고, 퓨니코드로 DNS에 도메인을 생성해야 한다.

* 퓨니코드란? 영어가 아닌 자국어 도메인을 사용할 수 있도록 돕는 표준 코드이다.