https://velog.io/@orcasuit/Datagram-Socket-vs-Stream-Socket
Datagram Socket(UDP)
- 프로토콜: UDP
- 연결 방식: 비연결형
- 데이터 전송 단위: 데이터 그램(개별적인 패킷 단위 전송)
- 신뢰성: 보장하지 않음(데이터 순서 보장 X, 재전송 X, 손실 허용으로 복구 필요 없음)
- 속도: 빠름 (헤더가 작고 연결 유지 필요 없기 때문)
- 서버와 클라이언트 사이에 전용 및 엔드투엔드 채널이 없음.
→ 비연결 지향, 신뢰성 0, 속도 빠름
장점
빠른 속도, 단순한 구조, 실시간 성능이 중요할 때 유리함(스트리밍, 게임, VoIP)
단점
신뢰성이 없다(패킷 손실 및 중복 가능성 있음), 애플리케이션에서 오류 처리 필요
사용 예시
DNS(도메인 이름 해석)
스트리밍 서비스(유튜브, 치지직 등)
실시간 게임
Stream Socket(TCP)
- 프로토콜: TCP
- 연결 방식: 연결형
- 데이터 전송 단위: 바이트 스트림(연속된 데이터 흐름)
- 신뢰성: 보장됨(데이터 순서 보장, 오류 검사 및 재전송, 흐름/혼잡 제어, 손실 비허용으로 복구 시간 있음)
- 속도: 느릴 수 있음(연결 설정이나 오류 처리에 따라 다름)
→ 연결 지향, 신뢰성 있음, 속도 느릴수 있음(오버헤드 존재)
장점
데이터 전송의 순서 보장, 패킷 손실이나 중복 없음, 복잡한 재전송 / 재조립 시스템 처리
단점
느릴 수 있다(연결 설정, 오류처리 등의 오버헤드로), 실시간성이 떨어질 수 있음
사용 예시
웹 (HTTP, HTTPS)
이메일(SMTP, IMAP)
파일 전송(FTP)
차이점
연결의 유무, 데이터 전송의 신뢰성, 속도와 효율성에 따라 다릅니다.
항목 | Datagram Socket (UDP) | Stream Socket (TCP) |
---|---|---|
프로토콜 | UDP | TCP |
연결 필요 여부 | 비연결형 | 연결형 |
데이터 단위 | 메시지(데이터그램) | 바이트 스트림 |
순서 보장 | 없음 | 있음 |
신뢰성 | 낮음 | 높음 |
속도 | 빠름 | 상대적으로 느림 |
사용 예 | DNS, VoIP, 게임 | HTTP, FTP, Email |
예시로 이해하기(이해되지 않으면, 재미삼아 읽어보세요)
스트림 소켓은 전화 통화와 같습니다.
한쪽에서 전화를 걸면 다른 쪽에서 전화를 받고, 서로 인사(TCP에서 SYN/ACK)한 후 정보를 교환합니다.
모든 작업이 끝나면 작별 인사(TCP에서 FIN / ACK)를 합니다. 한쪽에서 작별 인사를 받지 못하면 예상치 못한 상황이기 때문에 일반적으로 다른 쪽에게 다시 전화를 겁니다. 일반적으로 클라이언트는 서버에 다시 연결합니다. 데이터가 보낸 순서와 다른 순서로 도착하지 않을 것이라는 보장이 있으며, 데이터가 손상되지 않을 것이라는 합리적인 보장도 있습니다.
반면, 데이터그램 소켓은 수업 시간에 노트를 전달하는 것과 같습니다.
노트를 전달하는 사람 바로 옆에 있지 않은 상황을 생각해 보세요. 노트는 사람에서 사람으로 전달될 것입니다. 목적지에 도착하지 못할 수도 있고, 도착하기 전에 내용이 변경될 수도 있습니다. 같은 사람에게 노트 두 개를 전달하면 노트가 의도하지 않은 순서로 도착할 수 있습니다. 노트가 교실에서 이동하는 경로가 다르거나, 한 사람이 다른 사람보다 노트를 전달하는 속도가 다를 수 있기 때문입니다.
정보를 순서대로, 그리고 손상 없이 유지하는 것이 중요할 때 스트림 소켓을 사용합니다. 파일 전송 프로토콜이 좋은 예입니다. 내용이 무작위로 섞여 손상된 파일을 다운로드하는 것은 바람직하지 않습니다.
순서보다 시기적절한 전달이 더 중요한 경우(VoIP나 게임), 스트림의 높은 오버헤드를 원하지 않는 경우(이것이 DNS가 기본적으로 데이터그램 프로토콜인 이유입니다. 이를 통해 서버는 많은 요청에 동시에 매우 빠르게 응답할 수 있습니다), 또는 데이터가 목적지에 도달하는지 여부가 그다지 중요하지 않은 경우에 데이터그램 소켓을 사용합니다.
VoIP / 게임 사례를 좀 더 자세히 설명하자면, 해당 프로토콜에는 자체적인 데이터 정렬 메커니즘이 포함되어 있습니다.
하지만 패킷 하나가 손상되거나 손실된 경우, 스트림 프로토콜(일반적으로 TCP)이 재전송 요청을 보낼 때까지 기다릴 시간이 없습니다. 신속하게 복구해야 하기 때문입니다. TCP는 복구하는 데 최대 몇 분이 걸릴 수 있지만, 게임이나 VoIP와 같은 실시간 프로토콜의 경우 3초도 용납할 수 없습니다. UDP와 같은 데이터그램 프로토콜을 사용하면 소프트웨어가 손실된 데이터를 무시하거나 TCP보다 빨리 재요청하여 이러한 손실에서 매우 빠르게 복구할 수 있습니다.
VoIP는 손실된 데이터를 무시하기에 적합한 방식입니다. 한쪽은 짧은 간격만 들을 수 있는데, 이는 수신 상태가 좋지 않을 때 휴대폰으로 통화할 때 발생하는 현상과 유사합니다. 게임 프로토콜은 종종 좀 더 복잡하지만, 일반적으로 손실된 데이터를 무시하거나(이후 수신된 데이터가 손실된 데이터를 대체하는 경우), 손실된 데이터를 다시 요청하거나, 클라이언트의 상태가 서버의 상태와 동기화되도록 전체 상태 업데이트를 요청합니다.
'크래프톤 정글(C언어 WEEK 5 ~ 8)' 카테고리의 다른 글
MIME Type (1) | 2025.05.06 |
---|---|
Web server (웹 서버) (0) | 2025.05.06 |
파일 디스크립터(TCP/IP 측면) (0) | 2025.05.06 |
BSD 소켓(소켓) (0) | 2025.05.06 |
클라이언트 - 서버 모델 (0) | 2025.05.06 |