Post

DNS와 쿼리 프로세스

DNS와 쿼리 프로세스

DNS (Domain Name System)

  • 계층적인 도메인 구조와 분산된 데이터베이스를 이용한 시스템으로 FQDN(Fully Qualified Domain Name)을 IP로 바꿔주는 시스템
    • www.example.com에서 www를 호스트 또는 서브도메인이라고 하고 example.com은 도메인 이름이다.
  • 리졸버와 네임 서버로 구성
    • 리졸버(Resolver): DNS 관련 요청을 네임서버로 전달하고 해당 응답값을 클라이언트에게 전달
    • 네임 서버(Name Server): 도메인을 IP로 변환
      • 네임 서버의 기능
        1. 도메인 이름 해석: 네임 서버는 도메인 이름을 IP 주소로 변환한다. 사용자가 도메인 이름을 웹 브라우저에 입력할 때, 네임 서버는 해당 도메인의 IP 주소를 찾아서 웹 브라우저에게 전달한다.
        2. DNS 레코드 관리: 네임 서버는 다양한 유형의 DNS 레코드를 관리한다. 이 레코드에는 A 레코드(IP 주소), MX 레코드(메일 서버), CNAME 레코드(캐논네임 또는 별칭), NS 레코드(네임 서버 정보) 등이 포함된다.
        3. 네트워크 요청 응답: 네임 서버는 인터넷을 통해 수신되는 DNS 조회 요청에 대응하여, 저장된 정보를 바탕으로 적절한 응답을 제공한다.

www.naver.com을 주소창에 쳤을 때 발생하는 일

아래 과정은 HTTPS 기준, 그리고 캐시가 일부 또는 전부 비어 있는 경우를 기준으로 한 일반적인 흐름이다.

  1. URL 파싱
    • 브라우저는 입력된 문자열을 분석하여 스킴(https), 호스트(www.naver.com), 포트(기본 443), 경로(/) 등을 분리한다.
  2. HSTS 및 리다이렉트 사전 확인
    • 브라우저에 해당 도메인의 HSTS(HTTP Strict Transport Security) 정보가 저장되어 있다면, HTTP 시도 없이 즉시 HTTPS로 접속한다.
    • 이 단계는 실제 네트워크 요청 이전에 브라우저 내부에서 처리될 수 있다.
  3. 캐시 확인 (DNS 포함)
    • 브라우저 캐시 → OS 캐시 → 로컬 DNS 캐시 순으로 확인한다.
    • 이미 유효한 캐시가 있다면 DNS 질의 없이 IP 주소를 바로 사용한다.
    • 캐시는 브라우저 캐시와 공유 캐시(CDN, 프록시 등)로 나뉠 수 있다.
  4. DNS 조회
    • 캐시에 IP가 없다면 DNS 조회를 수행한다.
    • 로컬 리졸버 → 루트 DNS → TLD DNS → 권한 있는 네임 서버 순으로 질의하여 IP 주소를 획득한다.
  5. TCP 연결 수립 (3-way handshake)
    • 클라이언트와 서버 간에 TCP 연결을 수립한다.
    • (SYN → SYN/ACK → ACK)
  6. TLS 핸드셰이크 (HTTPS)
    • 서버 인증서 검증
    • 대칭키 교환 및 암호화 통신 설정
    • 이 단계가 끝나야 실제 HTTP 데이터 전송이 가능하다.
  7. HTTP 요청 전송
    • 브라우저가 HTTP 요청(GET /)을 서버로 전송한다.
    • 요청 헤더에는 Host, User-Agent, Cookie 등이 포함된다.
  8. 서버 처리 및 응답
    • 서버는 요청을 처리한 뒤 HTTP 응답을 반환한다.
    • 이때 첫 바이트가 도착하기까지의 시간을 TTFB(Time To First Byte)라고 한다.
  9. 리다이렉트 처리 (필요한 경우)
    • 서버 응답이 301, 302 등의 리다이렉트라면, 브라우저는 Location 헤더를 따라 다시 요청을 수행한다.
  10. 콘텐츠 다운로드
    • HTML을 시작으로 CSS, JS, 이미지 등의 리소스를 병렬적으로 요청 및 다운로드한다.
    • HTTP/2 또는 HTTP/3 환경에서는 멀티플렉싱이 사용된다.
  11. 브라우저 렌더링
    • HTML 파싱 → DOM 생성
    • CSS 파싱 → CSSOM 생성
    • Render Tree 생성
    • Layout → Paint → Composite 순으로 화면을 렌더링한다.

DNS 쿼리 프로세스

  • Root domain → Top Level Domain → Second Level Domain → Third Level Domain
  • 오른쪽부터 역순으로 완벽한 주소를 찾아 IP주소를 매핑한다.
  1. Root Domain (.):
    • DNS 쿼리는 루트 레벨에서 시작한다.
    • 루트 DNS 서버는 전 세계적으로 분산되어 있으며, 최상위 도메인(TLD) 서버의 주소를 알려준다.
  2. Top-Level Domain (TLD) 서버:
    • TLD 서버는 .com, .net, .org 등과 같은 최상위 도메인을 관리한다.
    • 예를 들어, 사용자가 www.example.com을 요청하는 경우, 루트 서버는 .com 도메인을 관리하는 TLD 서버의 주소를 제공한다.
  3. Second-Level Domain 서버:
    • example.com과 같은 두 번째 레벨의 도메인을 관리한다.
    • TLD 서버는 이 도메인에 대한 정보를 가지고 있는 네임 서버의 주소를 제공합니다.
  4. Third-Level Domain (Subdomain) 서버:
    • 종종 필요에 따라, 세 번째 레벨 도메인 또는 서브도메인(예: www.example.com에서 www)에 대한 정보를 관리하는 서버가 있을 수 있다.
    • 대부분의 경우, 서브도메인은 두 번째 레벨 도메인과 같은 네임 서버에서 관리된다.
This post is licensed under CC BY 4.0 by the author.