TCP와 UDP의 차이, 3-way handshake가 뭔지, 각각 언제 쓰는지 간단히 정리했습니다.
공통점
둘 다 OSI 전송 계층(4계층) 프로토콜로, 데이터를 "어느 포트로 보낼지" 정해서 전달하는 역할을 합니다. 차이는 연결을 맺고 전달을 보장하느냐에 있습니다.
TCP: 연결형, 신뢰성 보장
데이터를 보내기 전에 먼저 "연결"을 맺고, 상대가 잘 받았는지 확인해가며 순서대로 전달합니다.
- 연결 설정: 3-way handshake로 연결을 맺은 뒤에만 데이터 전송 시작
- 신뢰성: 패킷이 유실되면 재전송, 순서가 바뀌면 재정렬
- 속도: 확인 절차가 있어서 UDP보다 느림
- 예시: 웹(HTTP), 이메일, 파일 전송처럼 데이터가 하나라도 빠지면 안 되는 경우
UDP: 비연결형, 속도 우선
연결 설정 없이 바로 데이터를 보내버립니다. 상대가 받았는지 확인도, 순서 보장도 하지 않습니다.
- 연결 설정: 없음 - 그냥 보냄
- 신뢰성: 패킷이 유실돼도 재전송 안 함, 순서 보장 안 함
- 속도: 확인 절차가 없어서 TCP보다 빠름
- 예시: 실시간 스트리밍, 온라인 게임, DNS 조회처럼 약간의 유실보다 속도가 더 중요한 경우
3-way handshake란
TCP가 연결을 맺을 때 클라이언트와 서버가 주고받는 3번의 확인 과정입니다.
클라이언트 → 서버: SYN (연결 요청)
서버 → 클라이언트: SYN + ACK (요청 수락 + 나도 연결 요청)
클라이언트 → 서버: ACK (수락 확인)
이 세 번의 확인을 거쳐야 "서로 준비됐다"는 게 확인되고, 그 이후부터 실제 데이터를 주고받습니다. 한쪽만 준비된 상태에서 데이터를 보내면 유실되거나 처리하지 못할 수 있기 때문에 이 절차가 필요합니다.
마무리
TCP는 "느리더라도 정확하게" 보내야 할 때, UDP는 "조금 빠지더라도 빠르게" 보내야 할 때 씁니다. 요즘은 HTTP/3처럼 UDP 기반으로 신뢰성까지 자체 구현해서 속도와 안정성을 동시에 잡으려는 시도도 늘고 있습니다.
'DEV > cs' 카테고리의 다른 글
| [CS] 스택(Stack)이란 - 구조와 활용 예시 (0) | 2026.09.21 |
|---|---|
| [CS] Call By Value vs Call By Reference 차이 (1) | 2026.09.19 |
| [CS] 데드락(Deadlock)이란 - 발생 조건과 해결 방법 (0) | 2026.09.17 |
| [CS] JAVA 가비지 컬렉션(GC)이란 (0) | 2026.09.16 |
| [CS] JAVA 인터페이스 vs 추상클래스, 뭐가 다른가 (0) | 2026.09.15 |