스터디/CS 스터디

[네트워크] DNS

제이온 (Jayon) 2021. 12. 2.

cs-study에서 스터디를 진행하고 있습니다.

등장 배경

네트워크 안에서 호스트를 식별하기 위한 목적으로 IP 주소를 사용하는데, 사람의 경우 숫자보다 문자를 사용하는 것이 더 편하므로 도메인 이름을 이용해 호스트를 식별한다. 도메인 이름을 사용하는 경우에도 최종적으로 IP 주소를 알고 있어야 상대방과 연결이 가능하므로, 네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스인 DNS가 등장했다.

 

DNS란?

정의

TCP/IP 네트워크 상에서 사람이 기억하기 쉽게 문자로 만들어진 도메인을 숫자로 된 IP 주소로 바꾸는 서버를 DNS라고 한다.

 

포트 번호

UDP와 TCP 모두 53번 포트를 사용한다. DNS 서버에 질의를 보낼 때 UDP를 사용하고, Zone Transfer (영역 전송)과 512 Bytes를 초과하는 패킷을 전송해야 할 경우 TCP를 사용한다.

 

Zone Transfer(영역 전송)이란?
DNS 서버는 Zone 내의 호스트에 대한 정보를 담고 있는 데이터베이스를 가지고 있으며, 복수의 보조 서버들은 기본 서버 데이터의 복사본을 저장하고 있다. 기본 서버의 정보를 이용해 보조 서버의 데이터를 최신 상태로 업데이트하는 작업을 영역 전송이라고 한다.

 

DNS가 UDP를 사용하는 이유

빠른 속도

TCP의 경우 데이터 전송 시작 전에 3-way-handshaking 과정이 있는 반면 UDP는 연결 설정에 드는 비용이 없다. DNS는 신뢰성보다 속도가 더 중요한 서비스이기 때문에 TCP보다 UDP가 더 적합하다.

또한, UDP는 512 bytes를 넘어가지 않는 패킷만 전송이 가능하고 오버헤드가 없어서 속도가 빠른데, DNS가 전송하는 데이터 패킷 사이즈가 매우 작으므로 UDP가 유리하다.

이때 단순히 패킷의 사이즈가 작다고 DNS가 UDP를 채택한 것은 아니고, 전달하는 패킷의 크기가 작기 때문에 신뢰성이 보장되지 않아도 되기 때문이다. (못 받으면 다시 전달하면 된다.)

 

연결 상태를 유지할 필요가 없다.

위에서 잠깐 언급했듯이 TCP는 호스트 간의 연결 상태를 유지한다. 이때 TCP의 패킷 안에는 여러 정보가 담겨 있지만, UDP는 어떤 정보도 기록하지 않고, 유지할 필요도 없다. 따라서 DNS 서버는 TCP보다 많은 클라이언트를 수용할 수 있으므로 연결 상태를 유지하지 않고 정보 기록을 최소화할 수 있는 UDP를 채택하였다.

 

DNS의 과거와 현재

과거

과거에는 컴퓨터에 들어 있는 hosts 파일을 조작하였다.

 

 

hosts 파일에는 모든 컴퓨터의 도메인 이름과 IP 주소 정보가 저장되어 있고, 클라이언트는 FTP를 이용해 hosts 파일을 다운로드하였다. 그러나 90년대 초반 웹 서비스 사용자가 폭발적으로 증가하면서 인터넷에 연결된 호스트 수가 늘어났다. 결국 호스트의 업데이트가 늦어지고 네트워크 트래픽이 증가하여 많은 문제가 발생했다.

 

현재

도메인이 많기 때문에 전 세계 모든 조직의 도메인 접오를 갖고 있는 DNS 서버는 존재하지 않는다. 각 조직은 자신들의 도메인 정보를 관리하는 DNS 서버를 운영하고, 이러한 수 많은 DNS 서버들이 상호 연동되어 있는 Domain Name Space를 구성하게 되었다.

 

DNS 서버의 종류

 

존재하는 도메인 수가 매우 많으므로 위 그림과 같이 DNS 서버 종류를 계층화해서 단계적으로 처리한다. DNS 서버는 크게 권한 없는 네임 서버와 권한 있는 네임 서버로 나뉜다.

 

권한 없는 네임 서버 (non-Authoritative Name Server)

