TCP, UDP와 WebSocket
TCP(Transmission Control Protocol)
클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 연결 지향적 프로토콜
데이터가 순서대로 에러 없이 전달되도록 보장한다. 데이터를 패킷으로 나누어 전송하며, 각 패킷은 목적지에서 재조립된다. TCP는 데이터의 도착을 확인하고, 손실된 데이터는 재전송을 요청한다.

TCP 특징
- 연결 지향적
- 패킷을 전송하기 위한 논리적 경로 배정하는 가상 회선 서비스
- 3-way handshaking 과정을 통해 연결 설정, 4-way handshaking 과정을 통해 연결 해제
- 패킷을 추적 및 관리
- 흐름제어 및 혼잡제어
- 흐름 제어
데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
- 혼잡제어
네트워크 내 패킷 수가 넘치게 증가하지 않도록 방지
- 높은 신뢰성 보장
- UDP보다 느림
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
- 전이중: 전송이 양방향으로 동시에 일어남
- 점대점: 각 연결이 정확히 2개의 종단점을 가짐
웹 브라우징, 이메일, 파일 전송과 같이 연속성보다 신뢰성이 중요한 어플리케이션에서 주로 사용된다.
UDP(User Datagram Protocol)
클라이언트와 서버의 데이터그램이 각각 다른 경로로 전송되는 비연결성 프로토콜
연결을 위해 할당되는 논리적인 경로가 없으며, 최소한의 프로토콜 매커니즘을 가진다.
UDP는 전송된 데이터의 도착을 보장하지 않으며, 순서대로 도착할 것이라는 보장도 없다. TCP보다 통신 지연이 적은 빠른 데이터 전송이 가능하다.

UDP 특징
- 비연결성
- 독립적인 관계를 지니는 패킷인 데이터그램 전송
- 데이터의 전송 순서가 바뀔 수 있다.
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차가 없다.
- TCP의 3-way handshaking과 같은 과정 없음
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
- 낮은 신뢰성
- 흐름 제어가 없어 제대로 전송되었는지, 오류가 없는지 확인할 수 없음
- TCP보다 빠름
- 1:1, 1:N, N:N 통신 가능
실시간 스트리밍, 온라인 게임, VolP(음성 통신)과 같이 신뢰성보다 속도가 중요한 서비스에서 주로 사용된다.
| 프로토콜 종류 | TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) |
|---|
| 연결 방식 | 연결형 서비스 | 비연결형 서비스 |
| 패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
| 전송 순서 보장 | O | X |
| 수신 여부 확인 | O | X |
| 흐름, 혼잡 제어 기능 | O | X |
| 통신 방식 | 1:1 통신 | 1:1, 1:N, N:N 통신 |
| 신뢰성 | 높음 | 낮음 |
| 속도 | 느림 | 빠름 |
WebSocket
웹 브라우저와 서버 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하기 위한 프로토콜
웹 소켓 연결을 위해 클라이언트와 서버 간 특정 HTTP 기반 핸드셰이크가 교환된다. 교환에 성공하면 이전에 설정된 TCP 연결을 사용하여 응용 프로그램 계층 프로토콜이 HTTP에서 웹소켓으로 업그레이드된다.
업그레이드가 되면 HTTP는 완전히 무시되고 웹 소켓 연결이 닫힐 때 까지 두 끝점에서 웹 소켓 프로토콜을 사용하여 데이터를 주고 받을 수 있다.

WebSocket 특징
- 프레임으로 구성된 메시지라는 논리적 단위로 송,수신한다.
- HTTP와 달리 stateful한 프로토콜
- HTTP는 stateless하기 때문에 서버에 변경 사항이 생겨도 클라이언트에서 요청을 하지 않으면 변경 사항이 적용되지 않음
- 한번의 연결로 서버와 지속적인 연결이 가능해 불필요한 커넥션 오버헤드(HTTP, TCP 연결 트래픽 등)를 줄일 수 있다.
- WebSocket은 지속적으로 connection을 유지하기 때문에 실시간으로 변경 사항이 적용됨
- connection을 항상 유지해야 하기 때문에 트래픽이 많은 경우 서버에 부담
- 네트워크 과부하를 줄이고 애플리케이션의 반응성을 높일 수 있다.
- HTTP 헤더 크기를 byte 수준으로 압축할 수 있어 오버헤드가 적다.
- HTTP와 달리 정해진 형식이 없어 sub protocol을 사용해 주고 받는 메세지의 형태의 약속이 필요하다.
- STOMP(Simple Text Oriented Message Protocol)가 주로 사용된다.
SNS, 실시간 게임, 주식 또는 증권 거래 처럼 안전하고 빠른 데이터 전송이 필요한 곳에 적합하다.
참고
TCP/UDP와 WebSocket (웹 소켓)
WebSocket VS Server-Sent Events
[개발상식] 12. 프로토콜이란? TCP/IP, HTTP, Web Socket 각각에 대한 기본과 그 흐름
TCP와 UDP의 특징 및 차이점 알아보기
[TCP/UDP] TCP와 UDP의 특징과 차이