본문 바로가기

네트워크

[네트워크] DNS (Domain Name System)

왜 DNS가 필요하게 되었을까?

DNS(Domain Name System)는 IP 주소 대신 사람이 이해하기 쉬운 도메인 이름을 사용하기 위해 등장

1. 초창기 인터넷 : ip 주소만 사용

인터넷이 처음 개발될 때(ARPANET 시대), 컴퓨터들은 IP 주소(예: 172.217.169.110)를 사용해서 서로 통신

  • 문제점
    1. IP 주소는 사람이 기억하기 어려움 → 웹사이트마다 숫자를 외워야 했음
    2. IP 주소는 변경될 수 있음 → 서버가 이동하거나 변경되면 새로운 IP 주소를 알아야 함
    3. 인터넷이 커질수록 관리가 어려움 → IP를 일일이 기록하는 방식(Hosts 파일)로는 한계

 

2. HOSTS 파일 방식의 한계

인터넷 초기에는 hosts.txt라는 파일에 IP 주소와 도메인 이름을 직접 매핑해서 관리하였다.

// hosts.txt

172.217.169.110 google.com
142.250.185.206 youtube.com

이 hosts file 은 서버가 ip 주소를 바꿀 경우, 업데이터가 늦어질 수 있고 이름이 중복될 수도 있다는 문제점이 존재한다.
따라서 이를 해결하기 위해

  • 호스트 이름에 계층 구조 사용
  • 분산된 데이터베이스 이용(DNS)

 

 

DNS 란?
  • 사람이 인식하기 쉬운 도메인 이름 → 서버가 인식하는 IP주소 로 변환하는 분산 데이터베이스 시스템
  • DNS는 naver.com 과 같은 도메인 이름을 IP 주소로 변환해 브라우저가 인터넷 자원을 로드할 수 있도록 도와준다.
    • 도메인 이름 : 체계적인 문자로 표현한 호스트 이름
  • DNS는 여러 개의 DNS 서버 (혹은 네임 서버)들로 구성된 분산 시스템
    • OSI 7계층 중에서 애플리케이션 계층에서 동작하는 프로토콜
    • 기본적으로 UDP/53을 기반으로 사용하지만, 특수한 상황에서는 TCP/53 도 사용한다.

 

DNS의 전송 프로토콜

  • UDP port 53 
    • 일반 DNS 질의 / 응답에 사용
  • TCP port 53
    • 영역 전송(Zone Transfer) 시, 사용
      • 안정성을 위해 두 개 이상의 DNS 서버를 사용할 경우, Master(기본 서버)와 Slave(보조 서버) 간의 동기화가 필요한데,
      • 이때 기본 서버의 정보를 이용해 보조 서버의 데이터를 최신 상태로 업데이트하는 작업을 영역 전송이라고 한다.
      • 마스터 서버와 슬레이브 서버를 동기화할 때, 마스터(Primary) 서버에서 변경된 DNS 데이터를 슬레이브(Secondary) 서버로 전송하여 두 서버의 데이터가 동일하게 유지되도록 한다.
    • 용량이 큰 경우(512bytes 초과 시) 사용

 

DNS에서 UDP를 사용하는 이유

  • 빠른 속도 (연결의 시작과 끝이 없음)
    • DNS 질의는 신뢰성보다는 속도(빠른 응답)가 더 중요한 서비스
    • DNS가 전송하는 데이터 패킷 사이즈는 매우 작다.
    • UDP는 512 bytes를 넘어가지 않는 패킷만 전송이 가능하고, 오버헤드가 없어서 속도가 빠르다.
  • 연결 상태 유지 불필요
    • DNS 서버는 도메인 네임을 IP로 변경해주는 서비스를 제공하기 때문에 항상 많은 클라이언트를 수용해야 한다.
    • UDP는 어떤 정보도 기록하지 않고, 유지할 필요가 없어서 TCP보다 UDP에서 동작할 때 더 많은 클라이언트를 수용할 수 있다.

 

 

DNS 구성요소

