Domain name 과 DNS(Domain Name Server)는 무엇이고 어떻게 동작하는가?
Domain name 이란
인터넷에 연결된 서버는 유일한 주소값을 갖고 있으며 이를 IP 주소(IP Address) 라고 부릅니다.
현재 IP Address 는 IPV4 와 IPV6 가 있으며 IPV4 는 32 비트 정수이므로 2^32 개만큼 숫자를 부여할 수 있지만 사설망(private network) 같은 특수한 용도의 IP 대역이 있습니다.
IP 주소 범위 | 주소 개수 | 클래스 내용 |
---|---|---|
10.0.0.0 – 10.255.255.255 | 16,777,216 | 클래스 A 하나 |
172.16.0.0 – 172.31.255.255 | 1,048,576 | 16개의 인접 클래스 B |
192.168.0.0 – 192.168.255.255 | 65,536 | 256개의 인접 클래스 C |
출처: wikipedia
이런 IP 대역을 제외하면 IPv4 는 대략 3,706,452,992 개를 부여할 수 있으나 인터넷 서버의 폭증으로 주소 고갈 우려가 있습니다.
사용자들이 웹 브라우저로 쇼핑을 하거나 검색을 하거나 블로그 글을 읽을 때 브라우저는 쇼핑몰이나 검색 엔진, 블로그의 IP 주소로 접속을 합니다.
즉 google.com 의 IPv4 주소는 142.250.199.110 이고 IPv6 주소는 2404:6800:4004:821::200e 이며 브라우저는 이 주소로 서버를 찾아가서 접속합니다.
IPv6는 64 비트 주소 체계로 사설망같은 특수 용도의 주소를 제외하더라도 대략 2^128 만큼의 갯수를 가질 수 있으므로 주소가 부족해질 염려가 없습니다.
잠깐 😮우리는 google.com 이나 amazon.com 을 입력했지 저 기억하기 어려운 숫자와 문자들을 입력하지는 않았습니다.
이렇게 사용자들이 기억하고 쉽게 찾을수 있도록 서버에 부여한 google.com 이나 amazon.com 같은 의미있는 이름을 domain name 이라고 합니다.
그리고 google.com 이라는 domain name 을 IP 주소로 변환해주는 인터넷 서비스를 DNS(Domain Name Server) 라고 부르며 도메인 등록 대행 서비스(godaddy.com, hostring.kr 등)들은 별도의 DNS 서비스도 같이 제공합니다.
DNS 조회하기
대부분의 운영체제들은 명령행에서 domain name 에 매칭되는 IP Address 를 조회할 수 있는 명령어들을 제공합니다.
대표적인 명령어인 nslookup 를 사용하면 서버의 IP 를 확인할 수 있으며 예로 다음은 google.com 의 IP 정보를 확인하는 명령어입니다.
$ nslookup google.com Non-authoritative answer: Name: google.com Address: 142.250.199.110 Name: google.com Address: 2404:6800:4004:821::200e
리눅스는 host 라는 명령어도 제공하는데 더 편리한 결과를 출력합니다.
$ host google.com google.com has address 172.217.175.238 google.com has IPv6 address 2404:6800:4004:819::200e google.com mail is handled by 30 alt2.aspmx.l.google.com. google.com mail is handled by 20 alt1.aspmx.l.google.com. google.com mail is handled by 50 alt4.aspmx.l.google.com. google.com mail is handled by 40 alt3.aspmx.l.google.com. google.com mail is handled by 10 aspmx.l.google.com.
제 블로그인 lesstif.com 은 IP v4 주소만 있고 IPv6 주소는 없는 걸 확인 할 수 있습니다.
$ host lesstif.com Non-authoritative answer: Name: lesstif.com Address: 54.180.58.123
질의 결과중 Non-authoritative answer 에 대해서는 아래에서 설명하겠습니다.
DNS 는 어떻게 동작하는가
전 세계 서버들의 도메인 네임을 관리하기 위해 DNS 는 계층 구조로 되어 있으며 동작 방식에 따라 4가지 유형으로 분류할수 있습니다.
재귀적 DNS
"재귀적 DNS"(Recursive DNS)는 웹 브라우저등 클라이언트 컴퓨터로부터 DNS 변환 요청을 받아서 수행하는 서버입니다.
예로 사용자가 브라우저를 구동하고 docs.google.com 을 입력하면 이 재귀적 DNS 확인자에게 변환을 요청하게 되며 보통 ISP 들이 자사 고객용으로 별도 제공하는 경우가 많으며 public DNS 서버도 있습니다.
예로 KT 의 DNS 서버인 168.126.63.1 이나 구글의 공개 DNS 서버인 8.8.8.8, CDN 업체인 Cloudflare 의 DNS 서버인 1.1.1.1 이 이런 public DNS 서버입니다.
개념상 "재귀적 DNS" 는 사용자에게 docs.google.com 의 변환을 요청받았다면 이를 루트 네임 서버에 요청하게 됩니다.
루트 네임 서버
루트 네임 서버(root name server)는 최상위에 위치한 네임 서버로 국제인터넷주소관리기구(ICAAN;Internet Corporation for Assigned Names and Numbers) 에서 관리하는 서버입니다.
사용자가 docs.google.com 을 요청했으므로 재귀 DNS 확인자는 루트 이름 서버에 .com 에 대한 TLD 이름 서버를 요청하며 루트 이름 서버는 이 정보를 찾아서 전달합니다.
TLD 네임 서버
TLD(Top-level Domain) 은 .com 이나 .co.kr, .edu 같은 최상위 레벨 도메인을 의미하며 각 TLD에 따라 별도의 네임 서버를 운영하고 있습니다.
예로 .com 에 대한 TLD name server 가 별도로 있으며 .net 에 대한 별도 TLD name server 가 있습니다.
이제 .com TLD 네임 서버에 연결한 재귀 DNS 확인자는 google.com 을 관리하는 "권한있는 네임 서버" 정보를 얻은 후에 여기로 접속하게 됩니다.
권한있는 네임 서버
권한있는 네임 서버(authoritative name server))는 최종 네임 서버로서 google.com 하위의 모든 도메인을 관리하는 서버입니다.
사용자가 docs.google.com 에 대한 정보를 요청했으므로 보유한 database 에서 정보를 찾아서 요청한 "재귀적 DNS" 에 전달해 주게 됩니다.
전체 과정을 그림으로 나타내면 다음과 같습니다.
- 사용자가 docs.google.com IP 를 재귀적 DNS 에 요청
- 재귀적 DNS 는 Root DNS 에 .com 에 대한 TLD DNS 정보 요청
- Root DNS 는 TLD DNS 정보 전송
- 재귀적 DNS 는 TLD DNS 에 google.com 에 대한 권한있는 네임 서버 정보 요청
- TLD DNS 는 google.com 를 관리하는 권한있는 네임 서버 정보 전송
- 재귀적 DNS 는 권한있는 DNS에 docs.google.com 서버의 IP 정보 요청
- 권한있는 DNS 는 재귀적 DNS 에 IP 정보 전달
- 재귀적 DNS 는 사용자에게 docs.google.com 의 IP 정보 전달
- 사용자는 docs.google.com 에 연결 요청
- docs.google.com 에 연결됨
현실에서 매번 저렇게 요청한다면 아마 DNS 패킷때문에 인터넷을 사용할 수 없을 것입니다.
그래서 실세상에서는 "재귀적 DNS"가 일정 시간동안 DNS 정보를 캐싱하고 요청시에 캐싱된 정보를 전송해 줍니다.
DNS 캐싱 주기는 바로 TTL(Time to Live) 기간 동안 보유하며 이는 DNS 서버마다 다를 수 있습니다.
non authoritative answer 란?
위에서 nslookup 명령어 실행시 "Non-authoritative answer" 라는 응답 메시지를 기억할 겁니다.
이 의미는 사용자가 권한있는 DNS 를 사용하지 않고 재귀적 DNS 를 사용해서 DNS 를 조회했을 때 나는 메시지로 재귀적 DNS 는 권한있는 도메인과 달리 캐싱 주기가 있으므로 신규 추가된 도메인을 모를 수 있어서 나는 경고 메시지입니다.
즉 제 도메인인 lesstif.com 에 SSL 인증서를 판매하는 sslcert.lesstif.com 이라는 하위 도메인을 추가했을 경우 lesstif.com 을 관리하는 "권한있는 DNS" 가 아닐 경우 변경을 반영하는데 시간이 좀 걸립니다.
nslookup 의 저 메시지가 보기 싫다면 조회시 "권한있는 DNS" 를 사용하도록 설정하면 됩니다.
먼저 nslookup 에 name server 레코드 조회를 위해 -type=ns 를 추가해서 실행합니다.
$ nslookup -type=ns google.com Authoritative answers can be found from: ns1.google.com internet address = 216.239.32.10 ns2.google.com internet address = 216.239.34.10 ns3.google.com internet address = 216.239.36.10 ns4.google.com internet address = 216.239.38.10
그러면 위와 같이 Authoritative DNS 정보가 표시됩니다. 총 ns1 ~ ns4 까지 4개의 서버가 있는 걸 확인할 수 있으며 이 서버에 질의를 하면 됩니다.
$ nslookup docs.google.com ns1.google.com Server: ns1.google.com Address: 216.239.32.10#53 Name: docs.google.com Address: 172.217.175.78 Name: docs.google.com Address: 2404:6800:4004:81e::200e
그러면 "Non-authoritative answer" 라는 응답 메시지가 사라진 것을 확인할 수 있습니다.
같이 보기
- Linux에 DNS(Domain Name Server) 설정 방법
- 브라우저 주소창에 google.com 을 입력했을 때 DNS 를 찾는 방법
- Linux 에서 네임 서비스 스위치(nsswitch; Name Service Switch) 설정
- 클라우드 플레어(Cloudflare) 를 DNS 서버로 사용하기