DNS

워니·2025년 1월 4일
0

컴퓨터네트워크

목록 보기
7/15

DNS(Domain Name System)란

DNS는 인터넷의 전화번호부이다. 사용자가 'naver.com'과 같은 도메인 이름을 웹 브라우저에 입력하는 경우 DNS는 해당 사이트의 올바른 IP주소를 찾는 역할을 한다.

일반적으로 우리는 웹 사이트에 접속할 때 외우기 어려운 IP주소 대신 도메인 이름을 사용한다. 인터넷에서 모든 장치는 고유한 IP주소를 가지고 있지만 우리는 IP주소보다 도메인 이름을 더 쉽게 기억하고 이해할 수 있기 때문이다.
때문에 이 도메인은 일종의 별명으로, 입력한 도메인을 실제 네트워크 상에서 사용하는 IP주소로 바꾸고 해당 IP주소로 접속하는 과정이 필요하다.
이러한 과정, 전체 시스템을 DNS(도메인 네임 시스템)이라고 한다.


도메인 네임과 그에 대응하는 IP주소는 네임 서버라고 불리는 특별한 서버에서 관리된다. 도메인 네임을 관리하는 네임 서버는 DNS 서버라고도 부른다. 호스트는 네임 서버에 '특정 도메인 네임을 가진 호스트의 IP주소가 무엇인지' 질의함으로써 패킷을 주고받고자 하는 호스트의 IP주소를 얻어낼 수 있다. 이를 '리졸빙(resolving)한다'라고도 표현한다.


도메인 네임과 관련해 알아야 할 내용은 크게 2가지, 하나는 도메인 네임의 계층적 구조이고 다른 하나는 도메인 네임을 관리하는 네임 서버(DNS)의 계층적 구조이다.

도메인 네임의 계층적 구조


하나의 도메인 네임은 점(.)을 기준으로 계층적으로 분류되어 있다.

  • 최상단에 루트 도메인(root domain)이 있다. 일반적으로 도메인 네임을 표기할 때 루트 도메인을 생략하곤 한다.
  • 그 다음 단게에선 최상위 도메인(TLD; Top Level Domain)이 있다.(예 : com, net, org, kr)
  • 뒤이어 2단계 도메인(Second-Level Domain)이 존재
  • 2단계 도메인의 하부 도메인의 3단계 도메인(SubDomain)

도메인 네임은 일반적으로 3~5단계로 구성되며 'www.example.com.'처럼 도메인 네임을 모두 포함하는 도메인 네임은 전체 주소 도메인 네임(FQDN; Full-Qualified Domain Name)이라고 하며, 이 FQDN을 알면 호스트를 식별할 수 있다.


DNS의 계층적 구조

계층적 형태로 이루어진 도메인 네임을 관리하는 네임 서버 또한 계층적 형태를 이룬다. 이렇게 계층적으로 분산되어 있는 도메인 네임에 대한 관리 체계를 도메인 네임 시스템(DNS)라고 부른다.

  • DNS는 전 세계 분산형 DB구조로 동작한다.
  • 최상위에 Root DNS서버(.)가 존재하고, 그 밑으로 TLD, SLD, SubDomain으로 구성되어 있다. 각 층의 도메인들은 그 하위 도메인에 대한 정보를 관리하는 구조이다.

도메인 네임이 네임서버에서 리졸빙되는 과정 이해하기

한 호스트가 'michul.net'이라는 도메인 네임을 통해 IP주소를 알아내고자 하는 경우, 호스트는 가장 먼저 로컬 네임 서버에게 도메인 네임을 질의하게 된다. 로컬 네임 서버는 클라이언트와 맞닿아 있는 네임 서버로, 클라이언트가 가장 먼저 찾게 된다. 클라이언트가 로클 네임 서버를 찾을 수 있으려면 로컬 네임 서버의 주소를 알고 있어야 하기 때문에 많은 경우 ISP가 로컬 네임서버의 주소를 자동을 할당해 주고, 공개 DNS서버인 구글의 '8.8.8.8'이나 클라우드플레어의 '1.1.1.1'에서 할당해주기도 한다.

만약 로컬 네임 서버가 IP주소를 모른다면 로컬 네임 서버는 FQDN에 대응하는 IP주소를 알아낼 때까지 도메인 네임의 루트 도메인을 관장하는 서버(루트 네임 서버)에게 질의하고, 최상위 도메인을 관장하는 서버(TLD 네임 서버), 그 하위 레벨의 도메인 네임을 관장하는 네임 서버...등에 걸쳐 질의하게 된다.

그렇게 최종적으로 클라이언트가 원하는 IP주소를 반환받으면 해당 주소를 클라이언트에게 전달한다.

참고로, 이와 같은 질의 과정이 너무 많이 반복되면 네트워크 내 트래픽이 많아지고, 리졸빙에 지나치게 오랜 시간이 걸리기 때문에 실제로는 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 사용하는 경우가 많은데, 이를 DNS 캐시라고 한다.

