on
DNS
DNS
공부목적으로 작성한 글로 여러 블로그 및 글들을 참조하여 작성하였습니다.
올바르지 않은 내용도 있을 수 있습니다.
틀린 부분이 있다면 알려주시면 감사하겠습니다.
DNS란? (Domain name systme, 혹은 Donmain name server)
인터넷 통신 규약인 TCP/IP에서 네트워크 상에서의 통신은 IP주소를 통해 이루어지게 된다.
DNS는 사람이 읽고 이해하기 쉽도록 문자로 만들어진 도메인 주소를 컴퓨터가 처리할 수 있는 숫자로 된 인터넷 주소(IP 주소)로 바꾸어주는 시스템 또는 이러한 역할을 하는 Server이다.
DNS는 OSI 7Layer 중 L7(Application layer)에 해당한다.
URL 입력창에 www.naver.com을 입력하였을 때 어떤 방식으로 IP주소를 받아오는지
DNS 구성요소와 동작방식을 통해 이해해보자.
DNS 탄생 배경
초창기 인터넷은 Static Mapping 방식으로 NIC(Network information Center)에서 전세계의 host name과 address가 mapping된 정보가 들어있는 Hostfile을 덮어쓰고 일정주기마다 이를 받아와 사용하였다.
이후 인터넷의 크기가 감당하기 불가능할 정도로 커졌고 수많은 IP 주소들을 기억하고 저장하기에 한계가 생김.
방대한 양의 IP정보를 저장하는 것이 아닌 사람이 쉽게 이해할 수 있는 문자를 통해 접근하고자 하였고 이 때 DNS 서버를 참조하겠다고 설정하여 해당 도메인에 대한 쿼리를 DNS가 처리하도록 하는 dynamic mapping방식으로 변경하고자 하였다.
Domain name을 계층형 트리 형식으로 설정한 분산형 데이터베이스 구조를 가진다.
DNS Server와 구성
DNS Sever는 IP주소와 Domain이름을 기억하는 기능과 요청된 query로 부터 IP를 알려주는 기능을 가지고 있다.
각각의 ' . ' 으로 구분된 부분들을 담당하는 독자적인 Server들이 존재한다.
이들은 계층을 가지는 분산형 데이터베이스 구조를 가진다.
네임스페이스
도메인 주소를 어떻게 관리할 지에 대한 방법
무수히 많은 도메인 주소들을 관리하기 위해 무수히 많은 서버들을 이용해 관리하게 되는데, 네임 서버들에서 도메인 주소를 관리하는
방법 또는 관리 단위 정도를 의미한다.
Root Domain Server
Top-level domain을 담당하는 서버의 목록과 IP를 알고 있다. 전세계에 총 13개의 root server가 있음.
최상위 도메인 서버의 정보로 이름 해석의 출발지 노드 역할을 수행한다.
Top-Level Server : second-level의 목록과 IP를 알고 있다.
Second-level domain을 담당하는 서버의 목록과 IP를 알고 있다.
국가 코드 최상위 도메인(ccTLD : country code TLD) ex) kr, jp, eu ..
일반 최상위(gTLD : global TLD) ex) .net, .com, .org 등
ARPA : 역방향 조회시 사용되는 최상위 도메인 ex) in-addr.arpa
Second Level domain server( + Sub domain)
TLD 하위에서 관리되는 서브 도메인
국가 도메인 하위에 기관유형에 따른 분류 ex) .co(일반회사) , .ac(교육기관), .go(정부기관) 등
Sub Domain : 상위 도메인에 소속되는 각 기관 또는 회사별 도메인 ex) google, naver
유형별로 분류를 하면 다음과 같다.
1. 책임에 따른 분류
Authoritative Name Sever
책임 네임 서버
어떤 호스트의 DNS정보를 서버 내 디스크에 실제 가지고 있는 서버
즉, 캐쉬된 정보가 아닌 실제 정보로 이 파일을 가지고 있는 Primary Name server, Secondary Name sever를 말한다.
Recursive Name Sever(Non-Authoritative Name Server)
비 책임서버로 실제 데이터가 아닌 DNS 캐싱된 데이터를 가지고 있는 서버.
중간 네임 서버 : 어떤 호스트 이름을 알고 있는 서버로, Authoritative Name server의 IP주소를 알고 있다.
지역 네임 서버 : 지역 도메인에서 DNS질의 응답을 전담하는 서버
Resolver : 어플리케이션 등의 입장에서 DNS질의에 대한 응답을 하는 기능을 가짐. DNS 상 클라이언트.
Local Name server :
개인이나 기업체에게 인터넷 접속 서비스, 웹 사이트 구축 및 웹 호스팅 서비스를 제공하는 ISP는 하나의 Local Name server를 가지고 있다. Host가 Local DNS server로 쿼리를 날리면 local DNS는 대리인 처럼 query를 계층적으로 forward시킨다. 즉 PC로 부터 DNS query를 받아 Domain address에 mapping되는 IP주소를 받아오는 과정을 수행하여 그 결과값을 전달하는 서버이다.
2. 도메인 관리 지역 네임 서버에 따른 분류
Primary Name Server(해당 도메인을 관리하는 주 네임 서버)
Secondary Name server ( 도메인에 대한 백업 및 부하 분산용)
CacheOnlyServer(캐시 기능만 유지하는 서버로, 도메인에 대한 Authority Data를 가지지 않고 Resolving기능만 수행)
DNS 동작 방식 (Name resolution)
1. Iterative Query
Host가 "naver.com"에 대해 query를 보내면 Local DNS Server가 Root name server에 query를 보내 각각의 네임스페이스에 맞는 DNS 서버 주소를 받아오고 이를 반복적으로 수행한다. 즉, 최종 IP주소를 받을 때 까지 Local DNS Server에서 요청 및 응답을 주체적으로 맡아 반복하는 방법
2. Recrusive Query
localHost가 naver.com에 대해 query를 보내면 Local DNS서버가 Root Name Server에 Query를 보내고 Root Server는 자신의 Server에 등록되어 있는지 검사한 다음 담당된 서버에 요청하게 된다. Recursive하게 Domain name을 가지고 있는 서버까지 query가 이동하여 IP 주소를 얻는 방법으로 Root Server가 주체적으로 맡기 때문에 Root Server에 큰 부담을 준다는 단점이 있다.
3. 실제 DNS 동작 방식
Recursive 방식과 Iterative 방식을 함께 사용한다. 또한 변환기를 통해 Local Name Server에 recursive하게 요청함으로써 client host의 resource 소비를 줄일 수 있다.
결론 적으로 Local Name Server로 Recrusive하게 동작하고 Local Name Server에서 전담하여 Iterative한 방식으로 IP 주소를 받아와 요청한 값을 전달한다.
나도 도메인을 등록하고 싶어요!
// TODO
관련 명령어
nslookup : cmd 창에서 nslookup 명령어를 통해 도메인 이름에 대한 정보를 조회할 때 사용한다.
처음 nslookup 명령어를 사용시 현재 내가 사용하고 있는 DNS 서버 정보가 나온다.
이후 관련 도메인 이름에 대한 정보를 조회할 수 있다.
이 때 "권한 없는 응답" 이라는 뜻은 Authoritative Server에서 가져온 것이 아닌 Non-Authoritative Server 또는 cache 파일에서 가져온 것을 의미한다.
주요 DNS 목록(Feat. Wiki)
이를 통해 확인하면 지금 내가 사용하고 있는 DNS서버는 KT라는 것을 알 수 있네.
참조
https://ko.wikipedia.org/wiki/도메인_네임_시스템
(위키피디아 DNS서버)
https://zzsza.github.io/development/2018/04/16/domain-name-system/
(Domain Name System의 이해)
https://www.netmanias.com/ko/post/techdocs/5259/dns-network-protocol/dns-basic-operation
(DNS 기본 동작 원리)
https://slideplayer.com/slide/5174685/ (사진)
https://slideplayer.com/slide/5326443/ (사진)
https://ssudalim.tistory.com/4
공유하기 글 요소 저작자표시
from http://sogogi486.tistory.com/21 by ccl(A) rewrite - 2021-11-28 17:27:27