OS 에 내장된 네트워크 제어용 소프트웨어(프로토콜 스택) 와 네트워크용 하드웨어(LAN 어댑터) 가 브라우저에서 받은 메시지를 송출한다.
가장 위에 있는 네트워크 애플리케이션은 네트워크 기능을 하는 애플리케이션이다. 모든 애플리케이션은 자체적인 네트워크 통신 기능이 없다. 네트워크 기능은 없지만 네트워크 통신을 하기 위해서 OS 에 의뢰하기 위해 Socket 라이브러리를 사용한다.
Socket 라이브러리를 사용하면 OS 의 프로토콜 스택에 의뢰를 보내게 된다. 프로토콜 스택은 HTTP 통신을 하기 위한 프로토콜들의 집합이다. TCP 프로토콜 또는 UDP 프로토콜의 방식과 함께 IP 프로토콜을 사용한다. TCP 와 UDP 는 각각의 특징이 있어 상황에 따라 선택하여 사용할 수 있지만, 일반적으로 브라우저나 메일 등의 애플리케이션이 데이터를 송수신할 때에는 TCP
, DNS 서버에 대한 조회 등에서 짧은 제어용 데이터를 송수신할 때에는 UDP
를 사용한다. IP 프로토콜은 잘게 나누어진 HTTP 메시지인 패킷을 통신 상대까지 운반하는 역할을 한다.
LAN 드라이버는 하드웨어인 LAN 어댑터를 제어한다. LAN 어댑터는 케이블에 대해 신호를 송수신하는 동작을 수행한다.
두 PC 간의 통신의 출입구 역할을 하는 소켓
은 사실 개념적인 존재이다. 소켓을 생성하고 연결을 시도할 때 입력했던 정보들을 보관하고 이 정보들을 프로토콜 스택이 통신을 할 때 사용한다. 대표적으로 통신 상대의 IP, PORT, 현재 통신 동작의 진행 상태 등이 있다.
프로토콜 스택은 이 제어 정보를 참조하면서 동작한다. 데이터를 송신할 때 어느 IP 의 PORT 에 전송해야 하는지, 서버로부터 응답이 오지 않는다면 이 응답을 언제까지 기다려야 할지 등의 제어 정보가 기록되어 있다.
socket() 을 호출하면 통신의 제어 정보를 담기 위한 메모리 영역을 확보한다. 현재는 소켓이 만들어진 직후이므로 통신 진행 상태는 초기 상태로 기록되어 있다.