본문으로 바로가기

TCP/IP, Socket 라이브러리, 리졸버

category 네트워크 2013.12.03 14:52

HTTP의 메시지를 만들고 웹 서버에 송신할때 이를 OS에 의뢰하여 송신하게 되는데, 이때 URL 안에 쓰여있는 서버의 도메인명에서 IP 주소를 조사해야 한다. OS에 송신을 의뢰할 때는 도메인명이 아니라 IP주소로 메시지를 받을 상대를 지정해야 하기 때문이다.

TCP/IP

인터넷이나 사내 LAN은 TCP/IP의 개념에 기초하여 만들어졌다. TCP/IP네트워크는 작은 서브넷을 라우터로 연결하여 전체 네트워크를 완성한다. 서브넷은 우리의 주소 체계로는 '삼성동' 같은 동의 단위로 볼 수 있고, '삼성동 22번지'와 같이 번지에 해당하는 번호를 컴퓨터에 할당한 것이 네트워크 주소이다. 이 동에 해당하는 번호를 네트워크 번호라 하고, 번지에 해당하는 번호를 호스트 번호라 하며, 이 두 주소를 합쳐서 IP 주소라고 한다.

액세스 대상의 서버까지 메시지를 운반할 때는 이 IP 주소에 따라 액세스 대상이 있는 곳까지 운반하게 된다. 서브넷을 거쳐 허브로 운반하고 라우터를 거쳐 다음 라우터로 이동하고를 반복하여 최종적으로 상대의 데이터가 도착한다는 원리이며 이것이 TCP/IP와 IP 주소의 기본적인 개념이다.

실제 IP 주소는 32비트의 디지털 데이터로, 8비트(1바이트)씩 점으로 구분하여 10진수로 표기한다. 이 형태가 보통 IP 주소이며 이와 더불어 네트워크 내역을 나타내는 정보를 덧붙이곤 하는데 이 정보를 넷마스크라고 한다.

IP 주소 본체의 표기 방법

10.11.12.13

IP 주소 본체와 같은 방법으로 네트워크를 표기하는 방법

10.11.12.13(IP 주소 본체)/255.255.255.0(넷마스크)

네트워크 번호의 비트 수로 넷마스크를 표기하는 방법

10.11.12.13(IP 주소 본체)/24(넷마스크)

서브넷을 나타내는 주소

10.11.12.0/24 - 호스트 번호 부분의 비트가 모두 0인 것은 각 컴퓨터가 아니라 서브넷 자체를 나타냄

서브넷의 브로드캐스트를 나타내는 주소

10.11.12.255/24 - 호스트 번호 부분의 비트가 모두 1인 것은 서브넷 전체에 대한 브로드캐스트를 나타냄

도메인명과 IP 주소 구분 이유

TCP/IP의 네트워크는 이 IP 주소로 통신 상대를 지정하므로 IP 주소를 모르면 상대에게 메시지를 전달할 수 없다. 이 상황은 전화를 걸때 상대의 전화번호가 필요한 것과 비슷하다. 도메인대신 IP 주소를 사용해도 괜찮겠지만 숫자는 인간 친화적이지 못해 기억하기 어렵다. 반대로 IP 주소 체계를 도메인으로 변경한다면 255바이트까지의 대역폭을 가지게 되므로 라우터에 가중되는 부하가 심해진다. 그리하여 인간은 도메인을 사용하고 이를 IP 주소 체계로 변환하는 과정을 거치는 것이 합리적인데 그 원리가 DNS이다.

Socket 라이브러리와 DNS

Socket 라이브러리는 캘리포니아대학교의 버클리 캠퍼스에서 만든 BSD라는 UNIX OS의 파생 버전으로 개발된 C 언어용 라이브러리이며, 인터넷에서 사용하는 많은 기능이 Socket 라이브러리를 이용하여 개발되었다. 그래서 BSD 이외의 OS나 C 언어 이외의 언어로도 Socket 라이브러리를 모범으로 하여 네트워크용 라이브러리가 만들어졌고, 네트워크용 표준 라이브러리로 자리잡고 있다.

도메인명을 IP 주소로 변환하기 위해서는 DNS 서버에 이를 조회하여야 하는데, 이때 DNS 서버에 대해 클라이언트로 동작하는 것을 DNS 리졸버 또는 단순히 리졸버라고 부른다. 그리고 DNS의 원리를 사용하여 IP 주소를 조사하는 것을 네임 리졸루션(name resolution)이라고 하는데, 이 리졸루션을 실행하는 것을 리졸버(resolver)이다. 리졸버의 실체는 Socket 라이브러리에 들어있는 부품화한 프로그램이다. 고로 도메인명에서 IP 주소를 조사할 때 브라우저는 Socket 라이브러리의 리졸버를 이용한다.

리졸버와 DNS 서버 조회

브라우저와 같은 애플리케이션에서 리졸버를 호출하면 리졸버가 DNS 서버에 조회 메시지를 보내고, DNS 서버에서 응답 메시지가 돌아온다. 이 응답 메시지 속에 IP 주소가 포함되어 있으므로 리졸버는 이를 추출하여 브라우저에서 지정한 메모리 영역에 넣게되며, 브라우저가 웹 서버에 메시지를 보낼때는 이 메모리 영역에서 IP 주소를 추출하여 HTTP의 리퀘스트 메시지와 함께 OS에 건네주어 송신을 의뢰하게 된다. 이때 OS의 내부에 포함된 프로토콜 스택을 호출하여 실행을 의뢰하게 된다.


신고

댓글을 달아 주세요

티스토리 툴바