DNS와 쿼리 프로세스
DNS와 쿼리 프로세스
DNS (Domain Name System)
- 계층적인 도메인 구조와 분산된 데이터베이스를 이용한 시스템으로 FQDN(Fully Qualified Domain Name)을 IP로 바꿔주는 시스템
www.example.com에서www를 호스트 또는 서브도메인이라고 하고example.com은 도메인 이름이다.
- 리졸버와 네임 서버로 구성
- 리졸버(Resolver): DNS 관련 요청을 네임서버로 전달하고 해당 응답값을 클라이언트에게 전달
- 네임 서버(Name Server): 도메인을 IP로 변환
- 네임 서버의 기능
- 도메인 이름 해석: 네임 서버는 도메인 이름을 IP 주소로 변환한다. 사용자가 도메인 이름을 웹 브라우저에 입력할 때, 네임 서버는 해당 도메인의 IP 주소를 찾아서 웹 브라우저에게 전달한다.
- DNS 레코드 관리: 네임 서버는 다양한 유형의 DNS 레코드를 관리한다. 이 레코드에는 A 레코드(IP 주소), MX 레코드(메일 서버), CNAME 레코드(캐논네임 또는 별칭), NS 레코드(네임 서버 정보) 등이 포함된다.
- 네트워크 요청 응답: 네임 서버는 인터넷을 통해 수신되는 DNS 조회 요청에 대응하여, 저장된 정보를 바탕으로 적절한 응답을 제공한다.
- 네임 서버의 기능
www.naver.com을 주소창에 쳤을 때 발생하는 일
아래 과정은 HTTPS 기준, 그리고 캐시가 일부 또는 전부 비어 있는 경우를 기준으로 한 일반적인 흐름이다.
- URL 파싱
- 브라우저는 입력된 문자열을 분석하여 스킴(
https), 호스트(www.naver.com), 포트(기본 443), 경로(/) 등을 분리한다.
- 브라우저는 입력된 문자열을 분석하여 스킴(
- HSTS 및 리다이렉트 사전 확인
- 브라우저에 해당 도메인의 HSTS(HTTP Strict Transport Security) 정보가 저장되어 있다면, HTTP 시도 없이 즉시 HTTPS로 접속한다.
- 이 단계는 실제 네트워크 요청 이전에 브라우저 내부에서 처리될 수 있다.
- 캐시 확인 (DNS 포함)
- 브라우저 캐시 → OS 캐시 → 로컬 DNS 캐시 순으로 확인한다.
- 이미 유효한 캐시가 있다면 DNS 질의 없이 IP 주소를 바로 사용한다.
- 캐시는 브라우저 캐시와 공유 캐시(CDN, 프록시 등)로 나뉠 수 있다.
- DNS 조회
- 캐시에 IP가 없다면 DNS 조회를 수행한다.
- 로컬 리졸버 → 루트 DNS → TLD DNS → 권한 있는 네임 서버 순으로 질의하여 IP 주소를 획득한다.
- TCP 연결 수립 (3-way handshake)
- 클라이언트와 서버 간에 TCP 연결을 수립한다.
- (SYN → SYN/ACK → ACK)
- TLS 핸드셰이크 (HTTPS)
- 서버 인증서 검증
- 대칭키 교환 및 암호화 통신 설정
- 이 단계가 끝나야 실제 HTTP 데이터 전송이 가능하다.
- HTTP 요청 전송
- 브라우저가 HTTP 요청(GET /)을 서버로 전송한다.
- 요청 헤더에는 Host, User-Agent, Cookie 등이 포함된다.
- 서버 처리 및 응답
- 서버는 요청을 처리한 뒤 HTTP 응답을 반환한다.
- 이때 첫 바이트가 도착하기까지의 시간을 TTFB(Time To First Byte)라고 한다.
- 리다이렉트 처리 (필요한 경우)
- 서버 응답이 301, 302 등의 리다이렉트라면, 브라우저는 Location 헤더를 따라 다시 요청을 수행한다.
- 콘텐츠 다운로드
- HTML을 시작으로 CSS, JS, 이미지 등의 리소스를 병렬적으로 요청 및 다운로드한다.
- HTTP/2 또는 HTTP/3 환경에서는 멀티플렉싱이 사용된다.
- 브라우저 렌더링
- HTML 파싱 → DOM 생성
- CSS 파싱 → CSSOM 생성
- Render Tree 생성
- Layout → Paint → Composite 순으로 화면을 렌더링한다.
DNS 쿼리 프로세스
- Root domain → Top Level Domain → Second Level Domain → Third Level Domain
- 오른쪽부터 역순으로 완벽한 주소를 찾아 IP주소를 매핑한다.
- Root Domain (.):
- DNS 쿼리는 루트 레벨에서 시작한다.
- 루트 DNS 서버는 전 세계적으로 분산되어 있으며, 최상위 도메인(TLD) 서버의 주소를 알려준다.
- Top-Level Domain (TLD) 서버:
- TLD 서버는
.com,.net,.org등과 같은 최상위 도메인을 관리한다. - 예를 들어, 사용자가
www.example.com을 요청하는 경우, 루트 서버는.com도메인을 관리하는 TLD 서버의 주소를 제공한다.
- TLD 서버는
- Second-Level Domain 서버:
example.com과 같은 두 번째 레벨의 도메인을 관리한다.- TLD 서버는 이 도메인에 대한 정보를 가지고 있는 네임 서버의 주소를 제공합니다.
- Third-Level Domain (Subdomain) 서버:
- 종종 필요에 따라, 세 번째 레벨 도메인 또는 서브도메인(예:
www.example.com에서www)에 대한 정보를 관리하는 서버가 있을 수 있다. - 대부분의 경우, 서브도메인은 두 번째 레벨 도메인과 같은 네임 서버에서 관리된다.
- 종종 필요에 따라, 세 번째 레벨 도메인 또는 서브도메인(예:
This post is licensed under CC BY 4.0 by the author.