블로그 이전했습니다. https://jeongzero.oopy.io/
DNS란?
본문 바로가기
컴퓨터 관련 과목/Network

DNS란?

728x90

DNS(Domain Name Service)란?

사람은 여러 가지 방법으로 자신을 식별할 수 있다. 예를 들어, 출생증명서에 나타나는 이름, 주민등록번호, 운전면허번호로 식별할 수도 있다. 이들 식별자는 사람을 구별하는 데 사용할 수 있지만, 어떤 환경에서는 한 식별자가 다른 것보다 더 적당한 것일 수 있다.



걍 각 사람마다 1도 안겹치게 가지고 있는 고유한 주민번호로 사람을 식별할 수 있다. 하지만 누가 자기를 소개할 때 주민번호로 소개하겠는가? 길기도 길고 매번 숫자를 말하는 것도 여간 쉬운게 아니다. 따라서 사람은 각자 이름을 가지고 있고 (난 정재호 라는 이름) 또한 친구들 사이에서 별명을 가지고 있다. 이름으로 불리거나 별명으로 불린다. 이처럼 사람을 여러가지 방법으로 식별할 수 있는 것처럼 인터넷 호스토도 마찬가지이다. 



호스트에 대한 하나의 식별자를 호스트 네임이라한다.  www.naver.com 이나 www.facebook.com 이런게 다 호스트 네임이다. 여기서 DNS의 실질적인 역할은 사용자가 입력한 호스트명을 해당 호스트명에 해당하는 IP주소로 변환하는 것이다. 예를 들어 어떤 사용자의 호스트에서 수행되는 브라우저가 URL www.naver.com/index.html을 요청할 때 무슨일이 발생하는지 알아보자. 사용자의 호스트가 HTTP 요청 메시지를 웹 서버 www.naver.com으로 보낼 수 있게 하기 위해 사용자 호스트는 www.naver.com의 IP 주소를 얻어야만 한다. 이는 DNS 프로토콜이 수행하며 다음과 같은 과정으로 동작된다.



1. 브라우저는 URL로부터 호스트 네임 www.naver.com를 추출하고 그 호스트 네임을 DNS 애플리케이션의 클라이언트 측에 넘긴다.

2. DNS 클라이언트는 DNS 서버로 호스트 네임을 포함하는 질의를 보낸다.

3. DNS 클라이언트는 결국 호스트 네임에 대한 IP 주소를 가진 응답을 받게 된다.

4. 브라우저가 DNS로부터 IP주소를 받으면, 브라우저는 그 IP주소와 그 주소의 80번 포트에 위치하는 HTTP 서버 프로세스로 TCP 연결을 초기화한다.


전반적인 개념은 이렇게 되며 이제 DNS가 어떠한 동작과정으로 IP주소를 얻어오는지를 자세히 알아보자.


우선 위에서 말한 호스트 네임을 도메인이라고도 한다. 도메인을 이해하기 위해 내가 구글사이트에 들어가기 위해 www.google.co.kr. 을 쳤다고 생각해보자. 여기서 . 으로 구분되는 각 영역이 무엇을 의미하는지 아는가?




www는 호스트(웹서버)서브 도메인이고 google은 3단계 도메인, co는 2단계 도메인(책임 도메인), kr은 최상위 도메인, 마지막으로 . 은 root 도메인이라고 한다. 각 계층은 . 으로 구분을 한다. 인터넷상에서 사용되는 도메인은 전 세계적으로 고유하게 존재하여야 하므로 공통적으로 정해진 체계에 따라야 하며, 임의로 번경되거나 생성될 수 없다. 따라서 인터넷상의 모든 도메인은 . 또는 루트 라 불리는 도메인 아래 각 계층적으로 구성이 되어야 한다.




위 그림은 각 계층별 도메인을 잘 보여준다. 1단계 최상위 도메인에서 만약 .kr을 선택하고 2단계 도메인에서 .co를 선택하고 마지막으로 3단계 도메인에서 희망 문자열을 선택하면 (예를 들어 google) 최종 도메인은 www.google.co.kr이 된다. 이렇게 도메인은 수직적인 체계를 가지고 있다.


이제 도메인에 대한 설명을 했으니 다양한 DNS 서버들과 어떻게 상호작용을 하는지 알아보자.


다시 www.google.co.kr.을 또 친다고 해보자. 그렇다면 첫번째로 수행되는 DNS는 로컬 DNS 서버이다. 로컬 DNS 서버은 캐시처럼 자주 사용 이용하는 도메인에 대한 IP주소를 딱 준비해놓고 있다가 만약 사용자가 해당 도메인을 쳤다면 루트, 최상위 도메인,, 등 에게 질의를 할 필요없이 바로 제공해 줄 수 있다. 로컬 DNS IP 주소를 확인하는 방법은 명령 프롬프트 창에다가 ipconfig -all이라고 치면 나온다. 나는 168. 로 시작하는 ip 주소를 가진 DNS 서버를 이용중이므로 kt의 로컬 DNS를 사용하고 있다고 확인할 수 있다.



반복적 질의


재귀적 질의


DNS의 질의 방법은 크게  반복적 질의와 재귀적 질의로 나뉜다.



1. 반복적 질의


1) 로컬 DNS에게 요청을 함 -> 로컬은 해당 정보를 가지고 있지 않다면 루트 DNS 서버에게 요청하는 IP 알고 있냐고 물어봄


2) 루트 DNS는 자기는 모르지만 아마 최상위 DNS 서버(TLD)는 알고 있을 거라고 로컬 DNS에게 알려줌


3) 로컬 DNS는 다시 최상위 DNS 서버에게 질의함 알고 있냐고. -> 자기도 모르는데 책임 DNS 서버는 알고 있을 꺼라고 알려줌


4) 로컬 DNS는 책임 DNS 서버에게 알고 있냐고 물어봄 -> 책임 DNS는 알고 있기 때문에 해당 IP 주소를 알려줌


5) 로컬 DNS는 받아온 정보를 사용자에게 최종적으로 알려주고 자신의 DNS 레코드에 나중에 똑같은 요청에대한 신속한 처리를 위해 저장함




2. 재귀적 질의


1) 로컬 DNS에게 요청을 함 -> 로컬은 해당 정보를 가지고 있지 않다면 루트 DNS 서버에게 요청하는 IP 알고 있냐고 물어봄


2) 루트 DNS 서버는 모르기 때문에 최상위 DNS 서버에게 물어봄 알고 있냐고


3) 최상위 DNS 서버도 모르기 때문에 책임 DNS 서버에게 물어봄 알고 있냐고


4) 책임 DNS 서버는 알고 있기 때문에 알려줌. (최상위 DNS에게 다시)


5) 최상위 DNS는 받은 정보를 다시 루트 DNS에게 알려줌


6) 루트 DNS는 로컬 DNS에게 받은 정보를 알려줌


7) 로컬 DNS는 최종적으로 사용자에게 받은 정보를 전달하고 자신의 DNS 레코드에 해당 정보를 추가함.


이렇게 재귀적 질의는 재귀적인 방법을 이용하여 질의를 하는것이고 반복적 질의는 DNS 서버마다 로컬 DNS가 반복적으로 질문을 하는 방법을 말한다.


재귀적 질의인지 반복적 질의인지는 와이어샤크로 dns 프로토콜을 뜯어봐야한다. 어플리케이션 계층의 정보중에  Recursion desired 가 1로 되어 있으면 재귀적 질의로 되있는거고 0으로 되어있으면 재귀적 질의를 사용하는 것이다.





728x90