DNS의 동작 방식

윤효준·2025년 3월 7일

콤퓨타 공부

목록 보기
14/17

DNS(Domain Name System)의 동작 방식

인터넷에서 사용자가 웹사이트에 접속할 때, 우리는 주로 "www.example.com"과 같은 도메인 이름을 사용합니다. 하지만 컴퓨터는 이러한 도메인 이름을 직접 이해하지 못하며, IP 주소(예: 192.168.1.1)로 변환해야 합니다. 이러한 변환 작업을 수행하는 시스템이 바로 DNS(Domain Name System)입니다.


1. DNS의 역할

DNS는 사람이 이해할 수 있는 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환하는 역할을 합니다. 이를 통해 사용자는 복잡한 IP 주소를 기억할 필요 없이 쉽게 웹사이트에 접속할 수 있습니다.


2. DNS의 동작 방식

2.1 사용자가 웹사이트 접속 요청

사용자가 브라우저에 "www.example.com"을 입력하면, 브라우저는 이 도메인 이름을 IP 주소로 변환하기 위해 DNS 요청을 시작합니다.

2.2 브라우저 캐시 확인

브라우저는 먼저 자신의 캐시에 해당 도메인의 IP 주소가 저장되어 있는지 확인합니다.

📌 언제 캐싱이 될까?

  • 브라우저는 사용자가 이전에 방문한 웹사이트의 DNS 정보를 자동으로 캐싱합니다.
  • HTTP 응답 헤더의 Cache-Control 또는 Expires 속성을 사용해 캐싱 기간이 설정됩니다.
  • 캐싱되는 정보에는 IP 주소, TTL(Time To Live), 쿼리 유형(A, CNAME, MX 등)이 포함됩니다.

📌 유효 기간이 지난 캐시를 만난다면?

  • 브라우저는 캐시된 DNS 레코드의 TTL이 만료되었을 때, 기존 캐시를 무시하고 새로운 DNS 조회를 시도합니다.
  • 만약 새 DNS 조회에 실패하면, 브라우저는 '페이지를 표시할 수 없습니다'와 같은 오류 메시지를 표시할 수 있습니다.

2.3 운영 체제(OS) 캐시 확인

브라우저에 캐시된 IP 주소가 없다면, 운영 체제의 DNS 캐시를 확인합니다. 운영 체제는 이전에 조회된 DNS 결과를 일정 시간 동안 캐싱하고 있으며, 브라우저가 IP 주소를 찾지 못했을 때 운영 체제의 캐시를 사용합니다.

📌 운영 체제의 캐싱 정보

  • 운영 체제 캐시에는 도메인 이름과 IP 주소의 매핑 정보, TTL 정보, 쿼리 유형 등이 포함됩니다.
  • Windows에서는 ipconfig /displaydns 명령어로, macOS & Linux에서는 sudo killall -HUP mDNSResponder 명령어로 캐시를 확인하거나 삭제할 수 있습니다.

2.4 로컬 DNS 서버(리졸버) 요청

운영 체제의 캐시에도 IP 주소가 없다면, 인터넷 서비스 제공자(ISP)나 회사의 로컬 DNS 서버로 쿼리를 보냅니다. 로컬 DNS 서버는 사용자가 가장 먼저 접근하는 DNS 서버로, 자체적으로 캐시를 유지하여 성능을 최적화합니다.

2.5 권한 있는 DNS 서버(Authoritative DNS Server)

로컬 DNS 서버에 캐시된 정보가 없다면, 로컬 DNS 서버는 여러 계층의 DNS 서버에 순차적으로 질의합니다. 최종적으로 권한 있는 DNS 서버(Authoritative DNS Server)에서 해당 도메인의 정확한 IP 주소를 얻습니다. 이 서버는 특정 도메인에 대한 공식적인 IP 주소 정보를 보유하고 있습니다.

2.6 루트 DNS 서버(Root DNS Server)

루트 DNS 서버는 DNS 체계에서 가장 상위에 위치한 서버로, 전 세계에 13개의 루트 DNS 서버가 존재합니다. 루트 서버는 특정 최상위 도메인(TLD)을 관리하는 TLD DNS 서버의 위치를 알려주는 역할을 합니다.

2.7 TLD DNS 서버(Top-Level Domain DNS Server)

TLD DNS 서버는 특정 최상위 도메인(TLD, 예: .com, .org, .kr)을 관리하는 DNS 서버입니다. 루트 서버가 알려준 TLD 서버는 해당 TLD에 등록된 도메인 이름의 권한 있는 DNS 서버 위치를 반환합니다.

2.8 IP 주소 반환 및 캐싱

로컬 DNS 서버는 권한 있는 DNS 서버로부터 받은 IP 주소를 사용자에게 반환하고, 다음 요청을 위해 캐시에 저장합니다. 이 캐싱은 성능을 높이는 데 매우 중요한 역할을 합니다.

2.9 웹사이트 접속

마지막으로 브라우저는 반환받은 IP 주소를 사용하여 사용자가 원하는 웹사이트에 접속하게 됩니다.


3. 재귀적 질의와 반복적 질의

  • 재귀적 질의(Recursive Query)

    • 예시: 사용자가 "www.example.com"을 입력하면, 사용자의 컴퓨터는 로컬 DNS 서버에 질의합니다. 로컬 DNS 서버는 사용자를 대신하여 루트 DNS 서버, TLD DNS 서버, 권한 있는 DNS 서버까지 순차적으로 반복적 질의(Iterative Query)를 통해 IP 주소를 가져옵니다.
    • 사용자는 최종 IP 주소만 받게 됩니다.
  • 반복적 질의(Iterative Query)

    • 예시: 로컬 DNS 서버가 루트 DNS 서버에 "www.example.com"을 물어보고, 루트 서버가 TLD 서버의 위치를 알려주면 다시 TLD 서버에 물어보는 방식으로 진행됩니다.
    • 로컬 DNS 서버는 루트 → TLD → 권한 있는 DNS 서버로 반복적 질의를 통해 최종 IP 주소를 얻어냅니다.

서버 간 통신의 차이점

  • 재귀적 질의: 로컬 DNS 서버가 사용자를 대신하여 모든 DNS 서버(루트, TLD, 권한 있는 서버)에 직접 질의합니다. 각 DNS 서버는 최종 IP 주소를 받을 때까지 다음 DNS 서버와 통신을 이어갑니다.
  • 반복적 질의: 각 DNS 서버는 자신이 알고 있는 최선의 정보를 제공하고, 로컬 DNS 서버가 직접 다음 서버에 반복적으로 질의하는 방식입니다. 각 DNS 서버는 최종 IP 주소를 제공하지 않고, 다음 DNS 서버의 위치를 알려줍니다.
profile
작은 문제를 하나하나 해결하며, 누군가의 하루에 선물이 되는 코드를 작성해 갑니다.

0개의 댓글