호스트 식별 방법

  • 호스트 네임(hostname)
    • (ex. www.naver.com, www.google.com)
    • 가변 길이의 알파뉴메릭 문자로 구성된다.
    • 호스트의 위치에 대한 정보는 제공하지 않는다.
  • IP 주소
    • 4바이트 (32비트)
    • xxx.xxx.xxx.xxx 형태의 계층 구조
    • 호스트가 속한 네트워크의 위치와 호스트의 위치에 대한 정보를 제공한다.

 

DNS가 제공하는 서비스

  • DNS(Domain Name System)
    1. DNS 서버가 계층 구조로 구현된 분산형 데이터베이스
      • 서버 : BIND(Berkeley Internet Name Domain) 소프트웨어를 수행하는 유닉스 컴퓨터
    2. 호스트가 분산형 데이터베이스에 질의할 수 있게 하는 애플리케이션 계층 프로토콜
      • 프로토콜 : UDP 기반으로 수행되고, 포트 번호 53번을 사용한다.
  • 사용자가 제공한 호스트 네임을 IP 주소로 변환하는데 사용된다.
    • 인터넷 애플리케이션에서 URL로의 요청을 보낼 때 우선 DNS 클라이언트를 이용하여 DNS 서버에 호스트 이름에 대한 질의를 보내 IP 주소를 얻는다.
    • 가까운 DNS 서버에 원하는 IP 주소가 캐시되어 있어 평균 지연 시간을 줄여준다.
  • 호스트 엘리어싱(host aliasing) : 복잡한 호스트 네임을 가진 호스트에 대해 하나 이상의 별칭도 함께 저장한다.
    • 원래 호스트 네임을 **정식 호스트 네임(canonical hostname)**이라고 한다.
    • 별칭 호스트 네임으로부터 정식 호스트 네임을 얻을 수 있도록 한다. (google.com 별칭 이름 → www.google.com 정식 이름)
  • 메일 서버 엘리어싱(mail server aliasing) : 메일 애플리케이션으로부터 메일 서버에 대한 정식 호스트 네임을 얻기 위해 사용된다.
    • 기억하기 쉬운 전자메일 주소를 위해 주소로는 별칭을 사용하고 정식 호스트 네임이 필요할 때 DNS에 질의한다.
  • 부하 분산(load distribution) : 여러 중복 서버 사이에 부하를 분산하는 데에 사용한다.
    • 여러 중복된 서버는 서로 다른 IP 주소를 가지고 있는데, 이들 모두 하나의 연관된 호스트 네임을 가진다.
    • 해당 호스트 네임으로 질의를 받은 DNS 서버는 서로 다른 IP 주소들을 모두 응답해준다.
    • 이 때 응답하는 IP 주소의 순서를 순환되도록 하여, 가장 앞에 있는 IP 주소를 사용하는 클라이언트가 분산된 여러 서버에 순환적으로 요청을 보낼 수 있도록 한다.

 

DNS 동작 원리

