URL 안에 쓰여있는 서버의 도메인명에서 IP주소를 조사해야 합니다. 그 이유는 OS에 송싱을 의뢰 할때는 도메인명이 아니라 IP주소로 메시지를 받을 상대를 지정해야 하기 떄문입니다
HTTP 메시지를 만드는 동작의 다음은 도메인명에서 IP 주소를 조사 해야 합니다.
TCP/IP는 서브넷이라는 작은 네트워크를 라우터로 접속하여 전체 네트워크가 만들어진다고 생각할 수 있습니다.
서브넷은 허브에 몇 대의 PC가 접속된 것이라고 생각하면 됩니다. 서브넷을 라우터에 연결하면 네트워크 전체가 완성됩니다
여기 'oo동oo번지' 라는 형태로 네트워크의 주소를 할당합니다. 동은 서브넷에 할당하고 네트워크 번호라고 하고 , 번지는 컴퓨터에 할당한 것이 호스트 번호입니다. 이 두 주소를 합쳐 IP 주소라고 합니다.
메시지를 운반할 때는 이 IP 주소에 따라 액세스 대상이 어디있는지 판단하고 운반합니다
송신측이 메시지를 보내면 서브넷 안에 있는 허브가 운반하고, 송신측에서 가장 가까운 라우터까지 도착합니다, 라우터가 메시지를 보낸 상대를 확인하여 다음 라우터를 판단하고, 거기에 보내도록 지시하여 송신 동작을 싱핼한 후 다시 서브넷의 허브가 라우터까지 메시지를 보내는 동작을 반복하면 최종적으러 상대의 데이터가 도착합니다.
10.11.12.13
실제 IP 주소는 32디지털 데이터로 이렇게 나타낸다
이것만으로는 어느 부분이네트워크 번호이고 또는 호스트 번호 인지 알 수 없습니다.
IP 주소의 규칙에는 네트워크 번호와 호스트 번호의 두가지를 합쳐서 32비트로 한다는 것만 결정되어 있을 뿐 내역은 결정 되어있지 않기 때문입니다.
네트워크를 구축할 때 사용자가 직접 내역을 결정 할 수 있습니다.
이 내역을 나타내는 정보를 필요에 따라 IP주소에 덧붙이는데, 이 정보를 '넷마스크' 라고 합니다
IP 주소에서 32비트 부분의 디지털 데이터이며, 왼쪾에 1이 나열되고 오른쪾에 0이 나열된 값입니다
넷마스크가 1인 부분은 네트워크 번호를 나타내고, 넷마스크가 0인 부분은 호스트 번호를 나타냅니다
호스트 번호 부분이 모두 0인 IP 주소는 서브넷 자체, 모두 1인 부분은 서브넷에 있는 기기 전체에 패킷을 보내는 브로드캐스트 입니다
2. 도메인명과 IP 주소를 구분하여 사용하는 이유
TCP/IP의 네트워크는 이 IP 주소로 통신 상대를 지정하므로 IP 주소를 알아야 상대에게 메시지를 전할 할수 있습니다.
URL안에 IP 주소를 써도 작동하지만 기억하기 어렵기 때문에 도메인 명을 쓰는 것이 좋습니다
IP 주소를 그만두고 이름으로 상대를 지정하면 좋다고 생각하지만 도메인 명은 수십 바이트에서 255바이트 까지의 문자를 취급해야 되기떄문에 그만큼 라우터가 부하되어 데이터를 운반하는 동작에 더 많은 시간이 걸리며 네트워크의 속도가 느려집니다.
이름을 알면 IP 주소를 알 수 있다거나 IP 주소를 알면 이름을 알 수 있다는 원리를 사용하여 양쪽의 차이를 해소하면 모두 좋아지는데, 그 원리가 DNS입니다
3. Socket 라이브러리가 IP 주소를 찾는 기능을 제공한다.
가장 가까운 DNS 서버에 'www.lab.cyber.co.kr'이라는 서버의 IP 주소를 가르쳐 주세요 라고 하면 그 서버의 IP 주소는 xxx.xxx.xxx.xxx 입니다. 가르쳐 줍니다.
DNS 서버에 조회한다는 것은 DNS 서버에 조회 메시지를 보내고, 거기에서 반송되는 응답 메시지를 받는다는 것입니다. 이것은 DNS 서버에 대해 클라이언트로 동작한다고도 말할 수 있습니다.
DNS 클라이언트에 해당하는 것을 DNS 리졸버 또는 단순히 리졸버라고 부릅니다. 그리고 DNS의 원리를 사용하여 IP 주소를 조사하는 것을 네임 리졸루션, 이라고 하는데, 이 리졸루션을 싱행하는 것이 리졸버입니다.
리볼버의 실체는 Socket 라이브러리에 들어 있는 프로그램 중 하나이다.
Socket 라이브러리는 네트워크의 기능을 호출하기 위한 프로그램의 부품입니다.
4. 리졸버를 이용하여 DNS 서버를 조회한다.
브라우저 등의 애플리케이션 프로그램을 만들 때 리졸버의 프로그램명과 웹 서버의 이름을 쓰기만 하면 리졸버를 호출할 수 있습니다.
리졸버를 호출하면 리졸버가 DNS 서버에 조회 메시지를 보내고, DNS 서버에서 응답 메시지가 돌아옵니다.
응답 메시지 속에 IP 주소가 포함되어 있으므로 리졸버는 이것을 추출하여 브라우저에서 지정한 메모리 영역에 써넣습니다.
브라우저가 웹 서버에 메시지를 보낼때는 이 메모리 영역에서 IP 주소를 추출하여 HTTP의 리퀘스트 메시지와 함께 OS에 건네주어 송신을 의뢰 합니다.
5. 리졸버를 내부의 작동.
네트워크 애플리케이션(브라우저)이 리졸버를 호출하면 제어가 리졸버의 내부로 넘어갑니다
Socket 라이브러리의 내용에 있는 리졸버가 움직이기 시작하여 메시지를 만듭니다.
DNS의 사양에 따라'www.lab.cyber.co.kr 이라는 서버의 IP 주소를 가르쳐 주세요'라는 의미의 데이터를 만들고 DNS 서버에 보냅니다
메시지 송신 동작은 리졸버가 스스로 실행하는 것이 아니라 OS의 내부에 포함된 프로토콜 스택을 호출하여 실행을 의뢰합니다. 그 이유는 리졸버도 브라우저와 같이 네트워크에 대해 데이터를 송 수신하는 기능이 없기 때문입니다.
프로토콜 스택이 메시지를 보내는 동작을 실행하여 LAN 어댑터를 통해 메시지가 DNS 서버를 향해 송신됩니다.
액세스 대상의 웹 서버가 DNS 서버에 등록되어 있으면 답이 발견되므로 답을 응답 메시지에 써서 클라이언트에게 반송합니다.
메시지는 네트워크를 통해 클라이언트측에 도착하고, 프로토콜 스택을 경유하여 리졸버에게 건네져서 리졸버가 내용을 해독한 후 여기에서 IP 주소를 추출하여 애플레케이션에 IP 주소를 겁네줍니다.
실제로 리졸버를 호출할 때 지정한 메모리 영역에 IP 주소를 저장합니다
리졸버의 동작이 끝나고 제어가 애플리케이션에게 돌아오고 메모리 영역에 저장된 IP 주소를 필요할 떄 추출할 수 있으므로 IP 주소가 애플리케이션에게 건네집니다.
DNS 서버에 메시지를 송신할 때도 DNS 서버의 IP 주소가 필요한데 이 것은 컴퓨터에 미리 설정 되어 있습니다.