인터넷에서 사용자가 웹사이트에 접속할 때, 우리는 주로 "www.example.com"과 같은 도메인 이름을 사용합니다. 하지만 컴퓨터는 이러한 도메인 이름을 직접 이해하지 못하며, IP 주소(예: 192.168.1.1)로 변환해야 합니다. 이러한 변환 작업을 수행하는 시스템이 바로 DNS(Domain Name System)입니다.
DNS는 사람이 이해할 수 있는 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 역할을 합니다. 이를 통해 사용자는 복잡한 IP 주소를 기억할 필요 없이 쉽게 웹사이트에 접속할 수 있습니다.
사용자가 브라우저에 "www.example.com"을 입력하면, 브라우저는 이 도메인 이름을 IP 주소로 변환하기 위해 DNS 요청을 시작합니다.
브라우저는 먼저 자신의 캐시에 해당 도메인의 IP 주소가 저장되어 있는지 확인합니다.
Cache-Control 또는 Expires 속성을 사용해 캐싱 기간이 설정됩니다.브라우저에 캐시된 IP 주소가 없다면, 운영 체제의 DNS 캐시를 확인합니다. 운영 체제는 이전에 조회된 DNS 결과를 일정 시간 동안 캐싱하고 있으며, 브라우저가 IP 주소를 찾지 못했을 때 운영 체제의 캐시를 사용합니다.
ipconfig /displaydns 명령어로, macOS & Linux에서는 sudo killall -HUP mDNSResponder 명령어로 캐시를 확인하거나 삭제할 수 있습니다.운영 체제의 캐시에도 IP 주소가 없다면, 인터넷 서비스 제공자(ISP)나 회사의 로컬 DNS 서버로 쿼리를 보냅니다. 로컬 DNS 서버는 사용자가 가장 먼저 접근하는 DNS 서버로, 자체적으로 캐시를 유지하여 성능을 최적화합니다.
로컬 DNS 서버에 캐시된 정보가 없다면, 로컬 DNS 서버는 여러 계층의 DNS 서버에 순차적으로 질의합니다. 최종적으로 권한 있는 DNS 서버(Authoritative DNS Server)에서 해당 도메인의 정확한 IP 주소를 얻습니다. 이 서버는 특정 도메인에 대한 공식적인 IP 주소 정보를 보유하고 있습니다.
루트 DNS 서버는 DNS 체계에서 가장 상위에 위치한 서버로, 전 세계에 13개의 루트 DNS 서버가 존재합니다. 루트 서버는 특정 최상위 도메인(TLD)을 관리하는 TLD DNS 서버의 위치를 알려주는 역할을 합니다.
TLD DNS 서버는 특정 최상위 도메인(TLD, 예: .com, .org, .kr)을 관리하는 DNS 서버입니다. 루트 서버가 알려준 TLD 서버는 해당 TLD에 등록된 도메인 이름의 권한 있는 DNS 서버 위치를 반환합니다.
로컬 DNS 서버는 권한 있는 DNS 서버로부터 받은 IP 주소를 사용자에게 반환하고, 다음 요청을 위해 캐시에 저장합니다. 이 캐싱은 성능을 높이는 데 매우 중요한 역할을 합니다.
마지막으로 브라우저는 반환받은 IP 주소를 사용하여 사용자가 원하는 웹사이트에 접속하게 됩니다.
재귀적 질의(Recursive Query)
반복적 질의(Iterative Query)