DNS 질의 종류

DNS질의는 크게 재귀적 질의, 반복적 질의, 역방향 질의로 나눌 수 있다.

1. 재귀적 질의

  • 질의된 도메인에 대해 즉각 응답하거나, 다른 서버에게 질의한 결과로 응답하거나, 찾고 있는 정보가 없다는 에러 메세지를 보내줌
  • 가장 단순한 DNS쿼리 유형

    클라이언트가 로컬 DNS 서버에 요청할 때 사용한다.
    클라이언트는 최종 응답(IP 주소)을 받을 때까지 기다린다.
    로컬 DNS 서버는 직접 IP를 찾거나 다른 DNS 서버로 요청을 전파한다.

반복적 질의

  • 질의된 도메인에 대해 응답하거나, 아니면 이 작업을 할 수 있는 다른 DNS 서버에 클라이언트를 연결 시켜 주는 작업
  • 자신이 관리하지 않는 알 수 없는 질의에 대해 응답 가능한 네임서버 목록 전달
  • 결국, 클라이언트는 다수의 DNS 서버들에게 같은 질의를 반복할 수 있게됨

로컬 DNS 서버가 다른 DNS 서버에 요청할 때 사용한다.
요청받은 DNS 서버가 해당 정보를 가지고 있지 않으면, 다른 DNS 서버를 추천하거나 가리킨다.
최종적으로 권한 있는 네임 서버에 도달하여 IP 주소를 획득한다.

역방향 질의

IP 주소를 이용해 도메인 이름을 찾는 방식이다.
PTR(포인터) 레코드를 사용하여 IP 주소에서 도메인 이름으로 매핑한다.
주로 네트워크 문제 해결 및 보안 시스템에서 사용된다.


DNS 레코드란

DNS 레코드는 도메인 이름과 관련된 정보를 저장하는 데이터로, DNS서버에서 사용된다. 도메인 이름을 IP주소로 변환하거나 이메일 서버와 같은 다양한 서비스 정보를 제공하기 위해 사용된다.

각 도메인 이름은 하나 이상의 DNS 레코드를 가지고 있으며, 이러한 레코드는 도메인 네임 서버에 저장된다. 각 레코드는 특정 역할을 하며, 클라이언트와 서버 간의 네트워크 통신을 지원한다.

DNS 레코드의 주요 구성 요소

  • Name : 레코드가 적용되는 도메인 이름 (예: example.com).
  • Type : 레코드의 종류를 지정 (예: A, CNAME, MX 등).
  • Value : 레코드가 제공하는 데이터 (예: IP 주소, 도메인 이름 등).
  • TTL (Time To Live) : 레코드의 유효 기간(초 단위). 이 값이 지나면 클라이언트는 캐시된 정보를 폐기하고 다시 조회한다.

DNS 레코드 작동 예시

도메인 www.example.com을 웹 브라우저에서 입력했을 때:

클라이언트는 DNS 서버에 A 레코드를 요청한다.
DNS 서버는 해당 도메인의 IP 주소를 반환한다.
클라이언트는 반환된 IP 주소를 사용해 서버에 연결한다.


DNS 서버가 UDP를 사용하는 이유

DNS 서버와 클라이언트 간 통신에서 UDP를 사용하는 이유는 DNS의 설계 목적과 효율성 때문이다

1. UDP의 특징과 장점

1) 빠른 데이터 전송 : UDP는 연결을 설정하고 종료하는 과정이 없는 비연결혈 프로토콜이다. 따라서 TCP처럼 3-way handshake를 수행하지 않아 속도가 빠르다
2) 작은 데이터 크기 : 대부분의 DNS 요청과 응답은 512바이트 이하로 작고, 이런 작은 데이터는 TCP대신 UDP로 처리하는 것이 효율적이다
3) 적은 오버헤드 : UDP는 상태를 유지하지 않으므로 클라이언트-서버 간 연결을 유지할 필요가 없고, 메모리와 CPU자원을 절약할 수 있다

2. DNS에서 UDP를 사용하는 이유

1) 짧은 응답 시간 : DNS요청은 매우 빈번하게 발생하기 때문에 빠른 응답이 중요하다. UDP는 TCP보다 훨씩 적은 시간으로 요청과 응답을 처리할 수 있다.
2) 단순한 통신 구조 : DNS는 기본적으로 간단한 쿼리-응답 모델을 따른다. 요청과 응답만 필요하므로 TCP의 복잡한 연결 관리가 필요하지 않다
3) 신뢰성 보안 : UDP는 신뢰성이 낮지만, DNS는 이를 보완하는 재전송 매커니즘을 내장한다. 응답이 오지 않으면 클라이언트가 동일한 요청을 다시 보내는 방식으로 작동한다.

출처 : https://velog.io/@zinukk/9kpyzbdt, 책[이것이 컴퓨터 과학이다]

profile
매일, 조금씩 나아가는중

0개의 댓글