Recursive DNS Server

인터넷 사용자가 가장 먼저 접근하는 DNS 서버이다. 매번 3개의 DNS 서버를 거친다면 효율이 떨어지므로, 한 번 DNS 서버에 요청해 얻은 데이터를 일정 기간 동안 캐시라는 형태로 저장해두는 서버이다.

직접 도메인과 IP 주소의 관계를 기록/저장/변경하지 않고 캐시만을 보관하기 때문에, Authoritative와 비교되는 의미로 non-Authoritative, Recursive라는 이름을 붙었다.

대표적으로 KT/LG/SK와 같은 ISP(통신사) DNS 서버가 있고, 브라우저 우회 용도로 많이 쓰는 구글 DNS, 클라우드 플레어와 같은 Public DNS 서버가 있다.

 

권한 있는 네임 서버 (Authoritative Name Server)

Root DNS Server

ICANN이 직접 관리하는 서버로, TLD(최상위 도메인) DNS 서버 IP 주소들을 저장해 두고 안내하는 역할을 한다.

 

TLD (최상위 도메인) DNS Server

도메인 등록 기관이 관리하는 서버로, Authoritative DNS 서버 주소를 저장해 두고 안내하는 역할을 한다. 어떤 도메인 묶음이 어떤 Authoritative DNS Server에 속하는지 아는 이유는 도메인 판매 업체의 DNS 설정이 변경되면 도메인 등록 기관으로 전달되기 때문이다.

 

Authoritative DNS Server

실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버이다. 그래서 권한의 의미인 Authoritative가 붙었다. 일반적으로 도메인/호스팅 업체의 'DNS 서버'를 말하지만, 개인 DNS 서버 구축을 한 경우에도 여기에 해당한다.

 

DNS 리소스 레코드

DNS 서버는 데이터베이스 서버의 한 유형이며, 클라이언트로부터 질의를 받았을 때 그에 맞는 데이터를 응답해야 한다. 데이터베이스의 한 항목(Row)을 DNS 서버에서는 리소스 레코드라고 부른다.

 

 

타입(Type)에는 다음과 같은 여러 종류가 있다.

 

  • SOA : 해당 Domain 관리 권한 및 Zone Transfer(영역 전송)과 관련된 정보가 들어 있다.
  • NS : Name Server의 정보를 갖고 있다.
  • A(AAAA) : 특정 host의 FQDN과 연결된 IP주소 정보를 갖는다.
  • CNAME : 특정 A레코드에 대한 별칭을 지정한다.
  • MX : Mail eXchange의 약자로 Mail 서비스에 관련된 정보를 갖고 있다. (해당 Domain의 Mail서버 정보)
  • PTR : 역방향 조회에 사용되는 레코드, 특정 IP주소에 대한 FQDN 정보를 가지고 있다.
  • ANY : 도메인에 대한 모든 레코드 질의 시에 주로 이용된다. (DNS 증폭 DRDOS 공격에 악용)

 

DNS 동작 과정

DNS의 동작 과정을 살펴 보기 전에 도메인 구조 및 클라이언트가 DNS 서버에게 어떤 형태로 질의를 보내는지 알아 보자.

 

도메인 구조

 

통상적으로 도메인의 가장 끝에 있는 점(.)은 생략되어 있다. 이것을 Root 도메인이라고 부른다. Root 도메인의 직속 하위 도메인을 Top-level 도메인이라고 부르며 com, net, co.kr 등이 있다. Top-level 도메인 직속 하위 도메인은 Second-level 도메인이라고 부르며 그 직속 하위 도메인을 Sub 도메인이라고 부른다.

DNS에는 통용되는 규칙이 있다.

 

  • 직속 하위 레벨의 DNS 서버 리스트를 알고 있어야 한다.
  • 모든 컴퓨터는 적어도 Root 도메인의 DNS 서버를 알고 있어야 한다.

 

질의 메시지

클라이언트가 DNS 서버에게 질의를 보낼 때, 도메인 주소만 보내는 것이 아니라 다음과 같은 정보도 포함해서 보낸다.

 

 

  • Query Name String: 요청하고자 하는 도메인 이름
  • Type: 질의의 데이터 타입. 타입에 따라 응답 정보의 내용이 달라진다.
  • Class: 질의의 클래스. DNS의 구조가 처음 고안되었을 때는 인터넷 이외의 네트워크도 고려되었기 때문에 클래스를 두었다. 하지만 현재는 인터넷만 사용하므로 기본으로 IN 값을 보낸다.

 

