DNS? DNS 서버? DNS 쿼리?
오늘은 계속 벼르고 벼르던 DNS에 대해 정리 해 보려고 합니다.
DNS란?
네트워크 상에서 컴퓨터들은 IP주소를 이용하여 서로를 구별하고 통신합니다. 사람들이 네트워크를 통해 원격의 컴퓨터에 접속하기 위해서는 IP주소를 이용하여야 하지만, 숫자의 연속인 IP주소를 일일이 외울 수 없기 때문에 쉽게 기억할 수 있는 도메인 주소 체계가 만들어졌습니다.
DNS(Domain Name System)은 도메인이름의 수직적인 체계를 말합니다. - 출처: KISA
즉, 호스트 이름(www.example.com)을 IP주소(192.168.1.1)로 변환 해 주는, 인터넷 상에서 사용하는 일종의 전화번호부가 되겠습니다.
위 그림처럼 www.kisa.or.kr와 같은 3단계 도메인도 있고, www.naver.com처럼 2단계로 이루어진 도메인도 있습니다.
DNS의 역사..?
초기 : hosts 파일에 일일이 적어서 사용. 생각만 해도 귀찮죠?
중기: hosts파일을 통째로 배포하는 방식으로 사용. 배포의 어려움 등으로 인해 도태..
현재: 계층적 트리구조의 DNS(Domain Name System) 서버가 구축.
DNS의 특징
- UDP 53 port 활용(종종 TCP 53 port도 활용)
- 여러 단계를 거치지만, 'Behind the Scene'으로 이루어지므로 클라이언트 측에서는 답변을 한번만 수신.
주요 개념
- DNS 리졸버(DNS resolver)
- DNS 조회 시 가장 먼저 조우하는 지점. 최초에 요청한 클라이언트와의 통신을 담당하며, 주어진 URL이 최종적인 IP주소로 변경될때까지 일련의 쿼리를 실행한다. 캐시된 레코드가 있다면 쿼리를 수행하는 대신 이 데이터를 활용 할 수도 있다.
- DNS recursor
- 일종의 사서. 웹 브라우저를 통해 클라이언트로부터 쿼리를 요청받는 서버.
- Root Nameserver
- 호스트명을 IP로 전환하기 위한 가장 첫번째인 기본 단계. 다른 책장을 가리키는 색인.
- TLD Nameserver
- 도서관의 특정한 책장. 호스트명의 마지막 부분을 가르킴(’example.com’ 에서 → ‘com’부분)
- Authoritative nameserver
- 권한 있는 네임서버이고 마지막 네임서버. 책장에 꽂혀있는 사전. 이 네임서버가 레코드에 접근 권한이 있다면, 해당하는 IP주소를 최초에 요청한 DNS 리커서에게 돌려줌
- 루트 힌트(Root Hint)
- DNS 루트 서버들의 IP주소. 서버 내의 named.ca 파일을 이용한다
- DNS 쿼리의 종류
- 재귀 쿼리(Recursive query): 클라이언트가 질의한 서버로부터 응답을 직접 받는 쿼리
- 반복 쿼리(Iterative query): 하나의 쿼리에 대해 하나의 응답으로 완료하지 않고, 여러 서버에 순차적으로 거쳐서 응답을 받는 쿼리. root부터 계층적, 순차적으로 응답 → root hint가 있어야 함.
- 비재귀 쿼리(Non-recursive query)
- 응답의 종류
- 권한있는 응답(Authoritive Answer): Zone 정보를 가지고 있는 서버가 직접 응답
- 권한없는 응답(Non-authoritive Answer): 캐시되어있는 레코드를 가지고 응답
- A 레코드: 도메인 주소와 IP주소가 매핑된 레코드.
- CNAME(Canonacal name): 하나의 도메인 정보를 다른 주소로 ‘대충 뭉뚱그려서’ 지정한다. 일종의 alias.
- NS 레코드: 권한 있는 네임서버 목록
- 참고
만약 탐색 과정에서,
1. 캐시 테이블에 A 레코드가 있으면, IP주소로 바로 이동
2. CNAME, NS레코드만 있는 경우, 불필요한 탐색을 생략하고 해당 레코드를 이용해 더 빠르게 탐색
DNS 작동원리
클라이언트 행동 / DNS서버 행동
1. 사용자가 브라우저에 'example.com'입력
1-1 DNS 캐시 테이블 확인. 레코드가 있으면 이동
1-2 레코드가 없으면 DNS서버에 DNS쿼리 전송
1-3 Zone파일에서 레코드 확인
1-4 DNS 캐시 테이블 확인. 레코드가 있으면 이동
2. 그래도 없으면 Resolver가 루트힌트를 활용해서 루트 네임서버(.)로 질의
3. 루트 네임서버가 'com' 이라는 TLD(최상위도메인)의 주소 응답
4. Resolver가 'com' TLD에게 질의
5. TLD가 'example.com' 네임서버의 주소 응답
6. Resolver가 'example.com' 네임서버에게 질의
7. 네임서버가 'example.com'의 IP주소를 Resolver에게 반환
8. Resolver가 클라이언트에게 'example.com'의 IP주소 응답
9. 브라우저가 해당 IP주소에 HTTP 요청
10. 해당 IP의 서버가 브라우저에게 리소스를 응답
만약 전 과정을 거쳐도 못찾거나, 시간 초과시 error 반환
확실히 공부를 하다보니 어느정도 이해는 가지만, 알면 알수록 모르는게 더 많아지는것 같습니다.
최대한 정리를 해 보려고 노력했지만, 아직 중구난방하고 지저분한것 같네요. 나중에 꼭 다시 한 번 정리 해보아야겠습니다.
References
https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/
DNS란 | Cloudflare
IP 주소 대신 도메인 이름을 사용하여 웹사이트에 연결하는 DNS 개념 및 원리를 소개합니다.
www.cloudflare.com
https://한국인터넷정보센터.한국/jsp/resources/dns/dnsInfo.jsp
한국인터넷정보센터(KRNIC)
도메인 소개, 등록 및 사용, IP주소, AS번호, DNS 정보, 관련규정 제공
xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e
https://hihighlinux.tistory.com/47
DNS란 무엇인가 재귀적,반복적 쿼리
안녕하세요 오늘은 DNS(Domain Name System)에 대해 알아보겠습니다. DNS서버 구축을 하기 위해 먼저 개념을 알고가는 것이 좋다고 생각해서 먼저 글을 작성해봅니다 시작해보겠습니다. DNS 란? 네트워
hihighlinux.tistory.com
DNS (Domain Name System)
초기의 네트워크 접근 # 초기의 네트워크 접근 - TCP/IP 초기에 숫자형태의 IP로 접근함 - 네트워크가 방대해지면서 사용자는 주소에 대해 기억하기 어려워짐 - 때문에 쉽게 기억할 수 있는 문자형
girrr.tistory.com
DNS에서 CNAME과 A 레코드의 차이
가비아, 후이즈, 고대디 등의 DNS를 이용해서 커스텀 도메인을 사용할 때, 서브 도메인을 등록하기 위해서 CNAME과 A 레코드 같은 정보를 DNS 서비스 홈페이지에 등록해야한다. 둘 다 서브 도메인을
dev.plusblog.co.kr
https://kb.isc.org/docs/aa-01309
Root hints - a collection of operational and configuration FAQs
This collection of FAQs aims to de-mystify root hints for new DNS administrators.
kb.isc.org
DNS의 개념
DNS (Domain Name System) - DNS는 인터넷 명명 체계의 기초. - DNS는 영문자,숫자 이름을 사용하여 리소스 엑세스를 지원한다. - 인터넷의 증가하는 호스트 수를 지원하기 위해 만들어졌다. 1. DNS서버 역할
hy2on.tistory.com
https://www.itgeared.com/whats-is-root-hints/
What are Root Hints? | ITGeared
Root hints are DNS data stored in a DNS server. The root hints provide a list of preliminary resource records that can be used by the DNS service to locate
www.itgeared.com