DNS(Domain Name System)이란?
특정 컴퓨터의 주소를 찾기 위해 도메인 이름을 숫자로 된 식별 번호(IP 주소)로 변환해주는 시스템
IP주소는 외우기 어렵고, 변경될 수 있다는 특징이 있기 때문에 도메인 네임을 사용한다
- 웹사이트에 접속할 때 우리는 IP 주소 대신 외우기 쉽고 이해하기 좋게 도메인 이름을 사용한다. (예: www.tistory.com)
- 입력한 도메인을 실제 네트워크상에서 사용하는 IP 주소로 바꾸고 해당 IP 주소로 접속하는 과정이 필요하다
- 이러한 과정, 전체 시스템을 DNS 이라고 한다.
- DNS는 전세계적으로 약속된 규칙을 공유한다.
- 상위 기관에서 인증된 기관에게 도메인을 생성하거나 IP 주소로 변경할 수 있는 '권한'을 부여한다.
- DNS는 이처럼 상위 기관과 하위 기관과 같은 '계층 구조'를 가지는 분산 데이터베이스 구조를 가진다.
DNS 구성 요소
- 도메인 네임 스페이스
- 네임 서버 : 권한 있는 DNS 서버
- 리졸버 : 권한 없는 DNS 서버
=> '이 도메인 이름은 이 IP 주소이다' 라는 '텍스트'를 저장하는 데이터베이스가 필요함
=> 분산된 데이터가 어디 저장되어 있는지 찾을 프로그램이 필요하고, 찾았으면 해당 IP 주소로 이동할 프로그램이 필요함
=> 계층 구조로 관리
닷 (. dot) - 도메인의 계층 분리
- 네임 서버는 한대만 있지 않다.
- 도메인과 IP 주소 정보를 모든 네임 서버끼리 공유가 가능해야 한다.
- 도메인을 계층적으로 구분해서 도메인과 IP주소를 분산하는 구조를 선택함으로써 해결한다.
- 도메인은 점(dot)으로 계층을 구분한다.
1. 도메인 네임 스페이스 (Domain Name Space)
- 도메인 이름 저장을 분산하는 규칙
- DNS가 저장, 관리하는 계층적 구조
- 최상위 루트 DNS 서버와 그 하위로 연결된 모든 노드가 연속해서 이어진 계층 구조
더보기
- 도메인 네임 스페이스의 트리 구조는 최상위 레벨부터 순차적으로 계층적 소속 관계를 나타낸다.
- 하위 조직의 네임 스페이스를 할당하고 관리하는 방식은 각 하위 기관의 관리 책임자에게 위임된다.
- 예를들어 hanamon.kr 도메인은 kr 도메인을 관리하는 네임 서버에 등록되어있고 www.hanamonr.kr 은 hanamon.kr 을 관리하는 네임 서버에 등록되어있다.
- blog.hanamon.kr을 생성하기 위해서는 hanamon.kr 도메인을 관리하는 네임 서버의 레코드만을 수정함으로써 가능하다.
- 이러한 위임 구조는 호스트의 증가에 대한 관리가 효율적으로 이루어지는 것을 가능하게 한다.
- hanamon.kr 은 kr 도메인을 관리하는 네임 서버에 등록되어있는데 해당 하위 기관은 가비아로 되어있다.
- 하나몬은 www.hanamon.kr 을 만들기 위해서 가비아에 가서 도메인 레코드에 하위 도메인을 추가하면 된다. (가비아가 하위 기관이다.)
- (그래서 AWS 같은 호스팅에서 가비아에서 구매한 도메인을 사용하려한다면 route53에 생성된 네임서버를 가비아 도메인에 추가해야한다. “해당 도메인에 대한 IP 주소를 route53 네임서버에서 찾으시오”같은 것이다. route53에서는 해당 인스턴스나 버킷 등으로 연결되어있다.)
- (또는 카페24 같은 호스팅에서 가비아에서 구매한 도메인을 사용하려한다면 카페24의 네임 서버를 가비아 도메인에 추가해야한다. “해당 도메인에 대한 IP 주소를 카페24 네임서버에서 찾으시오” 같은 것이다. 그리고 카페24에도 해당 도메인을 연결한다. “카페24에 추가가 가능하군요 추가하겠음, 그리고 사용중인 호스팅에 연결하세요”하면 끝난다.)
더보기
Fully Qualified Domain Name(FQDN) 전체 도메인 이름
도메인의 전체 이름을 표기하는 방식을 말한다.
일반적으로 도메인 이름은 www.hanamon.kr에서 hanamon.kr을 의미하기 때문에 이러한 용어가 나왔다고 본다.
- 도메인 이름: hanamon.kr
- 호스트 이름: www
- FQDN : www.hanamon.kr
2. 네임 서버 (Name Server) == DNS 서버
- 해당 도메인 이름의 IP 주소를 찾는 서버
문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때 사용하는 IP 주소로 변환시키기 위해서는 도메인 네임 스페이스의 트리 구조에 대한 정보가 필요한데, 이러한 정보를 가지고 있는 서버를 네임 서버라고 한다.
- 가비아, route53 등
- AWS와 같은 호스팅에서 가비아에서 구매한 도메인을 사용하려고 한다면 route53에 생성된 네임 서버를 가비아 도메인에 추가해야 한다.
- “해당 도메인에 대한 IP 주소를 route53 네임 서버에서 찾으세요.”
- AWS와 같은 호스팅에서 가비아에서 구매한 도메인을 사용하려고 한다면 route53에 생성된 네임 서버를 가비아 도메인에 추가해야 한다.
- 전 세계 13개 Root DNS 서버가 구축되어 있다.
- 패킷의 실질적인 크기 제한으로 인해 13 개로 제한 된다.
- DNS 서버를 복사하여 같은 기능을 담당하는 미러 서버가 있다.
- Root DNS 서버
- ICANN이 직접 관리하는 서버
- TLD DNS 서버 IP 주소를 저장하고 안내하는 역할
- Top Level Domain(TLD) DNS 서버
- 도메인 등록 기관이 관리하는 서버
- Authoritative DNS 서버의 주소를 저장하고 안내한다.
- Second Level Domain (SLD) DNS 서버
- == Authoritative DNS 서버
- 실제 개인 도메인과 IP 주소의 관계가 기록(저장/변경)되는 서버
- 도메인/호스팅 업체의 네임 서버
- 권한이 없는 DNS 서버
- 리졸버 서버
- 질의를 통해 IP 주소를 알아내거나 캐시한다.
- 권한이 있는 DNS 서버(Root, Top-Level, Second-Level DNS 서버)는 IP 주소와 도메인 이름을 매핑하고, 권한이 없는 서버(리졸버)는 질의를 통해 IP 주소를 알아내거나 캐시한다.
3. 리졸버 (Resolver)
- 수많은 네임서버에 접근하여 사용자로부터 요청 받은 도메인의 IP 정보를 조회하는 기능을 수행
- DNS 클라이언트 요청을 네임 서버로 전달
- 검색 결과를 클라이언트에게 제공
- 하나의 네임 서버에 정보가 없으면 다른 네임 서버에 요청을 보내 정보를 받아온다.
- 리졸버 기능을 단말에 구현하는 것은 자원의 한계가 있기 때문에 대부분 기능을 DNS 서버에 구현한다.
- 이러한 단순화된 기능의 리졸버를 스터브 리졸버(Stub Resolver)라고 하며,
스터브 리졸버는 수 많은 네임 서버의 구조를 파악할 필요없이 리졸버가 구현된 DNS 서버의 IP 주소만 파악하면 된다. - 클라이언트 호스트에서 설정하는 DNS 서버(Recursive DNS Server)는 이와 같은 서버를 의미하는 것으로,
도메인에 대한 질의를 받은 스터브 리졸버는 설정된 DNS 서버로 DNS Query(질의)를 전달하고
DNS 서버로부터 최종 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행한다.
- 이러한 단순화된 기능의 리졸버를 스터브 리졸버(Stub Resolver)라고 하며,
동작 방식 및 과정
전체 과정
도메인의 수는 매우 많기 때문에 하나의 서버에서 관리하기 어렵다. 따라서 DNS는 다음의 과정을 거쳐 IP주소를 얻는다.
- 주소창에 www.naver.com을 입력하면 DNS resolver가 도메인 주소를 받는다.
- DNS resolver는 이 주소를 Root Name Server에 보낸다.
- Root NS는 naver.com 에서 .com 을 분류해 resolver에게 전달한다.
- resolver는 .com 을 관리하는 .com Top-Level Name Server에 도메인 주소를 보낸다.
- Top-Level Name Server는 naver.com을 관리하는 Name Server를 resolver에게 전달한다.
- resolver는 해당 Name Server에 도메인 주소를 보낸다.
- 해당 Name Server는 도메인의 ip 주소를 resolver에게 전달한다.
- resolver는 해당 ip주소를 사용자에게 전송한다.
더보기
- 사용자가 웹 브라우저에 “www.hanamon.kr”을 입력한다.
- 웹 브라우저는 이전에 해당 URL을 방문한 적 있는지 확인한다.
- 브라우저 캐시, OS 캐시, 라우터 캐시, ISP 캐시를 확인한다.
- 웹 브라우저가 Resolver에게 요청한다.
- “www.hanamon.kr 의 IP 주소를 알려주세요!”
- 리졸버가 최상위 기관에서 관리하는 네임 서버에게 요청한다.
- “.kr 이라는 도메인이 있나요?”
- 최상위 기관에서 관리하는 네임 서버가 응답한다.
- “한국 국가 도메인입니다. kr 네임 서버로 가세요.”
- 리졸버가 .kr 네임 서버에게 요청한다.
- “hanamon.kr 이라는 도메인이 있나요?”
- .kr 네임 서버가 응답한다.
- “가비아 네임 서버로 가세요.”
- 리졸버가 가비아 네임 서버에게 요청한다.
- “www.hanamon.kr 이라는 도메인이 있나요?”
- 가비아 네임 서버가 응답한다.
- “203.245.44.32 으로 가세요.”
- 리졸버가 웹 브라우저에게 응답한다.
- “203.245.44.32 으로 가세요.”
DNS 동작 세부 과정
- 웹 브라우저에 www.hanamon.kr을 입력한다.
- 웹 브라우저는 이전에 방문한적 있는지 찾는다.
- 브라우저 캐시 확인
- OS 캐시 확인
- 라우터 캐시 확인
- ISP 캐시 확인 (Recursive DNS Server)
- ISP에서 DNS Iterative하게 쿼리를 날린다.
- ISP는 Authoritative DNS 서버에서 최종적으로 IP 주소를 응답받는다.
- ISP는 해당 IP 주소를 캐시한다.
- 웹 브라우저에게 응답한다.
* ISP: 개인이나 기업체에게 인터넷 접속 서비스, 웹사이트 구축 및 웹호스팅 서비스 등을 제공하는 회사를 말한다.
DNS Query(쿼리)란?
- DNS 클라이언트와 DNS 서버는 DNS 쿼리를 교환한다.
- DNS 쿼리는 Recursive(재귀적) 또는 Iterative(반복적)으로 구분된다.
- 아래의 용어가 위 동작 과정에 이해를 방해할 수도 있기에 추가하였습니다.
- 단순한 개념으로 아래와 같은 방식으로 요청과 응답을 한다고 이해하시면 됩니다.
Recursive Query (재귀적 질의)
- 결과물(IP 주소)를 돌려주는 작업이다. (결과적으로 Recursive 서버가 Recursive 쿼리를 웹 브라우저 등에게 돌려주는 역할을 한다.)
- Recursive 쿼리를 받은 Recursive 서버는 Iterative 하게 권한 있는 네임 서버로 Iterative 쿼리를 보내서 결과적으로 IP 주소를 찾게 되고 해당 결과물을 응답한다.
- 사전적 의미로써 재귀로, 응답을 돌려주는 쿼리라고 생각하자.
Iterative Query (반복적 질의)
- Recursive DNS 서버가 다른 DNS 서버에게 쿼리를 보내어 응답을 요청하는 작업이다.
- Recursive 서버가 권한 있는 네임 서버들에게 반복적으로 쿼리를 보내서 결과물(IP 주소)를 알아낸다.
- Recursive 서버에 이미 IP 주소가 캐시 되어있다면 이 과정은 건너 뛴다.
참고) DNS 레코드 종류
- SOA(Start of Authority) : 권한 시작 지정하고, 권한이 있는 서버를 가리킴.
- A(Host Record) : FQDN과 32비트의 IPv4 주소를 연결
- AAAA(IPv6호스트) : FQDN과 128비트의 IPv6 주소를 연결
- CNAME(Alias Record) : 실제 도메인 이름과 연결괴는 가상 도메인 이름(별칭)
- MX(Mail Exchane Record) : 주어진 사서함에 도달할 수 있는 라우팅 정보 제공.
- SRV(Service Resources) : 비슷한 TCP/IP 서비스를 제공하는 다수의 서버 위치 정보를 제공.
- NS(Name Servers) : 도메인 서버 목록을 지정.
참고자료