1. 프로토콜 스택의 내부 구성

5089BD01-D77D-40D9-9378-9F7258F4AAD4.jpeg

OS 에 내장된 네트워크 제어용 소프트웨어(프로토콜 스택) 와 네트워크용 하드웨어(LAN 어댑터) 가 브라우저에서 받은 메시지를 송출한다.

가장 위에 있는 네트워크 애플리케이션은 네트워크 기능을 하는 애플리케이션이다. 모든 애플리케이션은 자체적인 네트워크 통신 기능이 없다. 네트워크 기능은 없지만 네트워크 통신을 하기 위해서 OS 에 의뢰하기 위해 Socket 라이브러리를 사용한다.

Socket 라이브러리를 사용하면 OS 의 프로토콜 스택에 의뢰를 보내게 된다. 프로토콜 스택은 HTTP 통신을 하기 위한 프로토콜들의 집합이다. TCP 프로토콜 또는 UDP 프로토콜의 방식과 함께 IP 프로토콜을 사용한다. TCP 와 UDP 는 각각의 특징이 있어 상황에 따라 선택하여 사용할 수 있지만, 일반적으로 브라우저나 메일 등의 애플리케이션이 데이터를 송수신할 때에는 TCP, DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송수신할 때에는 UDP 를 사용한다. IP 프로토콜은 잘게 나누어진 HTTP 메시지인 패킷을 통신 상대까지 운반하는 역할을 한다.

LAN 드라이버는 하드웨어인 LAN 어댑터를 제어한다. LAN 어댑터는 케이블에 대해 신호를 송수신하는 동작을 수행한다.

2. 소켓의 실체는 통신 제어용 제어 정보

두 PC 간의 통신의 출입구 역할을 하는 소켓 은 사실 개념적인 존재이다. 소켓을 생성하고 연결을 시도할 때 입력했던 정보들을 보관하고 이 정보들을 프로토콜 스택이 통신을 할 때 사용한다. 대표적으로 통신 상대의 IP, PORT, 현재 통신 동작의 진행 상태 등이 있다.

프로토콜 스택은 이 제어 정보를 참조하면서 동작한다. 데이터를 송신할 때 어느 IP 의 PORT 에 전송해야 하는지, 서버로부터 응답이 오지 않는다면 이 응답을 언제까지 기다려야 할지 등의 제어 정보가 기록되어 있다.

3. Socket 을 호출했을 때의 동작

0AA9FD24-BCB4-4370-8ACC-9B80C854484E.jpeg

socket() 을 호출하면 통신의 제어 정보를 담기 위한 메모리 영역을 확보한다. 현재는 소켓이 만들어진 직후이므로 통신 진행 상태는 초기 상태로 기록되어 있다.