DNS는 인터넷 전화번호부와 같은 역할을 하여 사람들이 쉽게 웹 사이트의 주소를 찾을 수 있게 해준다.
사용자가 숫자로 된 IP 주소 대신 도메인 이름을 사용하여 웹 사이트에 접속을 하면, DNS는 그 도메인 이름에 해당하는 IP 주소를 찾아 넘겨준다.
이렇게 전화번호부에서 이름으로 연락처를 찾듯, 도메인 이름 example.com
으로 해당 웹 서버의 IP 주소 93.184.216.34
를 찾는 시스템을 DNS라고 한다.
DNS는 무수히 많은 도메인을 처리하기 위해 전 세계에 걸친 분산 시스템과 계층적 구조로 이루어져 있다.
분산 시스템을 통해 도메인을 .
(dot)으로 구분해서 각 기관에서 관리하도록 하고, 이렇게 분산 시스템을 통해 나누어진 도메인은 계층적 구조로 IP 주소를 매핑한다.
웹 사이트 주소 www.example.com
을 다음과 같이 표현할 수 있다.
mail.example.com
의 경우mail
은 host name이고 특정 이메일 서버를 가리킨다.example.com
은 domain name으로 인터넷 상에서 어떤 조직이나 개체를 나타낸다.mail.example.com
는 example.com
domain 내에 위치한 mail
서버를 정확하게 식별할 수 있으므로 FQDN이다. 오른쪽에서 왼쪽으로 갈수록 상위레벨에서 하위레벨로 진행된다.
'.'
으로 표현된다. .com
은 상업적 목적의 웹사이트에 사용되고, .gov
는 정부 기관, .edu
는 교육 기관, .kr
은 한국에 속한 웹사이트를 나타낸다.docs.aws.amazon.com
의 경우aws
는 amazon.com
의 subdomain이고,docs
는 aws.amazon.com
의 subdomain이라고 할 수 있다. Host와 Subdomain의 차이점
Host 가 네트워크상의 실제 장치를 가리킨다면,
Subdomain은 DNS 내에서의 계층적 위치를 나타낸다.
이 두 용어는 하나의 웹사이트 주소를 설명할 때 다음과 같이 함께 사용될 수 있다.
➡️mail.google.com
과developers.google.com
에서developers
는 모두 'google.com'의 subdomain이며, host라고 할 수 있다.
DNS는 다음과 같이 구성된다.
각 구성요소들을 자세히 알아보자.
DNS namespace는 위 그림과 같이 DNS가 저장하고 관리하는 domain의 계층적 구조이자 방법을 의미한다.
최상단에는 root domain(계층적 분류) "."
이 존재하고 그 아래에는 com
, org
와 같은 여러 최상위 domain이 있고 그 아래에 이어서 두 번째, 세 번째 레벨의 domain이 있다.
DNS Server는 다음 그림과 같이 동작한다.
DNS Resolver는 클라이언트 기기(예: 컴퓨터나 스마트폰)로부터 특정 domain name에 대한 쿼리를 받고, 필요한 domain 정보를 찾기 위해 여러 DNS name server에 추가적인 쿼리를 보내는 역할을 한다. 이 과정을 통해 최종적으로 domain의 IP 주소를 사용자에게 제공한다.
이렇게 domain name의 IP 주소를 얻게 되었다면 일정 기간동안 이 데이터는 캐싱되어 후에 같은 domain name 정보를 사용자가 요청했을 때 DNS name server에 요청하지 않고 빠르게 정보를 전달할 수 있게끔 한다.
DNS Resolver가 DNS name server들에 domain name에 대한 정보를 얻을때까지 요청을 계속한다는 점에서 재귀적인 특성을 가지고 있기 때문에 'Recursive server'라고도 불린다.
DNS Resolver와 같은 의미로 사용되는 용어들
다음과 같은 용어들이 있다면 DNS Resolver를 지칭하는 것이라고 보면 된다.
- Recursive server
- DNS Recursor
- DNS Client
- Local DNS server(of ISP) (LDNS)
Root server : DNS 계층의 최상위에 위치하며, TLD server의 IP 주소들을 저장해두고 안내하는 역할을 한다.
TLD server : .com
, .net
, .org
, 국가 코드(kr, uk..)
와 같은 domain을 관리한다. 각 TLD 서버는 해당 domain 내의 모든 domain name에 대한 정보를 가지고 있다.
Authoritative name server (Name server) : 특정 domain에 대한 최종적인 정보인 DNS record(예:IP 주소)를 가지고 있는 서버로, DNS 쿼리의 마지막 종착지이다. domain과 IP 주소의 관계가 기록되고 그 기록을 관리하는 서버이다. 그래서 '권한이 있다'의 의미인 'Authoritative'가 붙는다.
DNS record는 DNS server 중 Authoritative name server에 저장된 domain 정보와 그 단위를 의미하며, 그 record의 유형에 따른 domain 정보를 가지고 있다.
다음과 같이 여러 유형의 record가 있다.
DNS record 유형 | |
---|---|
A | Domain name을 IPv4 주소로 매핑한다. 예를 들어, www.example.com 을 IP 주소 192.0.2.1 에 매핑한다. |
AAAA | Domain name을 IPv6 주소로 매핑한다. A record의 IPv6 버전이다. |
CNAME | 하나의 domain name을 다른 domain name으로 매핑한다. 예를 들어, blog.example.com 을 www.example.com 으로 리디렉션할 수 있다. |
MX | Domain의 이메일을 처리하는 서버의 주소를 지정한다. 이메일 서버의 우선순위도 설정할 수 있다. |
TXT | Domain에 관련된 임의의 텍스트를 저장할 수 있다. SPF (Sender Policy Framework) 또는 DNS 기반의 이메일 인증 메커니즘에 사용된다. |
NS | Domain의 DNS 쿼리를 처리하는 네임서버를 지정한다. |
Domain name을 해당 서버의 IP 주소로 변환하는 가장 기본적인 기능을 수행하는 A
/ AAAA
record와,
한 domain name을 다른 domain name으로 매핑하는 CNAME
record가 가장 일반적으로 사용된다.
DNS query는 앞서 알아보았듯이 사용자의 기기가 DNS server에 특정 domain name에 대한 정보를 요청하는 프로세스를 뜻한다.
DNS server는 DNS query를 받고 저장된 DNS record를 조회하여 domain name에 대응하는 IP 주소를 찾아서 사용자에게 응답한다.
여기서 DNS query는 recursive query(재귀적)와 iterative query(반복적) 이렇게 두 가지 유형으로 분류된다.
사용자(Client)와 DNS resolver 간에 사용되는 query이다.
사용자의 기기가 DNS server에 domain name에 해당하는 IP 주소를 요청하면(1번), DNS Resolver는 해당 정보를 찾거나, 찾을 수 없으면 오류 메시지를 반환한다(8번).
이처럼 Recursive query는 최종 결과를 얻고 그 결과를 클라이언트에게 전달하는 전체적인 조회 과정을 의미한다.
DNS resolver와 DNS name server 간에 사용되는 query이다.
그림에서 2~7번과 같이 Root - TLS - Authoritative 로 이어지는 각 단계에서 domain name에 대한 정보를 질의하고, 이전 단계에서 받은 정보를 이용하여 검색 범위를 좁혀나간다. 이처럼 Iterative query는 DNS server가 domain name에 대한 정보를 얻을 때까지 여러 DNS name server에 반복적으로 질의를 하는 과정을 의미한다.
DNS Resolver는 이렇게 Recursive query와 Iterative query 두 가지 쿼리를 혼합하여 빠르고 정확하게 domain 정보를 찾는다.
다음은 example.com
을 DNS 조회하는 절차이다.
example.com
을 입력한다.example.com
의 IP 주소를 찾기 위해 DNS resolver로 요청을 보낸다.example.com
에 대한 기존 조회 결과가 있는지 확인한다.위 단계를 거치고도 캐싱된 IP 주소가 없다면 다음과 같이 DNS name server에 반복적으로 query하여 IP 주소를 얻는다.
.com
TLD server IP 주소 요청을 보낸다..com
TLD server의 IP 주소를 응답한다.example.com
도메인의 Authoritative server 의 IP 주소 요청을 보낸다.example.com
도메인의 Authoritative server IP 주소를 응답한다.example.com
도메인의 IP 주소 요청을 보낸다.example.com
도메인의 IP 주소를 응답한다.example.com
웹 페이지의 데이터와 콘텐츠를 클라이언트에게 전송한다.DNS에서는 동일한 도메인 이름에 여러개의 IP 주소를 설정하여 로드밸런싱을 할 수 있다.
하지만 DNS는 설정된 IP 주소의 서버가 정상인지 여부를 확인하지 않고 무조건 응답하여 가용성이 떨어질 수 있다.
이를 해결하기 위한 방법으로 GSLB를 사용할 수 있다.
GSLB는 DNS와 동일하게 동작하면서 동시에 로드 밸런서처럼 도메인에 연결된 서비스가 정상적인지 Health check를 수행하여 Health check에 실패한 서버는 DNS 응답에서 제외한다.
즉, 등록된 도메인에 대한 서비스가 정상인지 상태를 체크하고, 정상인 레코드(IP 주소)만 사용하여 가용성을 높인다.
또한 DNS 요청이 오면 지리적으로 가까운 서버를 반환하거나 네트워크 거리가 가까운 서버를 반환한다.
DNS 작동방식과 같지만 중간에 GSLB가 추가된 형태이다.
그림에서 DNS Resolver 와 Authoritative name server 사이에 위치한다.
example.com
을 입력한다.example.com
의 IP 주소를 찾기 위해 DNS resolver로 요청을 보낸다..com
TLD server IP 주소 요청을 보내고, 응답받는다..com
TLD server 로 example.com
도메인의 Authoritative server 의 IP 주소 요청을 보내고, 응답받는다.example.com
도메인의 IP 주소 요청을 보낸다.1.1.2.1
이 Health check에 실패했고, 정상 상태인 1.1.1.1
IP 주소를 응답했다.example.com
의 IP 주소를 1.1.1.1
로 최종 응답한다.DNS는 Health Check가 되지 않아 서버 장애가 발생해도 장애 서버로 연결 요청을 하지만
GSLB는 주기적인 Health Check를 통해 장애 서버가 체크되면 장애 서버를 제외한 정상 서버로 연결 요청을 한다.
만약 위와 같은 장애 상황에서 DNS가 Round Robin 방식의 로드밸런싱을 사용하고 있었다면 50%의 사용자들은 장애 서버로 연결될 것이다.
DNS는 Health Check가 되지 않아 설정된 서버가 오버로드 상태가 되어도 해당 서버로 연결을 요청하지만
GSLB는 부하 상태를 주기적으로 체크하여 부하가 균등하게 분배될 수 있도록 도와준다.
DNS는 클라이언트와 서버 사이 Network 구간의 Round Trip Time(왕복지연시간)을 측정하지 않는다.
GSLB는 클라이언트와 서버 사이 Round Trip Time을 측정하여 클라이언트가 응답이 빠른 서버로 연결되도록 해준다.
만약 DNS가 Round Robin 방식을 사용하고 있다면 사용자는 지리적 위치를 고려하지 않고 해외의 서버에 연결될 수 있는 확률을 가지게 된다.
반면 GSLB는 사용자의 지리적 위치를 고려하여 지리적으로 가까운 서버와 접속할 수 있다.
https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/
https://gentlysallim.com/dns%EB%9E%80-%EB%AD%90%EA%B3%A0-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AD%94%EC%A7%80-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/
https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/
https://webhostinggeeks.com/guides/dns/
https://anggeum.tistory.com/entry/DNS-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-2-DNS-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C-%EB%B0%8F-%EB%B6%84%EB%A5%98DNS-Resolver-DNS-%EC%84%9C%EB%B2%84
https://anggeum.tistory.com/entry/DNS-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-2-DNS-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C-%EB%B0%8F-%EB%B6%84%EB%A5%98DNS-Resolver-DNS-%EC%84%9C%EB%B2%84
root domain
https://raventools.com/marketing-glossary/root-domain/
DNS record
https://www.cloudflare.com/learning/dns/dns-records/
DNS query
https://www.cloudns.net/blog/recursive-dns-server/
hostname, subdomain, fqdn
https://superuser.com/questions/887173/what-is-a-hostname-versus-a-computer-name-versus-a-subdomain-versus-www/887183#887183
https://superuser.com/questions/59093/difference-between-host-name-and-domain-name?rq=1
GSLB
https://zigispace.net/1218
https://coding-start.tistory.com/339
https://manvscloud.com/?p=447