분산 계층 데이터베이스

  • DNS 서버 계층
    • 루트 DNS 서버
      • 13개의 다른 기관에서 관리하며 400개 이상의 루트 DNS 서버가 존재한다.
      • DNS 서버 계층으로 질의가 들어올 때 제일 먼저 루트 DNS 서버로 전달된다.
      • 호스트 네임의 TLD에 맞는 TLD 서버의 IP 주소를 응답한다.
    • TLD(Top-Level Domain) DNS 서버
      • com, org, net, edu 같은 TLD 서버와 kr, fr, ca 같은 모든 국가에 대한 TLD 서버가 존재한다.
      • 각 TLD 서버는 각각에 속한 책임 DNS 서버들의 IP 주소를 가지고 있고, 이를 응답한다.
    • 책임(authoritative) DNS 서버
      • 자신의 서버에서 관할하는 호스트 네임과 그의 IP 주소가 매핑된 공개적인 DNS 레코드를 가진다.
      • 웹 서버나 메일 서버들은 자신의 호스트 네임과 IP 주소가 매핑된 DNS 레코드를 책임 DNS 서버에 저장해야 한다.
      • 이를 위해 자신들이 직접 책임 DNS 서버를 구현하여 저장하는 방법과 책임 DNS 서버 서비스를 제공하는 제공자에게 비용을 지불하고 저장하는 방법(ex. 가비아, 카페24) 중 선택할 수 있다.
  • 로컬 DNS 서버
    • ISP들은 로컬 DNS 서버(default name server)를 갖는다.
    • 호스트가 ISP에 접속할 때 일반적으로 DHCP를 이용하여 호스트에게 IP 주소를 할당한다.
    • 호스트가 DNS 질의를 보낼 때 제일 먼저 로컬 DNS 서버로 보내고, 이 서버에 원하는 호스트명이 없을 경우 로컬 DNS 서버에서 DNS 서버 계층으로 DNS 질의를 보낸다.
    • 로컬 DNS 서버를 중심으로 DNS 서버 계층과의 질의가 이루어지며 이렇게 얻어진 DNS 레코드는 캐싱되어 로컬 DNS 서버에 저장된다.
    • 재귀적 질의(recursive query)반복적 질의(iterative query)
      • 재귀적 질의 : 요청 호스트 - LDNS - DNS 서버
      • 반복적 질의 : LDNS - DNS 서버

DNS 캐싱(caching)

  • 로컬 DNS 서버는 질의 결과로 얻은 DNS 레코드를 로컬 메모리에 저장할 수 있다.
    • 저장할 때 저장해 둘 기간(대게 2일)을 설정해두고, 이 기간이 지난 레코드는 삭제한다.
    • 저장된 DNS 레코드에 해당하는 질의가 들어올 경우 추가적인 질의 없이 곧바로 이 레코드의 정보를 이용하여 응답할 수 있다.
  • 로컬 DNS 서버는 호스트에 대한 정보 뿐만 아니라 TLD 서버의 IP 주소도 저장할 수 있다.
    • DNS 서버 계층으로 질의할 경우 루트 DNS 서버로의 질의를 우회할 수 있다.

 

DNS 레코드와 메시지

(RFC1034, RFC1035)

자원 레코드(resource record, RR) : DNS 서버에서 호스트명과 IP 주소를 매핑하는데 사용하는 레코드

  • 각 DNS는 DNS 질의에 대해 하나 이상의 자원 레코드를 가지는 메시지로 응답한다.
  • 자원 레코드가 갖는 필드
    • Name(16bits), Value, Type(16bits), TTL(32bits, 자원 레코드가 캐시에 남아있는 기간)
  • Type 값에 따른 Name과 Value의 값
    • Type = A
      • Name : 호스트 명
      • Value : 호스트 명에 대한 IP 주소
      • Type A의 레코드 예시 : (relay1.bar.foo.com, 145.37.93.126, A)
    • Type = NS
      • Name : 도메인
      • Value : 도메인에 대한 책임 DNS 서버의 호스트 네임
      • Type NS의 레코드 예시 : (foo.com, dns.foo.com, NS)
    • Type = CNAME
      • Name : 별칭 호스트 명
      • Value : 별칭 호스트 명에 대한 정식 호스트 명
      • Type CNAME의 레코드 예시 : (foo.com, relay1.bar.foo.com, CNAME)
    • Type = MX
      • Name : 별칭 호스트 명
      • Value : 별칭 호스트 명에 대한 메일 서버의 정식 이름
      • Type MX의 레코드 예시 : (foo.com, mail.bar.foo.com, MX)
      → 하나의 별칭이 해당 회사의 메일 서버와 다른 서버들을 통칭하는 이름으로 사용될 수 있음.

