본문 바로가기

WEB/etc

DNS 쿼리 처리 과정

지금까지 DNS 에 대해 알고 있던 것
브라우저에 naver.com 쓰고 엔터치면 DNS 에서 naver.com의 ip 주소를 알려줄꺼고 거기로 가면 되지. (끝)
리액트 프로젝트를 하다가 그 유명한 CORS 문제를 겪었다. 임시방편으로 hosts 파일을 수정하면 CORS 문제를 피해서 개발할 수 있다길래 알아보다가(결국 이 방법은 배포된 url 주소가 없어서 실패했지만) DNS 쿼리의 처리 과정에 대해 조금 더 자세히 이해하게 됐다.

 

DNS 쿼리 처리 과정

                                                                                                                                                                                                 

 

 1.  브라우저에 naver.com 을 입력하면

 

 2.  컴퓨터의 hosts 파일에 naver.com 의 ip 주소 정보가 있는지 확인한다.

 

hosts 파일

: ip 주소와 hostname 을 매칭시켜놓은 텍스트 파일이며, 해당 컴퓨터 안에선 이 파일이 우선권을 갖는다.

 

mac os 기준 hosts 파일의 위치는 /etc/hosts 이다.

/etc/hosts 파일

  • hosts 파일 작성 규칙

- 각 항목은 한 줄(line)로 작성

- IP 주소 (최소 한 칸 이상의 간격) 호스트 이름

- 호스트 이름 부분에 'IP 주소' 를 등록할 수는 없다.

- 같은 ip 주소에 대해 여러개의 호스트 이름을 등록할 수 있다.

 

  • /etc/hosts 파일 변경 후 아래 명령어로 캐시를 갱신하면 바로 적용된다.
$ dscacheutil -flushcache

3.  hosts 파일에 정보가 없으면, 컴퓨터에 있는 local DNS cache에 ip 주소가 있는지 확인한다.

 

Local DNS Server 는 ip를 찾기 위해 가장 먼저 찾게 되는 곳이다.

  • Local DNS 서버에 내가 찾는 도메인의 ip 주소가 캐싱되어 있다면 여기서 끝.
  • Local DNS 서버에 ip 주소가 없다면, Root DNS 서버에 물어본다.

/etc/resolv.conf 파일에서 내 컴퓨터의 Local DNS 서버가 뭔지 확인할 수 있다.

이용하는 ISP가 제공하는 DNS 주소를 볼 수 있는데, 아래 결과는 SK 인터넷의 DNS 서버(nameserver 라고도 함) 주소이다.

통신사에서 제공하는 DNS 말고도 여러 Public DNS 들이 있고(google, cloudflare 등), 쉽게 변경할 수 있다. 

 

/etc/resolv.conf 파일

 

 

4. hosts 파일에서도, DNS cache 에서도 ip 주소를 알아낼 수 없다면, DNS 서버에 물어봐야 한다.

그런데 어떤 DNS 서버에게 물어볼까 ?

DNS 쿼리를 보내고 응답을 받는 과정을 알려면, 도메인의 구조를 먼저 알아야한다. 

도메인의 구조는 아래와 같다. 

 

어떤 DNS 서버에 도메인네임에 대한 쿼리를 날렸을 때, 한 번에 ip 주소를 돌려줄 수 있는 네임서버는 없다.

각각의 레벨을 담당하는 네임서버가 있으며, 각 서버는 바로 하위 레벨 도메인에 대한 네임서버 주소 밖에 알지 못한다.

Root Server 는 Top-Level 의 정보 밖에 모르고, Top-Level 서버는 Second-Level 의 정보 밖에 모른다.

따라서, DNS 요청이 들어올 경우 Root 부터 시작해서 단계적으로 ip 주소를 찾아가게 된다.

 

 

이렇게 여러 네임서버를 거쳐 ip 주소를 찾는 과정을 Recursive Query 라고 한다.


 

nslookup 명령어

nslookup 특정 호스트에 대한 정보를 알아낼 수 있는 명령어.

 

Non-authoritative answer 의 의미

DNS 쿼리의 응답으로 ip 주소를 무사히 받으면, Local DNS Sever 는 해당 주소를 캐시에 저장한다. 다음에 또 naver.com 에 대한 요청이 들어오면 캐시에 있는 정보를 그냥 주면 되니까.

Recursive query 를 거쳐 얻은 ip 주소는 Authoritative DNS Server 에서 받은 정보인 데에 비해, 아래 nslookup naver.com 명령의 결과는 Local DNS Server 에 캐싱된 정보라는 의미에서 Non-authoritative answer 라고 나오는 것이다.

 

 

Authoritative nameserver 가 어딘지 알고 싶다면, 아래 처럼 확인할 수 있다.

 

 

그리고 그 정보를 이용해 아래와 같이 다시 조회해보면 Non-authoritative 라는 문구가 사라졌다!

 

 


 

참고링크

www.itgeared.com/articles/1354-domain-name-system-dns-tutorial-overview/

 

How DNS Works | ITGeared.com

DNS stands for Domain Name System. DNS is used for name resolution on a TCP/IP network. Before you can understand what DNS is and where it came from, you have to first understand how name resolution occurred before DNS was developed. When the Internet was

www.itgeared.com

opentutorials.org/course/3276/20303

 

도메인 이름의 구조 - 생활코딩

수업소개 이 수업에서는 도메인 이름의 구조에 대해서 알아봅니다.  강의 수업내용 스크린 샷

opentutorials.org

+) 더 알아볼것

dig 명령어, A record, CNAME, route 53, Round Robin DNS 알아보기