DNS(Domain Name System)은 IP를 사람들이 쓰기 쉬운 이름(별칭)으로 변환하여 사용하는 시스템입니다.
FQDN(Fully Qualified Domain Name)은 도메인의 풀네임으로, {호스트 네임}, {도메인 네임} 으로 구성된 것을 말합니다.
ex) www.minuset.com 이면, 호스트 네임은 www이고, 도메인 네임은 minuset.com이 됩니다.
도메인의 시스템은 상위 도메인 일수록 . 의 우측으로 가는 구조이고, 하위 도메인 일수록 . 의 좌측으로 값이 추가되는 구조를 가집니다.
ex) minuset.com > www.minuset.com
TLD(Top Level Domain)는 가장 오른쪽에 적힌 최상위 도메인 네임 입니다.
도메인의 계층은 실제로 IP로 변환할 때, 보다 더 빠르게 찾아 낼 수 있도록 하는 원리도 있습니다.
최상위 도메인은 해당 도메인의 가장 높은 책임을 가지기 때문에, 가장 먼저 도달해서 IP를 물어보고 다음 하위 도메인 소유지로 가서 물어보고 도메인 네임에 대해서 관할 IP를 찾고 나면, 호슽트 네임이 어떤 IP로 포워딩 되어 있는지 확인하여 최종적인 IP를 알아내는 과정을 거칩니다.
TLD네임서버는 IANA(Internet Assigned Numbers Authority)가 관리하는데, IANA는 TLD를 1. 일반 최상위 도메인(.com, .net, .org 등), 2. 국가 코드 도메인(.kr .uk .us등) 두 가지로 구별합니다. (참고로 일반은 국가에 귀속되지 않은 도메인이라 볼 수 있습니다.)
네임서버(NameServer)는 여러 DNS를 IP와 페어로 테이블의 형태를 들고 있는 서버로 UDP:53을 사용하여 클라이언트가 원하는 도메인, IP주소를 자신의 테이블에서 조회하여 알려주거나 자신도 모르는 도메인이면 수소문해주는 역할을 수행한 뒤, 존재하는 DNS면 업데이트를 하면서 알려주는 역할을 수행합니다.
클라이언트가 네임서버에게 물어보는 순서는 다음가 같습니다.
클라이언트가 알고 있는 DNS 서버에게 먼저 물어봅니다. (Local DNS Server)
로컬 DNS 서버가 해당 DNS를 모르거나, 장시간 물어보는 클라이언트가 없어 DNS 캐시에서 삭제가 되었으면, BGP(AnyCast)를 통하여 대신 DNS에 대한 수소문을 해줍니다.
수소문은 가장 효율적인 루트 네임 서버(root-servers.org) -> TLD 네임 서버(iana.org) -> 책임 네임 서버 (CloudFlare나 Hosting.kr, Gabia등)의 순서로 수행한 뒤 DNS를 찾아내면 연관된 모든 네임서버가 DNS 캐시 테이블에 해당 DNS를 추가합니다.
모든 네임서버의 DNS 캐시는 일정시간동안 호출하지 않으면 자동적으로 지워지는 특성을 가집니다.
네입서버가 만약, DNS를 찾아낸 겨우에는 Authoritative answer와 답 (해당 IP)을 주지만, AnyCast(수소문) 방식으로도 답을 도저히 못 찾은 경우에는 Non-authoritative answer와 응답 또는 실패의 결과를 줍니다.
DNS는 그저 IP를 일대일 대응ㄴ하는 용도로만 쓰이지 않습니다.
DNS가 제공하는 서비스로는 다음 4가지가 있습니다.
Hostname to IP : 호스트 네임을 IP 주소로 변환해줍니다.
Host aliasing : 간단한 별칭 네임으로 복잡한 호스트 네임을 갈 수 있게 해줍니다. (즉 다대일 구조)
load distributiob : 하나의 도메인으로 여러 IP를 연결하여 분산 접속을 할 수 있게 해줍니다. (즉, 일대다 구조)
Mail server aliasing : 늑정 메일 주소를 간단한 별칭 도메인으로 연결시켜 줍니다.
2번의 경우 가상 호스팅(virtual hosting)을 통하여 서버 측에서 어떤 도메인으로 들어왔는지에 따라 다르게 값을 보여주도록 할 수도 있습니다. (Nginx등에서 Server name이 해당됨)
3번의 경우를 Round-robin DNS로도 표현하며, 부하가 많이 걸리는 곳에 Scale Out의 형태로 자주 사용됩니다.
DNS Name Server는 DNS 레코드(DNS Record)를 가지고, 해당 레코드에 맞게 IP를 알려줍니다.
A Type : 도메인 주소를 IPv4로 변환하는 타입입니다. (type:1)
NS Type : 도메인 이름에 대한 책임 네임서버를 지정하는 타입입니다. (type:2)
CNAME(Canonical NAME) Type : 도메인의 별칭을 지정하는 타입입니다. (type:5)
SOA(Start of Authority) Type : 도메인의 영역과 해당 여역의 대표 값을 지정하는 타입입니다. (type:6)