DNS(Domain Name System, RFC 1034)

DNS 프로토콜 설명

참고: RFC 1034, http://tools.ietf.org/html/rfc1034

DNS는 호스트 이름을 망 계층에서 IP 주소로 매핑하는 응용 계층 서비스이다.

도메인 이름 공간

도메인 이름 공간은 계층적인 트리 구조이다. 트리 구조의 각 노드는 63개의 문자로 구성한 문자열 레이블을 갖는데 루트 노드의 레이블은 빈 문자열이다. 같은 부모 노드의 자식 노드들은 서로 다른 레이블을 가질 수 있으며 이는 도메인 이름이 유일함을 보장한다.

그리고 도메인 이름은 자신의 이름에서 점(.)을 추가하여 부모 노드로 이동하며 완성한다. 위 그림에서 ehclub 노드의 완성한 이름(FQDN, Fully Qualified Domain Name)은 ehclub.net. 이다. 그리고 맨 끝이 점(.)으로 끝나지 않는 이름을 PQDN(Partially Qualified Domain Name)이라 부르며 루트까지 도달하지 않은 이름이다. 예를 들어 ehclub.net은 PQDN이다.

이름 주소 해석

DNS 서비스에서 클라이언트 요청으로 도메인 이름을 IP 주소로 매핑하는 역할은 해석기(Resolver)에서 수행한다. 이름 주소를 해석하는 방법에는 재귀적(Recursive)해석과 반복적(Iterative)해석과 캐싱(caching)이 있다. 이중에 캐싱은 단순히 도메인 정보를 캐시에 저장해 두었다가 이를 이용하는 것을 의미한다.

재귀적 해석은 계층 트리를 따라 도메인 이름 권한을 갖는 서버를 찾고 응답 또한 역으로 진행한다.


반복적 해석은 클라이언트가 도메인 서버에게 이름 해석을 요청하였을 때 자신이 해석하지 못하면 다음 도메인 서버의 IP 주소를 클라이언트에게 전달한다. 다시 클라이언트는 새로운 도메인 서버에게 이름 해석을 요청한다. 반복적 해석에서는 이와 같은 과정을 반복한다.

프로토콜 스택

DNS 프로토콜 스택

Identification: 질의 요청과 응답을 비교하기 위한 식별자이다.

    응답을 보낼 때는 질의 요청에서 이 번호를 복사하여 넣는다.

Flags: QR(1), opcode(4), AA(1), TC(1), RD(1), RA(1), Reserved(3), rcode(4)로 구성

  QR: 0 – 질의 요청, 1 – 응답

  opcode:

    0 – Query, 1 – Inverse Query, 2 – Status, 3 – Unassigned

    4 – Notify, 5 – Update, 6~15 – Unassigned

  AA: 네임 서버가 권한을 갖는 서버임을 나타냄, 응답에만 사용

  TC: 512 바이트 이상이어서 잘렸음을 의미함

  RD: 재귀적인 응답을 나타냄, 질의 요청에서 지정하고 응답 메시지에서 이를 복사한다.

  RA: 반복적인 응답이 가능함을 나타낸다. 응답에만 사용

  rcode: 오류 상태를 나타냄, 권한을 갖는 서버에서만 판단함

    0 – no error, 1 – format error, 2 – problem at name server, 3 – domain reference problem

    4 – query type not supported, 5 – administratively prohibited

    6~15 – reserved

CQUER: 질의 레코드 수

CANSR: 응답 레코드 수

CAUTR: 권한 레코드 수

CADDR: 추가 레코드 수

Records: 질의, 응답, 권한, 추가 레코드로 구성

참고: Domain Name System (DNS) Parameters,

    http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml

  질의 레코드: Query name, type(16), class(16)로 구성

    Qeury name: 가변 길이의 도메인 이름, 0으로 끝남

      예: ehclub.net은 5ehclub3net0로 표시함

    type:

      자주 사용하는 Query type

        1 – Host address(A), 2 – Authoritative name server(NS)

        5 – Canonical name(CNAME), 6 – Marks the start of a zone of authority(SOA)

        11 – Well known service(WKS), 12 – Domain name(PTR)

        13 – Host information(HINFO), 15 – Mail exchange(MX)

        28 – IPv6 address(AAAA), 252 – Transfer of an entire zone(AXFR)

        255 – Request for all records the server/cache has available(*)

    class

        0 – Reserved, 1 – Internet(IN), 2 – Unassigned, 3 – Chaos(CH),

        4 – Hesiod(HS), 5~253 – Unassigned, 254 – QCLASS NONE,

        255 – QCLASS *(ANY), 256~65279(Unassigned),

        65280~65534 – Reserved for private use, 65535 – Reserved

나머지 레코드: name, type, class, ttl(32), rdlen(16), rdata(가변)로 구성

    name, type, class는 질의 레코드와 같다.

    ttl: 초 단위

    rdlen: rdata의 길이

    rdata: type 필드에 의존

압축 레코드

  레코드의 시작하는 2비트가 11로 시작하는 것은 압축 레코드를 나타낸다.

  다음 14비트에 도메인 이름이 시작하는 offset(단위 바이트)를 갖고 있다.