RFC1034, page 11 - 더 많은 타입 종류
RFC1034, page 12 - 타입별 Value 값

  • 하나 이상의 자원 레코드를 전송하는 경우
    • 요청을 받은 서버가 해당 호스트의 책임 DNS 서버일 경우
      1. 호스트의 IP 주소를 알기 때문에 이를 응답하기 위한 Type A 레코드를 응답
    • 요청을 받은 서버가 해당 호스트의 책임 DNS 서버가 아닐 경우
      1. 해당 호스트를 포함하고 있는 DNS 서버의 호스트 명을 응답하기 위한 Type NS 레코드를 응답
      2. 알려주려고 하는 DNS 서버의 IP 주소를 응답하기 위한 Type A 레코드를 응답

 

DNS 메시지

  • 헤더 영역 (12 bytes)
    • 질의 식별자 (16 bits) : 질의/응답 메시지에 동일한 값을 사용하는 것으로 질의/응답 간의 일치를 식별한다.
    • 플래그
      • 질의/응답 플래그(1 bit) : 메세지가 질의(0)인지 응답(1)인지 구분
      • 책임 플래그(1 bit) : 응답하는 DNS 서버가 책임 DNS 서버일 때 설정되는 플래그
      • 재귀 요구 플래그(1 bit) : DNS 서버가 질의에 맞는 레코드를 가지고 있지 않을 때 재귀적 질의를 수행하길 원할 경우 클라이언트 측에서 설정하는 플래그
      • 재귀 - 가능 플래그(1 bit) : DNS 서버가 재귀적 질의를 지원할 수 있는 경우 응답 메시지에 설정되는 플래그
    • 질문 수, 답변 RR 수, 책임 RR 수, 추가 RR 수(각 16 bits 씩 4개)
      : 헤더영역 이후에 오는 영역들에 대한 갯수 정보
  • 질문 영역
    : 현재 질의에 대한 정보
    • 이름 필드 : 질의되는 이름을 포함할 필드
    • 타입 필드 : 이름에 대해 문의되는 질문 타입을 지정할 필드
  • 답변 영역
    : (응답에 포함) 처음 질의된 이름에 대한 자원 레코드
    • 하나의 호스트 명에 대응되는 IP 주소가 여러 개가 존재할 수 있기 때문에 한 개 이상의 응답 레코드를 가진다.
  • 책임 영역
    : 다른 책임 서버의 레코드
  • 추가 영역
    : 그 밖에 도움이 되는 레코드
    • MX 질의에 대한 응답의 응답 필드로 MX 서버의 정식 호스트 네임을 가진다.
      → 이 때 추가 영역에는 정식 호스트 네임의 IP 주소를 제공하는 Type A 레코드가 있다.

 

DNS 데이터베이스에 레코드 삽입

  • 도메인 네임을 등록기관에 등록하는 절차
    1. 등록기관 : 도메인 네임의 유일성을 확인하고 해당 도메인 네임을 DNS 데이터베이스에 넣는다.
      (ICANN에 의해 승인된 등록기관의 리스트 확인 사이트 : http://www.internic.net)
    2. 등록 시 주책임 DNS서버와 부책임 DNS서버의 이름과 IP주소를 등록기관에 제공해야 한다.
      1. 이렇게 제공된 이름과 IP 주소를 각각 type NS와 type A RR을 이용하여 TLD DNS 서버에 저장한다.
      2. (ex) (networkutopia.com, dns1.networkutopia.com, NS)
                (dns1.networkutopia.com, 212.212.212.1, A)
    3. networkutopia.com이 책임 DNS 서버에 Type A RR 로 저장되는지 확인한다.
      → 최근에는 이를 DNS 동적 갱신 방식으로 기술하고 있다.
  • 등록된 도메인 네임을 불러오는 절차

'Network' 카테고리의 다른 글

Tracert와 Traceroute  (0) 2023.05.26
콘텐츠 분배 네트워크(CDN)  (0) 2022.03.28
Network 개요  (0) 2022.03.01

+ Recent posts