DNS 이해하기, DNS 질의과정

Sera Lee·2022년 2월 21일
5
post-thumbnail

DNS 란 무엇인가?

도메인 이름 시스템(DNS)은 사람이 편하게 해당 서버에 요청할 수 있게 해주는 시스템이다.

즉 클라이언트는 직접 ip 주소로 요청하는것이 아니라 보기편한 문자로 요청할 수 있게 해준다.

12.123.123.22 보다는 www.naver.com 으로 요청보내는게 쉽자나! (물론 12.123.123.22는 실제 네이버 주소가 아니다)

DNS, 네임서버, DNS 서버 뭐가 다른데?

DNS 는 시스템이고, www.naver.com 이 요청되면 실제 서버 ip 주소로 요청되게끔 해야겠지, 이렇게 실제 서버를 찾아주는 애가 네임서버 다. 네임서버 , DNS 서버, 도메인 네임서버 모두 다 같고, 사람들마다 그냥 다르게 부른다.

브라우저에서 도메인이름으로 요청했을 때 과정

큰 틀은 매우 심플하게 다음 순서로 진행이 된다.

  1. 브라우저가 www.naver.com 을 요청한다.
  2. 네임서버에 www.naver.com 에 해당하는 실제 서버주소 를 찾아서 브라우저에서 전달한다.
  3. 브라우저는 전달받은 실제 서버 ip 주소로 요청한다.

네임서버는 어떻게 서버주소를 찾을까? (feat.hosts file)

네임서버는 왜 생긴걸까?

  • 인터넷 초기에는 hostname 을 서버 ip를 저장한 파일을 저장하여 사용했는데,
  • SNI-NIC 이라는 곳에 hosts.txt 파일을 다운받아 저장하였다.
  • 문제점...
    • 서버가 ip 주소를 바꾸면? 바로바로 업데이트를 해줄까?
  • 이래서 hostname 을 바로 ip로 변환해 주는 네임버서가 생겼다

www.naver.com 요청은 어떻게 네임서버로 전달될까?

  • 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주소를 알려준다.

네임서버는 어떻게 동작하고, 어떻게 구성되어 있을까?

도메인 네임에 집중해보자 (com, net, co.kr, ...)

  • 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 와 호스트가 주고받는 메세지는 어떻게 되어있을까

1개의 댓글

comment-user-thumbnail
2022년 8월 3일

좋은 글 감사합니다!

답글 달기