DNS는 분산시스템으로 도메인 이름을 분산하여 저장하는데 계층적 구조로 저장하고 관리한다.

  • 도메인 네임 스페이스 (Domain Name Space) 라는 규칙(방법)으로 도메인 이름 저장을 분산한다.
    • DNS는 분산 시스템으로 도메인 이름을 분산하여 저장하는데 계층적 구조로 저장하고 관리한다.
  • 네임 서버 (Name Server) : 권한 있는 DNS 서버
    • 해당 도메인의 IP 주소를 찾는 역할 담당
  • 리졸버 (DNS Recursive Resolver) : 권한 없는 DNS 서버
    • 클라이언트의 요청을 네임 서버로 전달하고, 찾은 정보를 클라이언트에게 제공하는 기능 담당

 

도메인 네임 스페이스 (Domain Name Space, 도메인 구조)

  • DNS는 트리(Tree) 구조로 도메인을 관리
  • ex. www.google.com 은 다음과 같은 트리 구조를 가질 수 있다.
        (root)
         ├── com
         │   ├── google
         │   │   ├── www
  • . (루트 도메인)
  • com (최상위 도메인, TLD)
  • google.com (2차 도메인)
  • www.google.com (서브 도메인)
  • 인터넷 상에서 사용되는 도메인은 전 세계적으로 고유하게 존재하는 이름
    • 정해진 규칙 및 체계에 따라야 하고, 임의로 변경 및 생성될 수 없다.
    • 도메인의 체계적인 분류와 관리를 위해 도메인 이름은 몇 개의 짧은 영문자를 . 으로 연결한 계층 구조를 가진다.
    • 트리에 연결된 호스트는 자원 레코드로 표현
      • 자원 레코드 : 네임서버가 관리하는 도메인 정보를 표현하는 데이터 구조
        네임서버(DNS 서버)는 각 도메인에 대한 정보를 자원 레코드(RR) 형식으로 저장
// 자원 레코드 기본 저장 구조

[도메인] [TTL] [클래스] [타입] [값]

도메인: 해당 정보가 속한 도메인 이름 (예: www.google.com)
TTL(Time To Live): 캐싱되는 시간 (예: 300 → 300초 동안 유효)
클래스: 거의 항상 IN(Internet)
타입: 레코드 유형 (예: A, CNAME, MX 등)
값: 도메인에 대한 정보 (예: IP 주소, 별칭 등)

 

  • 도메인 구조는 역트리 구조
    1. 루트 도메인 : 인터넷 도메인의 시작점
    2. 1단계 도메인 : 최상위 도메인, TLD (Top Level Domain) 이라고 함
      • 국가명을 나타내는 국가최상위도메인(ccTLD, country code TLD)과 일반적으로 사용되는 일반최상위도메인(gTLD, generic TLD)으로 구분됨
    3. 2단계 도메인 : 조직의 속성을 구분하는 co(영리 기업), go(정부 기관) 등이 있다
    4. 3단계 도메인 : 조직이나 서비스의 이름을 나타내는 도메인 이름으로, 사용자가 원하는 문자열을 사용할 수 있다.
    5. 호스트 : 마지막에 위치
  • 도메인을 표기할 때는 낮은 단계부터 최상위 도메인이 가장 뒤에 나타난다.
    • ex. www.naver.com

 

