DNS 란 무엇인가?
도메인 이름 시스템(DNS)은 사람이 편하게 해당 서버에 요청할 수 있게 해주는 시스템이다.
즉 클라이언트는 직접 ip 주소로 요청하는것이 아니라 보기편한 문자로 요청할 수 있게 해준다.
12.123.123.22
보다는 www.naver.com
으로 요청보내는게 쉽자나! (물론 12.123.123.22
는 실제 네이버 주소가 아니다)
DNS, 네임서버, DNS 서버 뭐가 다른데?
DNS 는 시스템이고, www.naver.com
이 요청되면 실제 서버 ip 주소로 요청되게끔 해야겠지, 이렇게 실제 서버를 찾아주는 애가 네임서버 다. 네임서버
, DNS 서버
, 도메인 네임서버
모두 다 같고, 사람들마다 그냥 다르게 부른다.
브라우저에서 도메인이름으로 요청했을 때 과정
큰 틀은 매우 심플하게 다음 순서로 진행이 된다.
- 브라우저가
www.naver.com
을 요청한다.
- 네임서버에
www.naver.com
에 해당하는 실제 서버주소 를 찾아서 브라우저에서 전달한다.
- 브라우저는 전달받은 실제 서버 ip 주소로 요청한다.
네임서버는 어떻게 서버주소를 찾을까? (feat.hosts file)
네임서버는 왜 생긴걸까?
- 인터넷 초기에는 hostname 을 서버 ip를 저장한 파일을 저장하여 사용했는데,
- SNI-NIC 이라는 곳에
hosts.txt
파일을 다운받아 저장하였다.
- 문제점...
- 서버가 ip 주소를 바꾸면? 바로바로 업데이트를 해줄까?
- 이래서 hostname 을 바로 ip로 변환해 주는 네임버서가 생겼다
www.naver.com
을 요청 받으면 바로 외부 네임서버로 전달되지 않는다.
- 바로 네트워크를 타는 것보다, 더 빨리 찾을 수 있으면 좋잖아.
- 먼저 로컬에서 찾는다.
- hosts.txt → DNS 캐시 테이블 → 로컬 DNS서버
- 로컬 DNS 서버까지 가서 찾았는데 없으면 외부네트워크 DNS 서버로 요청한다.
hosts.txt
- Windows에서는
C:\Windows\System32\drivers\etc
디렉토리에 위치하고 있다.
- 운영체제는 먼저 hosts.txt 파일에서 검색한다.
DNS 캐시 테이블
hosts.txt
에 없으면 DNS 캐시 테이블
에서 검색한다.
- DNS 캐시테이블은 명령프롬프트 창에서
ipconfig /displaydns
명령어를 입력해서 볼 수 있다.
로컬 DNS 서버
- DNS 캐시 테이블에도 없으면 로컬 DNS 서버로 질의요청을 한다.
- 로컬 DNS 서버란 인터넷을 제공하는 회사가 운영하는 DNS 서버를 뜻한다.
- 명령프롬프트 창에서
nslookup
명령어를 입력하여 확인할 수 있다.
- 운영체제는 로컬 DNS 서버로 부터 도메인 네임의 IP 주소를 응답 받으면 DNS 캐시 테이블에 반영한다.
- 로컬 DNS 서버는 네임서버들과 단계적으로 응답을 주고 받으며 ip주소를 찾으면, 브라우저에게 ip주소를 알려준다.
네임서버는 어떻게 동작하고, 어떻게 구성되어 있을까?
- naver.com, google.com, daum.net
- 도메인 네임이 각각 무엇을 의미할까?
- 도메인 네임은 계층적으로 구성이 되어야 한다.
- 도메인 네임은 전 세계적으로 고유하게 존재해야 한다.
- 그래서 도메인 네임은 가격이 있다💲
도메인 구성
- 효율적으로 관리하기 위해 나누어서 관리한다.
www.naver.com
이 들어오면 Root 네임서버는 com
영역을 호스트하는 네임서버(TLD) 를 찾아 넘긴다.
com
네임서버는 naver.com
영역을 호스팅하는 네임서버를 찾는다.
참조 : https://peemangit.tistory.com/52
Root DNS
- 전 세계에는 13대의 Root DNS가 구축되어 있다.
- 미국에 10, 일본/네덜란드/노르웨이에 각각 1대씩
TLD(Top Level Domain)
- 도메인 등록기관(Registry)이 관리하는 서버이다.
- 도메인판매업체(ex. 가비아)가 도메인을 등록을 요청하는 곳이 도메인 등록기관이고,
- 도메인이 등록될 때 도메인 등록기관은 해당 도메인판매업체와 도메인을 등록한다.
- 가비아로부터 구매한
sera.com
이라면, TLD 는 로컬DNS 서버의 요청을 가비아의 네임서버로 보낸다.
Authoritative DNS
- 실제 도메인과 IP 주소를 맵핑하여 저장되는 서버이다.
- 도메인 판매업체가 관리하기도 하고, 자체적으로 DNS 서버를 구축한 서버도 여기에 속한다.
- 실제 IP 주소를 찾으면 IP 주소를 로컬DNS서버에 전달한다.
참조
https://wizardzines.com/comics/life-of-a-dns-query/
https://peemangit.tistory.com/52
생각해 보자.
- Azure DNS 와 AWS Route 53은 어떻게 다를까?
- DNS 를 악용한 해킹은?
- DNS 반사공격
- DNS 캐시 중독
- DNS 리소스 소진 공격
- 반복적 질의와 재귀적질의 의 차이는?
- 그러게.. 왜 로컬DNS 귀찮게 RootDNS 랑 통신하고, 다음은 TLD랑 통신하고, 다음은 Authoritative DNS 랑 통신하지. 그냥 RootDNS → TLD → Authoritative DNS 순차적으로 알아내서 바로 로컬 DNS 한테 넘기면 되잖아
- Authoritative DNS 가 로컬DNS 주소를 알려면 주고받는 데이터로 로컬DNS 주소를 넘겨줘야해서 그런가.. 대체 이유가 뭘까
- 로컬DNS 와 호스트가 주고받는 메세지는 어떻게 되어있을까
좋은 글 감사합니다!