DNS(Domain Name System)은 인터넷의 전화번호부와 같다.
google.com
같은 도메인 이름으로 온라인 정보에 엑세스할 수 있다.
웹 브라우저는 IP 주소로 상호작용하는데, DNS는 도메인 이름을 IP 주소로 변환해 브라우저가 인터넷 리소스를 로드할 수 있도록 해준다.
인터넷에 연결된 각 장치에는 다른 기계가 장치를 찾는데 필요한 고유한 IP 주소가 있다.
DNS 서버는 IPv4, IPv6 체계의 복잡한 영숫자 IP 주소를 기억하지 않아도 된다.
도메인 이름은 인터넷 인프라의 핵심 부분이다.
도메인 이름은 인터넷에서 사용할 수 있는 모든 웹 서버에 대해 사람이 읽을 수 있는 주소를 제공한다.
도메인 이름 : 클라이언트 소프트웨어에서 웹사이트에 액세스하는 데 사용되는 숫자 IP 주소 에 매핑되는 텍스트 문자열
예를 들어 Google의 도메인 이름은 'google.com'
DNS
덕분에 사용자는 인간 친화적인 도메인 이름을 입력하고 원하는 웹사이트로 라우팅할 수 있다.
이 프로세스를 DNS 요청라고 한다.
브라우저의 위치 표시줄에 도메인 이름을 입력한다.
브라우저는 (로컬 DNS 캐시를 사용하여) 이 도메인 이름으로 식별되는 IP 주소를 이미 인식하고 있는지 컴퓨터에 묻고, 그렇다면 이름이 IP 주소로 변환되어 브라우저는 웹 서버와 내용을 주고 받는다.
컴퓨터가 도메인 이름 뒤에 어떤 IP가 있는지 모르는 경우 DNS 서버에 계속 요청한다.
DNS 서버의 작업은 정확히 어떤 IP 주소가 등록된 각 도메인 이름과 일치하는지 컴퓨터에 알려주는 것이다.
컴퓨터가 요청된 IP 주소를 알게 되면 브라우저는 웹 서버와 콘텐츠를 주고 받을 수 있다.
도메인 이름은 도메인 레지스트리(최상위 도메인 TLD를 관리하는 조직, ICANN의 IANA)에서 관리된다.
도메인 레지스트리는 도메인 이름의 판매를 레지스트라에게 위임한다.
누구든 도메인 이름을 레지스트라에 등록할 수 있으며, 3억개가 넘는 도메인 이름들이 등록되어 있다.
많은 등록 기관에서 비공개 등록 옵션을 제공한다.
등록 대행자의 정보는 해당 도메인의 WHOIS
목록(도메인 이름 사용 가능 여부)에 제공되며 등록 대행자는 등록자의 대리인 역할을 한다.
이 비공개 등록은 실제 등록자의 정보가 레지스트라의 데이터베이스에 보관되기 때문에 레지스트라만큼 안전하다.
도메인 등록을 판매하고 등록 정보에 액세스할 수 있는 조직으로서 레지스트라는
악의적인 행위자로부터 데이터와 액세스를 안전하게 유지해야 한다.
ICANN
은 레지스트라가 도메인 하이재킹(특정 도메인을 다른 웹사이트로 연결하는 등)
을 방지하기 위해 다음을 포함한 여러 단계를 수행할 것을 권장한다.
웹 주소라고도 하는 URL(Uniform Resource Locator)
에는 사이트의 도메인 이름과 전송 프로토콜 및 경로를 비롯한 기타 정보가 포함된다.
예를 들어, URL
'https://velog.io/recent'에서
https
는 프로토콜, velog.io
는 도메인 이름, /recent
는 특정 페이지의 경로이다.
도메인 이름은 일반적으로 점으로 구분되어 2~3 부분으로 나뉜다.
오른쪽에서 왼쪽으로 읽을 때 도메인 이름의 식별자는 가장 일반적인 것에서 가장 구체적인 것으로 이동한다.
ICANN
에서 관리한다..com
, .net
및 .org
.uk
및 .jp
.gov
.edu
SLD : TLD 바로 앞에 있는 레이블
Google의 미국 도메인 이름인 google.com
:
.com
: TLDgoogle
: 2LDGoogle Korea의 도메인 이름인 google.co.kr
의 경우:
.com
: TLD.co
: 2LDgoogle
: 3LD신뢰할 수 있는
레지스트라
를 선택해야 한다.
도메인에는 만료 시점이 있고(최대 10년), 갱신할 수 있다.
경우에 따라 등록 대행자는 만료된 도메인을 비싼 값에 다시 판매에 만료된 도메인 이름을 뺏는다.
DNS 확인 프로세스에는 호스트 이름을 컴퓨터 친화적인 IP 주소로 변환하는 작업이 포함된다.
사용자가 웹 페이지를 로드하려는 경우 사용자가 웹 브라우저에 입력한 내용(
google.com
)과 해당 웹 페이지를 찾는 데 필요한 기계 친화적인 주소(172.217.161.78
) 간에 번역이 이루어져야 한다.DNS 조회는 초기 요청 외에는 사용자 컴퓨터와 상호 작용이 필요하지 않다.
호스트 이름
을 IP
주소로 변환(해석)하는 첫 번째 단계이다.index
처럼 특정 위치에 대한 참조 역할을 한다..com
)을 호스팅한다.두 개념 모두 DNS 인프라에 통합된 서버지만, 각각 다른 역할을 수행하여 DNS 쿼리 파이프라인 내부의 다른 위치에 있다.
DNS는 도메인 이름을 적절한 IP 주소로 변환한다. 이 프로세스의 작동 방식을 알기 위해 웹 브라우저에서 DNS 조회 프로세스를 거쳐 다시 돌아오는 DNS 조회 경로를 살펴보자.
DNS 조회 정보는 쿼리 컴퓨터 내부에서 로컬로, DNS 인프라에서 원격으로
캐시
되는 경우가 많다.
일반적으로 8단계가 있지만, DNS 정보가 캐시되어 있으면 몇 단계를 건너뛰며 더 빨라진다.
사용자가 웹 브라우저에 google.com
을 입력하면, 쿼리가 인터넷으로 이동하고 재귀적 DNS 확인자가 이를 수신한다.
이어서 확인자가 DNS 루트 네임 서버(.)를 쿼리한다.
루트 서버가, 도메인에 대한 정보를 저장하는 최상위 도메인(TLD) DNS 서버(.com
또는 .net
)의 주소로 Recursor에 응답한다. google.com
을 검색할 경우의 요청은 .com
TLD를 가리킨다.
확인자가 .com
TLD에 요청한다.
TLD 서버가 도메인 이름 서버(google.com
)의 IP 주소로 응답한다.
재귀 확인자가 DNS로 쿼리를 보낸다.
google.com
의 IP 주소가 네임 서버에서 확인자에게 반환된다.
DNS 확인자가, 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답한다.
DNS 조회의 8단계를 거쳐 google.com
의 IP 주소가 반환되면, 이제 브라우저가 웹 페이지를 요청할 수 있다.
DNS 확인자는 DNS 조회의 첫 번째 단계이며, 초기 요청을 한 클라이언트를 처리한다.
확인자는 URL이 필요한 IP 주소로 변환되는 일련의 쿼리를 시작한다.
일반적인 캐시되지 않은 DNS 조회에는 재귀 쿼리, 반복 쿼리가 모두 포함된다.
일반적인 DNS 조회에서는 세 가지 유형의 쿼리가 발생한다.
이러한 쿼리를 조합하여 DNS 확인을 위한 최적화된 프로세스를 통해 이동 거리를 줄일 수 있다.
이상적인 상황에서는 캐시된 레코드 데이터를 사용할 수 있어 DNS가 비재귀 쿼리를 반환할 수 있다.
재귀 쿼리 - 재귀 쿼리에서 DNS 클라이언트는 DNS 서버(일반적으로 DNS 재귀 확인자)가 요청된 리소스 레코드를 찾을 수 없는 경우 오류 메시지로 클라이언트에 응답할 것을 요구한다.
반복 쿼리 - 이 상황에서 DNS 클라이언트는 DNS 서버가 가능한 최선의 답변을 반환하도록 한다. 쿼리된 DNS 서버에 쿼리 이름과 일치하는 항목이 없으면 하위 수준의 도메인 네임스페이스에 대해 권한이 있는 DNS 서버에 대한 참조를 반환한다. 그런 다음 DNS 클라이언트는 참조 주소를 쿼리한다.
이 프로세스는 오류 또는 시간 초과가 발생할 때까지 쿼리 체인 아래에 있는 추가 DNS 서버에서 반복된다.
비재귀 쿼리 - 일반적으로 DNS 확인자 클라이언트가 레코드에 대한 권한이 있거나, 해당 레코드가 캐시 내부에 있어서 액세스 권한이 있는 레코드에 대해 DNS 서버를 쿼리할 때 발생한다.
일반적으로 DNS 서버는 추가 대역폭 소비와 업스트림 서버의 로드를 방지하기 위해 DNS 레코드를 캐시한다.
캐싱 : 데이터 요청에 대한 성능과 안정성을 향상시키는 위치에 데이터를 임시로 저장하는 것
DNS 캐싱
은 요청하는 클라이언트에 더 가깝게 데이터를 저장해 DNS 쿼리를 더 일찍 해결할 수 있고 DNS 조회 체인 아래에 있는 추가 쿼리를 피할 수 있어서 로드 시간이 향상되고 대역폭/CPU 소비가 줄어든다.
DNS 데이터는 다양한 위치에 캐시될 수 있으며, 각 위치는 TTL(Time-to-Live)에 의해 결정된 정해진 시간 동안 DNS 레코드를 저장한다.
최신 웹 브라우저는 기본적으로 설정된 시간 동안 DNS 레코드를 캐시하도록 설계되었다.
DNS 캐싱이 웹 브라우저에 가까울수록 캐시를 확인하고 IP 주소에 올바른 요청을 하기 위해 더 적은 수의 처리 단계를 수행해야 한다.
DNS 레코드에 대한 요청이 있을 때 브라우저 캐시는 요청된 레코드를 확인하는 첫 번째 위치이다.
chrome://net-internals/#dns
운영 체제 수준 DNS 확인자는 DNS 쿼리의 두 번째이자 마지막 단계다.
이 쿼리를 처리하도록 설계된 운영 체제 내부의 프로세스를 일반적으로 "스텁 확인자" 또는 DNS 클라이언트라고 한다.
스텁 리졸버는 애플리케이션에서 요청을 받으면 먼저 자체 캐시를 확인하여 레코드가 있는지 확인한다. 그렇지 않은 경우 로컬 네트워크 외부의 DNS 쿼리(재귀 플래그 설정 포함)를 ISP(인터넷 서비스 공급자) 내부의 DNS 재귀 해석기로 보낸다.
ISP 내부의 재귀 해석기가 이전의 단계와 마찬가지로 DNS 쿼리를 수신하면 요청된 호스트에서 IP 주소로의 변환이 이미 로컬 지속성 계층 내부에 저장되어 있는지도 확인한다.
확인자에 A 레코드(IP주소)가 없지만 권한 있는 네임서버에 대한 NS 레코드가 있는 경우 DNS 쿼리의 여러 단계를 건너뛰고 해당 네임서버에 직접 쿼리한다.
이 바로 가기는 루트 및 .com
이름 서버(예: example.com
검색)에서 조회를 방지하고 DNS 쿼리 확인이 더 빨리 발생하도록 도와준다.
리졸버에 NS 레코드가 없으면 루트 서버를 건너뛰고 TLD 서버(이 경우 .com
)에 쿼리를 보낸다.
확인자에 TLD 서버를 가리키는 레코드가 없는 경우에는 루트 서버에 쿼리한다. 이 이벤트는 일반적으로 DNS 캐시가 제거된 후에 발생한다.
What is DNS?
What is a domain name? | Domain name vs. URL
What is a domain name registrar?
What is a Domain Name?