STORY 01 소켓을 작성한다
1. 프로토콜 스택의 내부 구성

- 네트워크 어플리케이션에서 OS 에 통신을 요청하면 다음과 같은 흐름으로 처리된다.
- 어플리케이션(Socket 라이브러리) → OS(프로토콜 스택) → 드라이버 소프트웨어 → 하드웨어
- TCP : 브라우저나 메일 등의 일반적인 어플리케이션이 데이터를 송수신하는 경우
- UDP : DNS 서버에 대한 조회 등의 짧은 제어용 데이터를 송수신하는 경우
- IP 프로토콜은 패킷 송수신 동작을 제어하는 부분이다.
- 인터넷 상에서 데이터를 송수신할 때
패킷
이라는 작은 단위의 형태로 운반한다.
- ICMP : 패킷을 운반할 때 발생하는 오류를 통지하거나 제어용 메시지를 통지하는 경우
- ARP : IP 주소에 대응하는 이더넷의 MAC 주소를 조사하는 경우
- LAN 드라이버는 LAN 어댑터의 하드웨어를 제어한다.
- LAN 어댑터는 케이블에 대해 신호를 송수신하는 동작을 수행한다.
2. 소켓의 실체는 통신 제어용 제어 정보
- 소켓은 물리적으로 존재하는 것이 아닌 개념적인 정보를 의미한다.
- 소켓 = 송수신하기 위한 제어 정보
- 통신 상대의 IP, PORT, 통신 진행 상태, 응답 수신 여부, 송신 후 경과 시간 등
- 프로토콜 스택은 소켓에 기록되 제어 정보를 참조하며 진행한다.
3. Socket 을 호출했을 때의 동작
- 소켓을 생성한다.
- 소켓 한 개 분량의 메모리 영역을 확보한다.
- 초기 상태의 제어 정보를 기록한다.
- 디스크립터를 반환한다.
- 네트워크 어플리케이션은 프로토콜 스택에게 디스크립터를 전달하여 송수신동작을 수행한다.
STORY 02 서버에 접속한다
1. 접속의 의미
- 클라이언트 측의 소켓에 서버 제어 정보(IP, PORT 등) 을 기록한다.
- 서버 측의 소켓에 클라이언트 제어 정보를 기록한다.
- 프로토콜 스택이 송신하여 서버측에서 받은 정보를 기록한다.
- 데이터 송수신 시 해당 데이터를 일시적으로 저장하기 위한 버퍼 메모리를 확보한다.
- 위의 모든 동작이 접속 동작에 해당한다.