Socket Endpoint

소켓은 프로세스와 커널 네트워크 스택을 잇는 끝점이다

애플리케이션은 파일 디스크립터처럼 소켓을 다루지만, 실제 주소/포트/버퍼/상태 관리는 커널 네트워크 스택이 맡는다.

프로세스는 fd 또는 handle로 소켓을 읽고 쓴다.
listening socket은 로컬 수신 지점을 열어 둔다.
connected socket은 양쪽 주소와 포트를 모두 가진다.
Application Process read, write, send, recv 호출
File Descriptor server_fd, client_fd처럼 정수 핸들로 참조
Socket API 언어는 달라도 핵심 흐름은 거의 같다
Listening socket 아직 특정 클라이언트와 묶이지 않음 서버가 “여기로 접속을 받겠다”라고 커널에 등록한 상태 TCP, local=192.0.2.10:8080
Connected socket 개별 TCP 연결을 나타냄 accept()가 반환하며, 이 fd로 해당 클라이언트와만 통신 TCP, 192.0.2.10:8080 ↔ 198.51.100.24:52431
Kernel TCP/IP Stack 송수신 버퍼, 상태 머신, 재전송, 흐름 제어
IP + Port 네트워크에서 도착한 패킷을 올바른 소켓으로 demux
NIC / Network 프레임과 패킷은 아래 계층에서 이동
SOCK_STREAM TCP 연결 지향, 순서 보장, 바이트 스트림
SOCK_DGRAM UDP 비연결, 메시지 단위 데이터그램
SOCK_RAW Raw IP ICMP 같은 낮은 수준 프로토콜 실험에 사용