Socket 통신 (Socket Communication)
Socket 통신 (Socket Communication)
네트워크상의 두 프로세스 간 양방향 통신을 위한 종단점(Endpoint)으로, IP 주소와 포트 번호의 조합으로 식별되며, 운영체제가 제공하는 API를 통해 TCP/UDP 기반의 프로세스 간 통신(IPC)을 구현하는 인터페이스
목적: 프로세스 간 네트워크 통신, 클라이언트-서버 모델 구현, 분산 시스템 간 데이터 교환
특징: IP+Port 조합으로 소켓 식별, 운영체제 커널 자원, 파일 디스크립터로 관리, TCP/UDP 선택 가능, 양방향 통신(Full-Duplex)
소켓 유형
- •스트림 소켓(SOCK_STREAM): TCP 기반, 연결 지향, 신뢰성, 순서 보장, 바이트 스트림
- •데이터그램 소켓(SOCK_DGRAM): UDP 기반, 비연결, 비신뢰, 메시지 경계 보존
- •Raw 소켓(SOCK_RAW): IP 레벨 직접 접근, 프로토콜 구현용, ICMP/패킷 캡처
소켓 API (TCP 서버/클라이언트)
- •서버: socket() → bind() → listen() → accept() → recv()/send() → close()
- •클라이언트: socket() → connect() → send()/recv() → close()
- •socket(): 소켓 생성(도메인, 타입, 프로토콜 지정)
- •bind(): 소켓에 IP 주소와 포트 번호 바인딩
- •listen(): 연결 대기 큐 설정(backlog 크기)
- •accept(): 클라이언트 연결 수락, 새 소켓 반환
- •connect(): 서버에 연결 요청(3-way Handshake 트리거)
- •send()/recv(): 데이터 송수신
- •close(): 소켓 종료(4-way Handshake 트리거)
소켓 API (UDP): socket() → bind() → recvfrom()/sendto() → close(), connect 불필요
소켓 옵션: SO_REUSEADDR(주소 재사용), SO_KEEPALIVE(연결 유지 확인), TCP_NODELAY(Nagle 비활성화), SO_RCVBUF/SO_SNDBUF(버퍼 크기)
I/O 모델: Blocking I/O(기본, 호출 시 대기), Non-Blocking I/O(즉시 반환), I/O Multiplexing(select/poll/epoll, 다수 소켓 감시), Async I/O(커널 완료 통보)
장점: 범용적 네트워크 프로그래밍, 저수준 제어 가능, 언어/플랫폼 독립, 양방향 실시간 통신
단점: 저수준 API(직접 프로토콜 처리 필요), 연결 관리/에러 처리 복잡, 직렬화 별도 구현
적용사례: 웹 서버(Apache, Nginx), 채팅 서버, 게임 서버, DB 연결, RPC 프레임워크
비교: Socket(양방향/저수준/TCP·UDP/지속연결) vs HTTP(요청-응답/고수준/TCP/비연결), Socket(저수준/직접 프로토콜 구현) vs WebSocket(HTTP 업그레이드/프레임 기반/웹 표준)
연관: TCP, UDP, WebSocket, I/O 멀티플렉싱, epoll, 네트워크 프로그래밍