We will find a way, we always have.

-interstellar

Computer Science/네트워크

[네트워크] DNS(Domain Name System) 1편

Redddy 2024. 7. 29. 01:17

테코톡 준비할 겸, 공부했던 내용을 다시 복습해보자. 

 

DNS 등장배경

아파넷(ARPAnet) 시절에는 아파넷의 호스트 주소(숫자 주소)와 호스트 이름 리스트를 SRI NIC(Stanford Research Institution Network Information Center)에서 일괄 관리하였다. 

TCP/IP 및 DNS가 개발되기 전까지, 전체 호스트 정보(호스트 이름과 숫자주소)를 담고 있는 텍스트 파일을 온라인에 올리면 네트워크 사용자는 FTP로 다운받아 사용하는 방식이었다.

 

이 텍스트 파일이 hosts.txt이고, 현재도 운영체제 상관없이 어느 pc에서든 이 파일을 검색할 수 있다. window 같은 경우 windows\system32\drivers\etc 에서 찾을 수 있다. 

 

 

 

이 hosts 파일의 문제점은 서버가 ip 주소를 바꿀 경우, 업데이트가 늦을 수 있고 또 이름이 중복될 수 있다는 문제점이 존재한다. 

 

해결 방법으로는 호스트 이름에 계층 구조를 사용하는 것과 분산된 데이터베이스를 이용하는 것으로 그렇게 DNS가 등장하게 되었다.

 

DNS란

DNS는 Domain Name System의 약자로 도메인 이름을 IP 주소로 변환해주는 시스템이다. 쉽게 말해 인터넷에서 사용되는 주소록 같은 녀석이다. redddy.com과 같은 도메인 이름을 ip 주소로 변환하여 브라우저가 인터넷 자원을 로드할 수 있도록 도와준다.

 

RFC 881에서 도메인에 대한 의미가 보다 명확하게 들어나는데, ‘시스템에 호스트를 추가하는 권한과 책임의 위임을 허용하기 위하여 도메인 이름(domain style name)의 도입이 진행되고 있다. 이를 통해 호스트에 대한 정보를 유지하고 관리하는 업무의 구획(subdivision)이 정해질 것이다. 이는 관리 권한이나 조직의 경계에 기반한 개념으로…’ 

 

조금 풀어보자면 인터넷을 일정한 공간이라고 가정했을 때, 도메인이란 호스트에 대한 책임과 권한의 영역으로, 물리적 실체인 호스트를 관리하는 조직의 경계이다.

 

호스트 정보 관리 기관의 관리 영역을 ‘도메인(domain)’이라 하고, 일반적으로 그 기관의 이름이 영역의 이름이 된다. redddy.com은 레디가 관리하는 호스트 시스템의 영역(domain)이다.

 

DNS는 OSI 7계층 중 애플리케이션 계층에서 동작하는 프로토콜이며 기본적으로 UDP/53을 사용하지만 특수한 상황에서는 TCP/53도 사용한다. UDP를 사용하는 경우는 일반 DNS 질의/응답에 사용하고, TCP는 영역 전송(Zone Transfer)시에 사용된다. 안정성을 위해 두 개 이상의 DNS 서버를 사용할 경우, Master와 Slave간의 동기화가 필요한데, 이때 기본 서버의 정보를 이용해 보조 서버의 데이터를 최신 상태로 업데이트 하는 작업을 영업 전송이라고 한다. 이외에도 전송해야할 데이터의 용량이 512바이트를 초과하는 경우에도 TCP가 사용된다. 

 

DNS가 UDP를 사용하는 이유는 DNS 질의는 신뢰성보다는 속도가 더 중요한 서비스이고, DNS가 전송하는 데이터 패킷 사이즈도 매우 작기 때문이다. 그리고 DNS는 연결상태 유지를 할 필요가 없다. DNS 서버는 도메인 네임을 IP로 변경해야 하기에 항상 많은 클라이언트 요청이 온다. UDP는 어떤 정보도 기록하지 않고, 유지할 필요가 없기에 TCP 보다 UDP에서 동작할 때 더 많은 클라이언트를 수용할 수 있다. 

 

DNS 구성 요소

도메인 네임 스페이스(도메인 구조)

 

DNS는 분산 데이터베이스 구조를 가진다. 인터넷 상에서 사용되는 도메인은 전 세계적으로 고유하게 존재하는 이름이며 정해진 규칙 및 체계에 따라야 하고, 임의로 변경되거나 생성될 수 없다. 도메인의 체계적인 분류와 관리를 위해 도메인 이름은 몇 개의 짧은 영문자를 '.'으로 연결한 계층 구조를 가지고 있다. 트리에 연결된 호스트는 자원 레코드로 표현한다. (자원레코드는 네임 서버가 관리하는 정보를 표현하는 자료구조이다)

 

도메인 구조는 트리구조이다. 

루트 도메인(.)이 있고 이는 인터넷 도메인의 시작점이다. www.naver.com에서 도 사실은 www.naver.com.에서 .을 생략한 것이다. 

 

 

 

1단계 도메인: 최상위 도메인으로 TLD(Top Level Domain)이라고 한다. 국가명을 나타내는 국가최상위도메인(ccTLD, country code TLD)과 일반적으로 사용되는 일반최상위도메인(gTLD, generic TLD)으로 구분된다.

