정의
네트워크 소켓(network socket)은 컴퓨터 네트워크 상에서 프로세스 간에 데이터를 송수신하기 위한 소프트웨어 인터페이스이자 논리적인 통신 종착점(endpoint)이다. 운영 체제는 소켓을 통해 애플리케이션이 IP 주소와 포트 번호 등 네트워크 주소 체계를 추상화하여 사용할 수 있게 해 주며, 이를 통해 TCP/IP, UDP, SCTP 등 다양한 전송 프로토콜 위에서 통신을 구현한다.
주요 구성 요소
| 요소 | 설명 |
|---|---|
| 프로토콜 스택 | 소켓은 특정 전송 계층 프로토콜(TCP, UDP 등) 위에 존재한다. 프로토콜에 따라 연결지향(stream) 혹은 비연결형(datagram) 동작을 제공한다. |
| 주소 체계 | IPv4/IPv6 주소와 포트 번호가 결합된 4‑tuple(또는 5‑tuple) : {프로토콜, 로컬 IP, 로컬 포트, 원격 IP, 원격 포트} 로 소켓을 고유하게 식별한다. |
| 파일 디스크립터 | 유닉스·리눅스 계열에서는 소켓이 파일 디스크립터(fd) 형태로 반환되며, read(), write(), select() 등 기존 파일 I/O 함수와 동일하게 다룰 수 있다. |
| 버퍼 | 송신 버퍼와 수신 버퍼가 OS 커널에 할당돼 비동기식 전송·수신을 지원한다. 버퍼 크기는 setsockopt() 로 조정 가능하다. |
종류
-
스트림 소켓 (Stream Socket, SOCK_STREAM)
- TCP 기반, 연결‑지향, 신뢰성 보장, 흐름 제어·혼잡 제어 제공.
- 데이터는 바이트 스트림 형태로 전송되며, 순서가 유지된다.
-
데이터그램 소켓 (Datagram Socket, SOCK_DGRAM)
- UDP 기반, 비연결형, 신뢰성 보장 없음, 순서 보장 안 함.
- 메시지 단위(패킷)로 전송되며, 최대 전송 단위는 MTU에 제한된다.
-
시퀀스 패킷 소켓 (SOCK_SEQPACKET)
- SCTP 등 일부 프로토콜이 지원하는 형태로, 메시지 경계 보존 및 신뢰성을 제공한다.
기본 동작 흐름 (TCP 서버 예시)
- 소켓 생성 –
socket(AF_INET, SOCK_STREAM, 0) - 주소 할당 –
bind()로 로컬 IP·포트 바인딩 - 수신 대기 –
listen()로 연결 요청 큐 설정 - 연결 수락 –
accept()로 클라이언트와의 연결 소켓 반환 - 데이터 교환 –
recv(),send()(또는read(),write()) - 연결 종료 –
close()로 소켓 닫기
주요 API (POSIX)
| 함수 | 용도 |
|---|---|
socket() |
새 소켓 디스크립터 생성 |
bind() |
로컬 주소와 포트에 바인딩 |
listen() |
수신 대기 상태 전환(서버 전용) |
accept() |
클라이언트 연결 요청 수락 |
connect() |
원격 소켓에 연결(클라이언트 전용) |
send(), recv() |
데이터 송수신(바이트 스트림) |
sendto(), recvfrom() |
데이터그램 전송·수신(주소 지정 포함) |
setsockopt(), getsockopt() |
소켓 옵션 설정·조회(예: 타임아웃, 버퍼 크기) |
select(), poll(), epoll() |
소켓 다중 입출력 multiplexing |
플랫폼별 특징
| OS | 특징 |
|---|---|
| Linux | epoll 로 대규모 동시 연결 효율 향상, SO_REUSEPORT 지원, TCP_QUICKACK 등 고급 옵션 제공 |
| Windows | Winsock API (WSAStartup, WSASocket 등) 사용, IOCP(입출력 완료 포트) 로 높은 동시성 지원 |
| macOS / BSD | kqueue 로 이벤트 기반 입출력, SO_NOSIGPIPE 옵션 등 BSD 계열 고유 옵션 존재 |
| 임베디드/RTOS | 경량 TCP/IP 스택(LwIP 등) 에서 제한된 소켓 API 제공, 메모리·CPU 제약 고려 필요 |
보안 고려 사항
- TLS/SSL :
socket()위에 TLS 레이어(예: OpenSSL, mbedTLS)를 적용해 전송 데이터 암호화 및 인증 수행. - 방화벽·패킷 필터링 : IP·포트 기반 접근 제어를 위해 OS 방화벽(iptables, Windows Defender Firewall 등)과 연동.
- 소켓 옵션 :
SO_REUSEADDR,SO_REUSEPORT남용 시 포트 스키핑 위험,SO_LINGER로 연결 종료 시 데이터 폐기 정책 제어. - 시스템 콜 검증 : 권한 상승 공격을 방지하기 위해 입력 값(주소·포트 등)을 철저히 검증하고, 비정상적인 소켓 생성·바인딩을 제한.
활용 사례
- 웹 서버·클라이언트 : HTTP/HTTPS 프로토콜 구현에 TCP 스트림 소켓 사용.
- 실시간 스트리밍 : RTP/RTSP 등 UDP 데이터그램 소켓을 활용해 저지연 전송.
- P2P·분산 시스템 : NAT 통과를 위해 STUN/TURN 서버와 결합한 UDP 소켓 활용.
- IoT 디바이스 : 경량 TCP/IP 스택 위에서 UDP 소켓으로 센서 데이터 전송.
참고 표준
- RFC 793 – TCP (Transmission Control Protocol)
- RFC 768 – UDP (User Datagram Protocol)
- RFC 4960 – SCTP (Stream Control Transmission Protocol)
- POSIX.1-2008 – Sockets API 표준
- IEEE 802.3 – 이더넷 물리 계층 (소켓이 작동하는 네트워크 매체)
요약
네트워크 소켓은 운영 체제가 제공하는 추상화된 통신 인터페이스로, IP 주소·포트 번호를 이용해 프로세스 간 데이터를 교환한다. TCP 기반 스트림 소켓은 신뢰성·연결지향성을 제공하고, UDP 기반 데이터그램 소켓은 저지연·비연결성을 특징으로 한다. POSIX·Winsock 등 표준 API를 통해 생성·제어되며, 다양한 운영 체제와 프로토콜 스택에 적용 가능하다. 보안·성능 최적화를 위해 TLS, 소켓 옵션, 이벤트 기반 입출력 메커니즘 등을 적절히 활용한다.