[Network] DNS(Domain Name System)

Fabro·2021년 8월 30일
0
post-thumbnail

인터넷과 같은 TCP / IP 기반의 네트워크 통신은 IP주소를 사용하고 있다. IP주소의 길이는 32Bit로 대략 43억개의 경우의 수가 존재한다. 43억개라는 경우의 수를 모두 외울 수도 없고 연결하려는 대상과 IP주소간의 개연성도 없기 때문에 IP주소를 외우는 것은 거의 불가능에 가깝다. 그렇다면, IP주소 대신 기억하기 쉬운 이름을 사용하면 어떨까! 이때 사용하는 것이 DNS이다. IP주소 대신에 기억하기 쉬운 이름을 사용하면, DNS 서비스가 이름에 해당하는 IP주소를 알려주기 때문에 IP주소를 외우고 있을 필요가 없어진다.
일반적으로 ISP(Internet Service Provider)로 부터 서비스를 제공받는 사용자들은 ISP의 DHCP 서버로부터 IP주소와 함께 DNS서버의 정보도 전달받는다. 따라서 DNS서버에 연결하기 위한 별도의 설정 없이 DNS서비스를 제공받을 수 있다. 물론, 이 제공받은 DMS서버의 정보를 반드시 사용할 필요는 없다.

DNS(Domain Name System)

DNS

  • 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 읽을 수 있는 IP주소로 변환하는 것

DNS 포트 번호

  • 포트 53번으로 TCP와 UDP를 사용

DNS 동작 방식

도메인의 계층 구조

도메인을 체계적으로 분류하고 관리하기 위해 도메인 이름은 몇 개의 짧은 영문자를 . 으로 연결한 계층 구조를 가지고 있다. 트리 구조의 정점을 루트라 하고 루트 아래로 갈라지는 가지를 1단계 도메인(또는 TLD, Top Level Domain)이라 하고 'kr','jp'와 같은 국가 코드 도메인과 'com'과 같은 일반 도메인이 해당한다. 1단계 도메인 하위에는 2단계 도메인(또는 Sub Domain)인 'co'(영리 기업), 'go'(정부 기관), 'ac'(대학)과 같은 도메인이 존재하며 또 그 하위에 조직이나 서비스의 이름을 나타내는 3단계 도메인이 존재한다. 그리고 마지막으로 호스트('www')가 위치한다.
도메인의 표기는 최상위 도메인이 가장 뒤에 나타난다.

DNS 계층 구조 및 동작 방식

인터넷의 모든 도메인 이름 정보를 한 서버에서 모두 가지고 있는 것은 불가능하다. 이는 저장 공간의 문제뿐만 아니라, 수시로 변경되는 DNS 정보를 일일이 갱신하는 것도 어렵기 때문이다. 따라서 DNS 서버는 한 대의 서버에서 모든 DNS 정보를 처리하는 방식이 아닌, 계층적으로 이루어진 구조를 통해 단계별로 정보를 제공한다. 각 DNS 서버는 도메인 계층의 일부 영역을 담당하고 그곳에 속한 도메인을 관리한다. 상위 계층은 하위 계층 도메인에 대한 정보를 관리하며 하위 계층의 DNS서버 IP주소를 가지고 있다. 또한, 최상위 계층(루트 서버)의 IP주소는 모든 DNS 서버가 등록하여 관리하고 있다.

위 그림을 보면 최상위 루트 서버에는 하위 계층인 'kr','com'과 같은 정보를 관리하고 그것들의 DNS 서버 IP주소가 등록되어 있다. 또 'kr'이 존재하는 DNS서버는 'co.kr', 'go.kr'과 같은 정보를 관리하고 그것들의 DNS 서버 IP주소가 존재한다. 이렇게 계층적으로 내려가면 결과적으로 'www.korea.go.kr'의 정보를 찾을 수 있게된다.

위 그림은 DNS 서버의 질의 과정을 나타내고 있는데 여기서 주의해야 할 점은 사용자 문의를 받은 DNS서버가 루트 네임 서버부터 최하위 계층 서버까지 모두 직접 해당 도메인의 IP주소 조회를 요청한다는 점이다. DNS서버는 상위 계층 서버에서 반환 받은 IP주소에 직접 도메인의 IP주소를 조회 한다.

재귀 쿼리(Recursive Query)

사용자는 자신이 요청한 DNS 서버에게만 요청을 전송하고, 요청에 대한 응답을 수신한다. 이렇게 이름 요청을 전송하고, 요청에 대한 정확한 응답을 수신하는 과정을 '재귀 쿼리'라고 한다. 재귀 쿼리는 일반적으로 클라이언트에서 DNS 서버로 요청할 때 발생하고, 때에 따라 DNS 서버가 다른 DNS 서버로 요청하는 경우에도 사용한다. 이것을 요청의 전달(Forwarding)이라고 한다.

순환 쿼리(Iterative Query)

클라이언트의 요청을 수신한 DNS 서버는 요청을 처리하기 위해 다른 DNS 서버로 단계적으로 질의하는 과정을 수행한다. 이 과정을 '순환 쿼리'라고 한다.

DNS 캐시

DNS 요청은 시스템이 모르는 이름에 대한 IP 주소가 필요할 때 이루어진다. 하지만 최근 조회했던 이름을 다시 조회할 때는 DNS 요청이 발생하지 않을 수도 있다. 이미 시스템이 해당 IP 주소를 알고 있기 때문이다. 이렇게 시스템이 기억하고 있는 이름과 IP 주소의 기록을 DNS 캐시라고 한다.
DNS는 레코드(IP 주소 정보)의 수명을 설정하여, 한번 조회한 레코드의 수명이 다하기 전까지 해당 레코드를 그대로 사용하도록 설계되었다. 이를 통해 불필요한 DNS 요청의 빈도를 줄일 수 있게 되었으며, 이 때 각 레코드의 수명을 TTL(Time To Live)라 하고, DNS 서버를 구성 할 때 레코드의 수명을 TTL로 지정한다.

DNS 레코드

DNS 서버는 단순히 이름을 통해 IP 주소를 찾는데에만 사용되는 것이 아니라 영역(Zone) 즉, 도메인 전체에 대한 정보를 제공하기도 한다. 주요한 레코드의 유형은 다음과 같다.

  • A(Address) : IP 주소와 도메인을 연결하고 있는 레코드. 실제 DNS를 조회 할 때 조회한 이름에 대한 IP주소의 레코드
  • CNAME(Canonical Name) : 다른 DNS 레코드의 별칭 레코드. 용도에 따라 다른 이름을 가질 필요는 있으나 동일한 주소를 가지는 레코드를 생설할 때 사용
  • MX(Mail eXchanger) : 메일 서버에 대한 정보를 저장
  • NS(Name Server) : 현재 도메인의 네임 서버를 지정
  • PTR(Pointer) : A 레코드와 반대로 특정 IP 주소에 해당하는 도메인의 이름 정보를 저장하고 있는 레코드
  • SOA(Start Of Authority) : 권한 시작 레코드. 영역을 구성하는 가장 기본 레코드로서, 모든 영역은 한 개의 SOA 레코드를 가지고 있다.
  • TXT(Text) : 자유로운 형식의 텍스트 정보를 제공. 일반적인 DNS 레코드의 형식과 무관하게 제공하고 싶은 정보가 있으면 사용

References

profile
엔지니어 유망주의 곡괭이질

0개의 댓글