거북이-https://velog.io/@violet_evgadn 이전완료

DNS 리졸버 본문

CS 지식/네트워크

DNS 리졸버

VioletEvgadn 2023. 3. 2. 00:38

DNS

◎ DNS란?

브라우저가 OS에 메시지 송신을 의뢰할 때 도메인 명에 맞는 IP 주소를 같이 전달해줘야 한다고 말했다.

그리고 도메인 명에 맞는 IP 주소를 찾기 위해 활용하는 시스템을 DNS라고 한다.

 

DNS는 Domain Name System의 약자로써 서버명(도메인명)과 IP 주소를 대응시키기 위해 가장 많이 활용한다.

DNS는 도메인명뿐만이 아니라 메일 주소와 메일 서버를 대응시키는 등의 다양한 정보를 이름에 대응하여 등록할 수 있다.

 

브라우저는 가장 가까운 DNS 서버에 도메인 명을 전달하고 DNS 서버는 응답을 통해 대응되는 IP 주소를 전달하는 것으로써 도메인 명에 맞는 IP 주소를 반환받을 수 있다.

 

DNS 서버에 IP를 조회한다는 것은 곧 "외부 서버"에 요청을 보낸다는 것과 동일한 의미를 가진다.

즉, 가장 가까운 DNS 서버에 도메인 명을 데이터로 담아 Request Message를 보내고 대응되는 IP 주소를 데이터로 담아 Respond Message를 받음으로써 도메인명과 대응되는 IP 주소를 받을 수 있게 된다.

 

◎ DNS 리졸버(DNS Resolver)

DNS 서버에 IP 주소를 조회 할 때 웹 서버에 Request를 보내는 것과 동일한 과정을 거친다.

그렇다면 DNS 서버에 리퀘스트(요청)를 보낼 때에도 클라이언트 역할을 하는 무언가가 있을 것이다.

 

DNS 서버에 요청을 보내는 클라이언트의 역할을 하는 것을 DNS 리졸버 혹은 리졸버라고 부른다.

그리고 DNS 원리를 사용하여 도메인명과 대응되는 IP 주소를 조사하는 일을 네임 리졸루션(Name Resolution)이라고 하는데 리졸버가 이 리졸루션을 수행한다.

 

리졸버를 공부하기 전 Socket 라이브러리에 대해 알아볼 필요가 있다.

 

"라이브러리(Library)"란 SW를 개발할 때 컴퓨터 프로그램(어플리케이션)이 사용하는 다양한 기능들을 여러 개 모아 둔 것이다. 라이브러리 내부에는 모든 프로그램에서 공통적으로 사용할 수 있는 이미 개발이 완료된 기능들이 모듈화 되어 있다.

 

라이브러리를 사용할 경우 이미 개발된 기능을 호출하기만 하면 바로 프로그램에서 사용할 수 있으므로 개발된 내용을 다시 개발할 필요가 없어진다.

또한 모든 프로그램에서 라이브러리만 불러오면 동일한 방법으로 사용 가능하기 때문에 표준화도 기대할 수 있다.

 

Socket 라이브러리란 OS에 포함되어 있는 네트워크 기능을 애플리케이션에서 호출하기 위한 라이브러리의 일종이다.

그리고 DNS 리졸버는 이 Socket 라이브러리 안에 포함된 기능이다.

 

◎ 리졸버 동작 방식

먼저 리졸버의 동작 방식의 흐름을 알아보자.

 

브라우저 등의 프로그램에서 리졸버의 "gethostbyname"이라는 메서드를 사용하여 DNS 서버에 요청을 보내고 응답으로 IP 주소를 받아 대응되는 IP 주소를 특정 메모리 영역에 저장시킨다.

이후 브라우저는 특정 메모리 영역에서 IP 주소를 추출하고 HTTP Request Message와 IP 주소를 같이 OS에 건네주어 송신을 의뢰하는 것이다.

 

그렇다면 리졸버가 어떻게 동작하여 도메인 명에 대응되는 IP 주소를 얻어올 수 있는지 자세히 알아보자.

브라우저(애플리케이션 프로그램) 측에 쓰여 있는 내용을 수행하다 리졸버를 호출하는 부분(gethostbyname)에 다다르면 애플리케이션의 동작이 일시적으로 중지되고 제어권을 Resolver에게 넘겨준다.(1번 과정)

 

제어권을 넘겨줬으므로 브라우저는 잠시 쉬고 있는 상태가 되며 Socket Library의 리졸버는 메서드 수행이 가능해진다.

 

리졸버는 브라우저에서 의뢰한 작업(도메인 명에 대응되는 IP 주소를 반환해주라는 작업)을 Request Message로 만든다.

이 작업은 HTTP Request Message를 만드는 것과 유사하므로 설명은 생략하겠다.

리졸버 또한 브라우저와 동일하게 네트워크에 메시지를 송/수신하는 기능이 없기 때문에 OS 내부 프로토콜 스택을 호출하여 메시지 송신을 의뢰한다.(2번 과정)

 

메시지 송신을 의뢰받은 프로토콜 스택은 UDP 통신으로 LAN 어댑터를 통해 DNS 서버에 메시지를 송신한다.

(3번 & 4번 과정)

 

이후 DNS 서버는 도메인 명에 대응되는 IP 주소를 검색할 것이며 검색된 IP 주소를 Respond Message에 담아 프로토콜 스택에 Response로 보낼 것이다.(5번 & 6번 과정)

 

이후 프로토콜 스택은 리졸버에게 Respond Message를 전달한다(7번 과정)

 

리졸버는 Respond Message를 분석하여 검색된 IP 주소 정보를 추출하고 브라우저가 리졸버를 호출할 때 지정했던 메모리 영역에 IP 주소를 저장한다.

이렇게 IP 주소를 특정 메모리 영역에 저장했다면 다시 제어권을 브라우저에게 돌려준다.(8번 과정)

 

이제는 특정 메모리 영역에 도메인 명과 대응되는 IP 주소가 저장되어 있으므로 브라우저는 OS에 메시지 송신을 의뢰할 때 IP 주소를 전달해 줄 수 있을 것이다.

 

DNS 서버에 메시지를 송신할 때도 당연히 DNS 서버의 IP 주소가 필요할 것이다.

단지 이는 TCP/IP 설정 항목으로써 컴퓨터에 미리 설정되어 있으므로 따로 지정할 필요는 없다.

 

 

 

 

'CS 지식 > 네트워크' 카테고리의 다른 글

네트워크를 통한 데이터 송/수신  (0) 2023.03.02
DNS 서버 동작  (0) 2023.03.02
IP 주소  (0) 2023.02.27
Request & Respond Message  (0) 2023.02.24
HTTP Protocol  (0) 2023.02.24
Comments