네임 서버 (DNS 서버)

    • 도메인은 도메인 계층 구조를 반영한 DNS 서버(네임 서버)에 저장 및 관리
      • 각 네임 서버는 도메인 계층의 일부 영역을 담당하고, 그 영역에 속한 도메인을 관리
      • 상위 계층의 네임 서버는 하위 계층의 도메인에 대한 정보를 관리 → 하위 계층 네임 서버의 ip 주소를 가지고 있음
      • 최상위 계층인 루트 네임 서버의 ip 주소는 모든 DNS 서버가 등록하여 관리 (길잡이 역할)

    • DNS 서버는 도메인 네임 스페이스를 위한 권한 있는 DNS 서버 권한 없는 DNS 서버 로 구분
      • 권한 있는 DNS 서버 : ip 주소와 도메인 이름 매핑
        • Root DNS 서버 
          • 최상위 네임 서버
          • ICANN(DNS 총괄 기구)에서 관리
          • 리졸버로 부터 발생한 DNS 요청에 대한 적절한 TLD DNS 서버의 ip 주소를 제공하는 역할
          • ip 주소로 변환하기 위한 첫 번째 단계로, 책장에서 색인에 해당하는 부분으로 설명할 수 있으며 일반적으로 다른 더 특정한 위치에 대한 참조로 사용
        • TLD DNS 서버
          • .com, .net, .kr과 같은 top-level domain 별로 존재하는 DNS 서버로 도메인 등록 기관에서 관리
          • Root DNS 서버에서 받은 요청을 처리하는 서버
          • Authoritative DNS 서버의 IP 주소를 제공하는 역할
          • ip주소 묶음
        • Authoritative DNS 서버
          • 실제로 우리가 원하는 도메인에 대한 Ip 주소를 매핑하는 서버 (1:1)
          • 개인 도메인과 ip 주소의 관계가 저장
          • 일반적으로 도메인 / 호스팅 업체의 네임 서버를 말함
      • 권한 없는 DNS 서버 : 질의를 통해 ip 주소를 알아내거나 캐시
        • Local DNS 서버 = ISP DNS 서버 = Resolver 서버 =  Recursive DNS 서버
        • 대표적으로 KT/LG/SK와 같은 ISP(통신사) DNS 있고, 브라우저 우회 용도로 많이 쓰는 구글 DNS, 클라우드플레어와 같은 Public DNS 서버가 있다.
        • 루트 → TLD → 권한 네임 서버 순서로 내려가면서 질의
        • 도메인에 대한 질의를 받은 리졸버는 설정된 DNS 서버로 DNS Query(질의) 전달하고, DNS 서버로부터 정보(도메인 이름, IP 주소) 응답 받아 클라이언트에게 제공하는 기능을 수행

권한 있는 네임 서버는 도메인 정보를 저장하고 응답하는 역할, 권한 없는 네임 서버는 질의를 보내서 정보를 찾아오는 역할

 

 

DNS 작동 방식

https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/

 

DNS 동작 과정 전체 예시

  1. 웹 브라우저에 www.hanamon.kr을 입력한다.
  2. 웹 브라우저는 이전에 방문한적 있는지 찾는다.
    • 브라우저 캐시 확인
    • OS 캐시 확인
    • 라우터 캐시 확인
    • ISP 캐시 확인 (Recursive DNS Server)
  3. ISP에서 DNS Iterative하게 쿼리를 날린다.
  4. ISP는 Authoritative DNS 서버에서 최종적으로 IP 주소를 응답받는다.
  5. ISP는 해당 IP 주소를 캐시한다.
  6. 웹 브라우저에게 응답한다.

 

 

 

reference

https://github.com/jmxx219/CS-Study/blob/main/network/DNS.md

 

CS-Study/network/DNS.md at main · jmxx219/CS-Study

Computer Science && Tech Interview . Contribute to jmxx219/CS-Study development by creating an account on GitHub.

github.com

https://var-log.tistory.com/221

 

[책집필] 면접 질문 - DNS

프론트엔드와 백엔드 개발자 그리고 서버 엔지니어의 기술 면접 질문으로 나올 수 있는 질문이다. DNS 에 대해 설명하세요 1. 30초 답변: DNS(Domain Name System)는 컴퓨터가 통신을 하는데 사용하는 숫

var-log.tistory.com

https://hanamon.kr/dns%EB%9E%80-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D%EA%B9%8C%EC%A7%80/

 

DNS란? (도메인 네임 시스템 개념부터 작동 방식까지) - 하나몬

이 게시물의 중요 포인트 DNS(도메인 네임 시스템)이 사람이 읽을 수 있는 도메인 이름(www.hanamon.kr)을 IP 주소로 변환하는 시스템이라는 것은 쉽게 알 수 있습니다. 이번 글에서는 이렇게 도메인

hanamon.kr