2단계 도메인: 조직의 속성을 구분하는 co(영리 기업), go(정부기관) 등이 있다.

3단계 도메인: 조직이나 서비스의 이름을 나타내는 도메인 이름으로, 사용자가 원하는 문자열을 사용할 수 있다.

호스트: 주소가 그 도메인에서 어떤 역할을 가지고 있는지 나타낸다. (www, ftp, blog, ns 등)

 

네임 서버 (DNS 서버)

도메인은 도메인 계층 구조를 반영한 DNS 서버에 저장 및 관리된다. 각 네임 서버는 도메인 계층의 일부 영역을 담당하고, 그 영역에 속한 도메인을 관리한다. 상위 계층의 네임 서버는 하위 계층의 도메인에 대한 정보를 관리하고, 하위 계층 네임 서버의 IP 주소를 가지고 있다. 최상위 계층인 루트 네임 서버의 IP 주소는 모든 DNS 서버가 등록하여 관리한다. 

 

DNS 서버는 도메인 네임 스페이스를 위한 권한 있는 DNS 서버와 권한 없는 DNS 서버로 구분된다. 

권한 있는 DNS 서버: Root DNS 서버, TLD DNS 서버, Authoritative DNS 서버 등 IP 주소와 도메인 이름을 매핑한다.

권한 없는 DNS 서버: Resolver 서버, 등은 질의를 통해 IP 주소를 알아내거나 캐시한다.

 

네임 서버 종류를 살펴보자.

 

Root DNS 서버

최상위 네임 서버로 ICANN(DNS 총괄 기구)에서 관리한다. 리졸버로부터 발생한 DNS 요청에 대하여 적절한 TLD DNS 서버의 IP 주소를 제공하는 역할을 한다. IP 주소를 변환하기 위한 첫 번째 단계이다. 

 

TLD DNS 서버

.com, .net, .kr 과 같은 top-level domain 별 존재하는 DNS 서버로, 도메인 등록 기관에서 관리한다. Root DNS 서버에서 받은 요청을 처리하고 authoritative DNS 서버의 ip 주소를 제공하는 역할을 한다.

 

Authoritative DNS 서버 (권한 있는 DNS 서버)

실제로 우리가 원하는 도메인에 대한 IP 주소를 매핑하는 서버로, 개인 도메인과 IP 주소의 관계가 저장된다. 일반적으로 도메인 / 호스팅 업체의 네임 서버를 일컫는다. 

 

권한 없는 DNS 서버 (local dns 서버, isp dns 서버, resolver 서버)

일반적으로 dns 계층에는 포함되지는 않지만, dns 가 동작하는데 중요한 역할을 한다. 클라이언트가 도메인 이름에 대한 IP 주소를 찾고자 할 때 가장 먼저 찾아가는 dns 서버이다.

 

 

리졸버

Resolver => Recursive DNS 서버 => Local DNS Server (ISP)

도메인에 대한 질의를 받은 리졸버는 설정된 DNS 서버로 DNS 질의를 전달하고, DNS 서버로부터 정보(도메인 이름, IP 주소)를 응답 받아 클라이언트에게 제공하는 기능을 수행한다. 

 

 

DNS 조회 과정

 

아래의 경우는 캐시가 없는 경우이다. 만약 질의의 해당하는 IP 주소를 캐싱하고 있다면, 다른 DNS 서버에 질의를 날리지 않고 바로 응답한다.

 

DNS 조회 과정

 

  1. 사용자가 웹 브라우저에 'example.com'을 입력하면, 쿼리가 인터넷으로 이동하고 DNS 재귀 확인자가 이를 수신
  2. 이어서 확인자가 DNS 루트 네임 서버(.)를 쿼리
  3. 다음으로, 루트 서버가, 도메인에 대한 정보를 저장하는 최상위 도메인(TLD) DNS 서버(예: .com 또는 .net)의 주소로 확인자에 응답. example.com을 검색할 경우 요청은 .com TLD를 가리킴
  4. 이제, 확인자가 .com TLD에 요청
  5. 이어서, TLD 서버가 도메인 이름 서버(example.com)의 IP 주소로 응답
  6. 마지막으로, 재귀 확인자가 도메인의 이름 서버로 쿼리를 보냄
  7. 이제, example.com의 IP 주소가 네임 서버에서 확인자에게 반환
  8. 이어서, DNS 확인자가 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답

 

DNS 조회를 거쳐 example.com의 IP 주소가 반환되면, 이제 브라우저가 웹 페이지를 요청할 수 있다. 브라우저가 IP 주소로 HTTP 요청을 보낸다면 해당 IP의 서버가 브라우저에서 렌더링할 웹 페이지를 반환한다.

 

 

보완할 점 혹은 질문

DNS 쿼리 유형(재귀 쿼리, 반복 쿼리, 비재귀 쿼리)

DNS 캐싱

DNS와 관련된 보안

DNS 키

DNS 레코드

GSLB

 

IP 주소로는 접근 하지 못하고 도메인 네임으로만 접근하도록 할 수 있게 하는 방법은?

DNS 서버 다운되면 대처 방법은?

 

 

등은 2에 계속

TO BE CONTINUED

 

참고

https://library.gabia.com/contents/domain/4020/

 

https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/

 

https://github.com/jmxx219/CS-Study/blob/main/network/DNS.md