Datagram Socket (SOCK_DGRAM)과 Stream Socket (SOCK_STREAM)은 소켓 통신에서 사용되는 두 가지 주요 타입이며, 각각 UDP와 TCP 프로토콜에 대응된다.
1. Stream Socket (SOCK_STREAM)
- 프로토콜: TCP (Transmission Control Protocol)
- 연결방식: 연결지향적 (Connection-oriented)
- 데이터 전송 방식: 연속적인 바이트 스트림으로 데이터 전송
- 신뢰성: 패킷 손실 없음, 순서 보장, 흐름제어, 혼잡 제어 제공
- 용도: 웹 브라우징(HTTP), 메일(SMTP), 파일 전송(FTP), SSH 등
동작 흐름 (3-way handshake)
- 클라이언트가 connect() 호출 → SYN
- 서버가 accept() → SYN-ACK
- 클라이언트가 ACK → 연결 성립
- 이후 read() / write()로 데이터 송수신
2. Datagram Socket (SOCK_DGRAM)
- 프로토콜: UDP (User Datagram Protocol)
- 연결 방식: 비연결형 (Connectionless)
- 데이터 전송 방식: 독립된 패킷(데이터그램) 단위로 전송
- 신뢰성: 보장 없음 (순서, 손실, 중복 발생 가능)
- 용도: 실시간 스트리밍, VoIP, DNS, 온라인 게임 등 지연 민감한 서비스
동작 흐름
- sendto()와 recvfrom()을 통해 직접 상대 주소를 지정하여 데이터 전송
- connect() 없이도 전송 가능 (연결 설정 없음)
Stream vs Datagram 비교 요약
항목 | Stream Socket (TCP) | Datagram Socket (UDP) |
---|---|---|
소켓 타입 | SOCK_STREAM |
SOCK_DGRAM |
연결 여부 | 연결 필요 (connect() 사용) |
비연결 (주소만 있으면 전송 가능) |
신뢰성 | 있음 (순서 보장, 손실 없음) | 없음 (순서 보장 없음, 손실 가능) |
전송 단위 | 바이트 스트림 | 개별 메시지(데이터그램) |
전송 속도 | 느림 (오버헤드 있음) | 빠름 (오버헤드 적음) |
사용 예시 | HTTP, FTP, SSH | DNS, DHCP, VoIP, 게임 |
'Deep Dive > CS' 카테고리의 다른 글
[CS] TCP/IP 4계층 모델 (0) | 2025.05.06 |
---|---|
[CS] CGI / WebServer / MIME Type (1) | 2025.05.06 |
[CS] 소켓(socket, bind, listen, accept, connect, close) (0) | 2025.05.06 |
[CS] 클라이언트-서버 모델 (Client-Server Model) (0) | 2025.05.06 |
[CS] 파일 디스크립터 (file descriptor) (0) | 2025.05.06 |