Finn의 개발블로그
1-2. 웹 서버의 IP주소를 DNS서버에 조회한다 본문
1. IP 주소의 기본
- 브라우저는 메시지를 네트워크에 송출하는 기능은 없으므로 OS에 의뢰하여 송신합니다.
- 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 주소가 필요한데 이 것은 컴퓨터에 미리 설정 되어 있습니다.
'Network' 카테고리의 다른 글
2-1. 소켓을 작성한다. (0) | 2019.04.27 |
---|---|
1-4. 프로토콜 스택에 메시지 송신을 의뢰하다 (0) | 2019.04.25 |
1-3. 전 세계의 DNS서버가 연대한다 (0) | 2019.04.16 |
1-1. HTTP 리퀘스트 메시지를 작성한다 (0) | 2019.04.04 |