[혼공네] 5-1. DNS와 자원

목록으로 돌아가기

도메인 네임과 네임 서버

일반적으로 사용자는 상대 호스트를 특정하기 위해 도메인 네임을 사용한다. www.example.com과 같은 형태다. 이러한 도메인 네임과 IP 주소는 네임 서버에서 관리하며, 이를 DNS 서버라고 부른다.

도메인 네임은 .(점)을 기준으로 계층적으로 분류되는데, www.example.com 기준으로 .이 루트 도메인, com이 최상위 도메인이며 그 이후로 단계적으로 도메인이 나뉜다. 그리고 전체 주소 도메인 네임은 FQDN(Fully-Qualified Domain Name)로 불린다. www등 FQDN의 첫 번째 부분을 호스트 네임이라고 부르기도 하지만, 때로는 FQDN 자체를 부르기도 한다.

네임 서버는 많은 곳에 위치하고 있으며, 이렇게 계층적이고 분산된 도메인 네임에 대한 관리 체계를 도메인 네임 시스템(DNS)이라고 한다.

계층적 네임 서버

IP 주소를 모르는 상태에서 도메인 네임에 대응되는 IP 주소를 알아내는 과정을 흔히 ‘도메인 네임을 풀이(resolve)한다.’라고 표현하며, ‘리졸빙(resolving)’이라고도 한다. 이 때, 다양한 네임 서버들이 사용되는데 중요한 유형은 크게 1. 로컬 네임 서버, 2. 루트 네임 서버, 3. TLD(최상위 도메인) 네임 서버, 4. 책임 네임 서버 가 있다.

로컬 네임 서버는 클라이언트와 맞닿아 있는 네임 서버로, 클라이언트가 도메인 네임을 통해 IP 주소를 알아내고자 할 때 가장 먼저 찾게 되는 네임 서버다. 해당 서버를 찾기 위해서는 로컬 네임 서버의 주소를 알아야하는데, 일반적으로 ISP에서 할당해준다. 이 것이 아닌 공개 DNS 서버를 이용할 수도 있으며, 대표적인 예로는 구글의 8.8.8.8 등이 있다.

로컬 네임 서버에게 특정 도메인 네임에 대응되는 IP 주소를 질의했을 때 IP 주소를 안다면 바로 알려주고, 모른다면 루트 네임 서버에게 해당 도메인 네임을 질의한다. 루트 네임 서버는 TLD 네임 서버의 주소를 반환해주며, 하위 도메인 네임을 관리하는 네임 서버 주소를 반환해준다. 이는 또 하위 네임 서버 주소를 반환해주게 된다.

책임 네임 서버는 특정 도메인 영역을 관리하는 네임 서버로, 자신이 관리하는 도메인 영역에 질의에 대해서 자신이 곧장 답하는 네임 서버다. 즉, 로컬 네임 서버가 마지막으로 질의하는 네임 서버가 책임 네임 서버다.

로컬 네임 서버가 네임 서버들에게 질의하는 방법에는 크게 두 가지가 있다.

  1. 재귀적 질의

    클라이언트가 로컬 네임 서버에게 도메인 네임을 질의하면, 로컬 네임 서버가 루트 네임 서버에게 질의하고, 루트 네임 서버가 TLD 네임 서버에게 질의하고, TLD 네임 서버가 다음 단계로 질의하여 최종 응답 결과를 역순으로 전달 받는 방식이다.

  2. 반복적 질의

    클라이언트가 로컬 네임 서버에게 IP 주소를 알고 싶은 도메인 네임을 질의하면, 로컬 네임 서버는 루트 도메인 서버에게 질의해서 다음 질의할 네임 서버 주소를 응답 받고, 최종 네임 서버를 받는 방식이다.

단, 앞서 언급된 도메인 네임 리졸빙 과정은 과부하 가능성의 문제가 있다. 이를 DNS 캐시로 해결한다. 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후에 같은 질의에 대해서 결과를 활용한다. TTL이라는 값에 의해 캐시 유지 시간이 정해지기 때문에 영구적이지 않다.

자원을 식별하는 URI

  • 자원 : 메시지를 주고 받는 대상. HTTP 요청 메시지의 대상이기도 하다.
  • URI(Uniform Resource Identifier) : 자원을 식별할 수 있는 정보

    위치 기반 URL과 이름 기반 URN이 있다.

URL

일반 표기법은 다음과 같다

foo: // www.example.com:8042 /over/there ?name=ferret #nose

scheme, authority, path, query, fragment 로 이루어져있으며, 띄어쓰기한 기준이다. 표기법에서는 원래 띄어쓰기가 없으며, 임의로 구분하기 위해 띄어쓰기를 진행하였다.

  1. scheme - 자원에 접근하는 방법. 사용할 프로토콜이 명시된다.
  2. authority - 호스트를 특정할 수 있는 정보. IP 주소 혹은 도메인 네임이 명시된다.
  3. path - 자원이 위치한 경로. 계층적으로 슬래시를 통해 표현됨.
  4. query - 쿼리 문자열 혹은 쿼리 파라미터. 물음표로 시작되는 것은 <키=값> 형태의 데이터고, 앰퍼샌트를 사용하여 여러 쿼리 문자열을 연결할 수 있다.
  5. fragment - 자원의 한 조각을 가리키기 위한 정보. 해당 파일 자원 내의 위치로 이동된다.

URN

urn:isbn:0451450523과 같이 쓰이며, 이는 url이 자원의 위치가 변하면 유효성을 잃는다는 문제를 해결할 수 있는 전략이다. 위의 예시는 isbn이 0451450523인 도서를 나타내는 urn인 것이다.

DNS 레코드 타입

네임 서버는 DNS 자원 레코드를 저장하고 관리한다.

  • A - 특정 호스트에 대한 도메인 네임과 IPv4 주소와의 대응 관계
  • AAAA - 특정 호스트에 대한 도메인 네임과 IPv6 주소와의 대응 관계
  • CNAME - 호스트 네임에 대한 별칭 지정
  • NS - 특정 호스트의 IP 주소를 찾을 수 있는 네임 서버
  • MX - 해당 도메인과 연동되어 있는 메일 서버

문제 1. 로컬 네임 서버가 네임 서버들에게 질의하는 방식은 2가지가 있다. 재귀적 질의와 반복적 질의가 있는데, 이 둘의 방식을 설명하시오.

→ 재귀적 질의는 네임 서버에게 특정 주소를 질의한다. 질의 받은 네임 서버는 다음 네임 서버에게 질의하여 최종 네임 서버의 결과를 역순으로 반환받는다.

반복적 질의는 네임 서버에게 특정 주소를 질의했을 때 질의 받은 네임 서버는 다음 네임서버의 주소를 알려준다. 해당 과정을 반복하여 최종 네임 서버에게 직접 물어보는 방식이다.

author-profile
Written by 상 한규

댓글