동작 과정

 

  1. 브라우저에서 Nesite.com을 검색한 뒤, 사용하고 있는 통신사인 KT DNS 서버에게 도메인 주소에 해당하는 IP 주소를 요청한다. (브라우저 기본 DNS 설정은 통신사 DNS 서버이다.)
  2. ISP 서버에서는 캐시 데이터가 없다는 것을 확인하고 Root DNS 서버에게 어디로 가야 하는지 요청한다. (만약 캐시가 있다면 8번 단계로 건너뛴다.)
  3. Root DNS 서버는 TLD DNS 서버 주소만 관리하므로 ***.com 도메인을 보고, com 최상위 도메인을 관리하는 TLD DNS 서버 주소를 안내한다.
  4. ISP 서버는 com 서버에게 어디로 가야 하는지 다시 요청한다.
  5. com 서버는 가비아 DNS 서버가 해당 도메인이 관리되고 있다는 사실을 확인하고, 가비아 DNS 서버 주소를 안내한다.
  6. ISP 서버는 가비아 서버에게 다시 요청한다.
  7. 가비아 서버는 요청 받은 도메인 주소의 IP 주소를 확인하고 알려준다. 동시에 ISP 서버는 해당 정보를 캐시로 기록한다.
  8. ISP 서버는 브라우저에게 알아 낸 IP 주소를 안내한다.

 

출처

 

예상 면접 질문 및 답변

DNS란?

TCP/IP 네트워크 상에서 사람이 기억하기 쉽게 문자로 만들어진 도메인을 숫자로 된 IP 주소로 바꾸는 서버를 DNS라고 한다.

 

DNS 서버에게 IP 주소를 요청할 때 UDP를 사용하는 이유는?

DNS는 신뢰성보다 속도가 더 중요하고, 많은 클라이언트를 수용하는 것을 필요로 한다. 따라서 속도가 빠르고, 연결 상태를 유지하지 않고 정보 기록을 최소화하여 많은 클라이언트 수용이 가능한 UDP를 사용한다.

 

DNS 서버의 종류에 대해 설명하라.

Root DNS Server, TLD DNS Server, Authoritative DNS Server, Recursive DNS Server로 나누어진다. (각 서버에 대한 설명은 위 글을 참고)

 

DNS 서버를 여러 종류로 나누는 이유는?

존재하는 도메인 수가 많기 때문에 하나의 DNS 서버만 사용한다면 성능, 유지 관리 등 많은 문제가 생긴다. 따라서 DNS 서버 종류를 계층화해 단계적으로 처리하여 트래픽을 분산하고 유지 및 관리를 안정적으로 하기 위해 나누었다.

 

DNS의 동작 과정을 설명하라.

  1. 브라우저에서 Nesite.com을 검색한 뒤, 사용하고 있는 통신사인 KT DNS 서버에게 도메인 주소에 해당하는 IP 주소를 요청한다. (브라우저 기본 DNS 설정은 통신사 DNS 서버이다.)
  2. ISP 서버에서는 캐시 데이터가 없다는 것을 확인하고 Root DNS 서버에게 어디로 가야 하는지 요청한다. (만약 캐시가 있다면 8번 단계로 건너뛴다.)
  3. Root DNS 서버는 TLD DNS 서버 주소만 관리하므로 ***.com 도메인을 보고, com 최상위 도메인을 관리하는 TLD DNS 서버 주소를 안내한다.
  4. ISP 서버는 com 서버에게 어디로 가야 하는지 다시 요청한다.
  5. com 서버는 가비아 DNS 서버가 해당 도메인이 관리되고 있다는 사실을 확인하고, 가비아 DNS 서버 주소를 안내한다.
  6. ISP 서버는 가비아 서버에게 다시 요청한다.
  7. 가비아 서버는 요청 받은 도메인 주소의 IP 주소를 확인하고 알려준다. 동시에 ISP 서버는 해당 정보를 캐시로 기록한다.
  8. ISP 서버는 브라우저에게 알아 낸 IP 주소를 안내한다.

댓글

추천 글