이 포스팅은 '성공과 실패를 결정하는 1%의 네트워크 원리' 책을 기반으로 작성되었습니다.
1장 두번째. 웹 서버의 IP 주소를 DNS서버에 조회한다.
1. IP 주소를 통한 메시지 운반
허브를 중심으로 몇 대의 컴퓨터가 모여 서브넷을 이룬다. 이 서브넷들은 라우터를 통해 연결되어 네트워크를 이루게 된다. 서브넷에 할당된 주소를 네트워크 주소(번호)라고 하고 허브로 연결된 각각의 컴퓨터에 할당된 주소(번호)를 호스트 번호라고 한다. IP 주소는 네트워크 번호와 호스트 번호, 이 두 주소를 합친 것을 말한다. IP주소는 같은 값이 할당된 기기가 존재하면 안된다.
액세스 대상의 서버까지 메시지를 운반할 때는 IP 주소에 따라 운반된다. 클라이언트에서 메시지를 전송하면 서브넷 안에 있는 허브가 가장 가까운 라우터까지 운반한다. 메시지가 도착한 라우터에서는 최종 목적지까지 가기 위한 다음 라우터를 결정하고 지시한다. 그러면 다음 서브넷의 허브가 지시한 라우터로 메시지를 운반한다.
실제 IP 주소는 32비트의 디지털 데이터로, 점으로 구분하여 10진수로 표기한다. IP주소만으로는 네트워크 주소와 호스트 주소를 구별할 수 없는데, IP주소 규칙에서는 32비트로 한다는 것만 결정되어 있고 내역은 결정되어 있지 않기 때문이다. 그러므로 네트워크를 구축할 때 사용자가 직접 내역을 결정할 수 있다.
아무튼 이 내역에 대한 정보를 IP주소에 덧붙이는 경우가 생기게 되는데, 이 정보를 ‘넷마스크'라고 한다. 넷마스크는 32비트 디지털 데이터이며, 1인 부분은 네트워크 번호를 나타내고, 0인 부분은 호스트 번호를 나타낸다. 32비트를 모두 사용하게 되면 너무 길어지므로 8비트씩 나누어 10진수로 표현하기도 한다.
ex> 125.209.195.86
cf) IP 주소의 호스트 번호가 모두 0이면 서브넷 자체를 나타내며, 모두 1이면 서브넷에 있는 기기 전체에 패킷을 보내는 브로드캐스트를 나타낸다.
당연한 얘기로 들릴 수 있지만 도메인 명과 IP 주소를 구분하여 사용하는 이유는 속도 때문이다. 도메인 명인 인간친화적이며, 인식하기가 쉽지만, 숫자만으로 이루어진 IP 주소 명은 그렇지 않다. 하지만 컴퓨터 입장에서 도메인 주소에 대한 모든 경우의 수를 고려하는 것과 IP 주소에 대한 모든 경우의 수를 고려하는 것은 천지차이이다. 그렇기 때문에 두 가지를 매핑하여 함께 사용하는 것이다.
2. Socket 라이브러리가 IP 주소를 찾는 기능을 제공한다.
DNS 서버에 조회한다는 것은 DNS 서버에 조회 메시지를 보내고, 거기에서 반송되는 응답 메시지를 받는다는 것이라고 할 수 있다. 또한 이것을 DNS 서버에 대해 클라이언트처럼 동작한다고도 볼 수 있다. 이 DNS 클라이언트에 해당하는 것을 DNS 리졸버(이하 리졸버)라고 부르고 이 DNS의 원리를 사용하여 IP 주소를 조사하는 것을 네임 리졸루션(name resolution)이라고 한다. DNS 서버에 조회한다는 것은 리졸버가 리졸루션을 수행하는 동작인 것이다.
그렇다면 리졸버는 무엇이며 어디에 있는가?
리졸버의 실체는 Socket 라이브러리에 들어있는 프로그램이다.
( cf . Socket 라이브러리는 OS에 포함되어 있는 네트워크의 기능을 애플리케이션에서 호출하기 위한 라이브러리이다. UNIX OS의 파생 버전으로 개발된 C 언어용 라이브러리이며, 인터넷의 많은 기능이 Socket 라이브러리를 이용하여 개발되었다.)
리졸버가 DNS 서버에 조회 메시지를 보내고, DNS 서버에서 응답 메시지가 돌아온다. 이 돌아온 응답 메시지에는 IP 주소가 포함되어있고, 리졸버는 메세지에서 IP 주소 값을 추출해 브라우저에서 지정한 메모리 영역에 저장한다. 필요할 때 메모리 영역에 접근하여 사용한다. 그러면 브라우저는 이 메모리 영역에서 IP 주소를 추출하여 HTTP 리퀘스트 메시지와 함께 OS에 전달해 송신을 의뢰한다.
3. 그렇다면 리졸버는 어떻게 작동하는가?
브라우저가 리졸버를 호출하면 제어가 리졸버의 내부로 넘어간다. 리졸버는 DNS 서버에 문의하기 위한 메시지를 만든다. (HTTP 리퀘스트 메시지 제작과 유사한 과정을 거친다.) 그리고 이 메시지를 DNS 서버에 보내야 하는데 리졸버에는 송신 기능이 없다. 그래서 OS의 내부에 포함된 프로토콜 스택을 호출하여 송신을 의뢰한다.
프로토콜 스택을 호출하면 제어권이 프로토콜 스택으로 넘어가면서 LAN 어댑터를 통해 메시지가 DNS 서버로 송신된다. 조회 메시지를 받은 DNS 서버는 특정 방법으로 해당 IP 주소를 조회한다. 만약 DNS 서버에 등록되어 있는 도메인 명이면 그에 해당하는 IP 주소를 응답 메시지에 써서 반송한다.
(DNS 서버에 등록되어 있지 않은 도메인 명이면? 다음 장에서 알아보자.)
반송된 응답 메시지는 프로토콜 스택을 거쳐 리졸버에게 도착하고, 리졸버는 응답 메시지에서 IP 주소를 추출하여 지정된 메모리 영역에 그 값을 저장한다. 이로써 리졸버의 동작이 끝나고 제어권이 다시 브라우저에게 돌아오게 된다.
Q. 맨 처음 접근하게 되는 DNS서버에 대한 주소는 어떻게 알아내는가?
=> PC에서 인터넷 프로토콜 설정에서 기본 DNS 서버 주소를 설정할 수 있다!!
1장 두번째 end
'Dev.Basic > 네트워크' 카테고리의 다른 글
[2장] 1. TCP/IP - 소켓을 작성하고 서버에 접속한다. (0) | 2016.11.10 |
---|---|
[1장] 4. 프로토콜 스택에 메시지 송신을 의뢰한다. (0) | 2016.11.09 |
[1장] 3. 전 세계의 DNS 서버가 연대한다 (0) | 2016.11.07 |
[1장] 웹 브라우저 - 1. HTTP Request 메시지를 작성한다. (0) | 2016.11.05 |
[Intro] 브라우저부터 서버까지 네트워크의 큰 흐름 (2) | 2016.10.08 |