✅들어가면서
네트워크를 공부하다 보면 IP 주소 다음으로 자주 만나는 개념이 있다. 바로 TCP와 UDP다.
둘 다 데이터를 주고받기 위해 사용하는 전송 계층 프로토콜이다. 하지만 성격은 꽤 다르다.
TCP는 정확하고 안정적인 전달을 중요하게 생각한다.
UDP는 빠르고 단순한 전달을 중요하게 생각한다.
예를 들어 택배를 보낸다고 생각해보자.
TCP는 택배를 보낸 뒤 상대방이 잘 받았는지 확인하고, 중간에 분실되면 다시 보내는 방식에 가깝다. 반면 UDP는 일단 빠르게 보내는 데 집중하고, 상대방이 받았는지 매번 꼼꼼하게 확인하지 않는 방식에 가깝다.
이 차이를 이해하면 웹사이트 접속, 파일 다운로드, 영상 스트리밍, 온라인 게임이 왜 서로 다른 방식으로 동작하는지 이해할 수 있다.
⭐ TCP란?
TCP는 Transmission Control Protocol의 약자다.
TCP의 핵심은 신뢰성 있는 데이터 전송이다.
여기서 신뢰성 있다는 말은 데이터를 그냥 보내기만 하는 것이 아니라, 다음과 같은 것들을 챙긴다는 뜻이다.
| TCP가 챙기는 것 | 설명 |
| 연결 확인 | 데이터를 보내기 전에 상대방과 연결을 맺는다 |
| 순서 보장 | 데이터가 순서대로 도착하도록 관리한다 |
| 손실 확인 | 중간에 빠진 데이터가 있는지 확인한다 |
| 재전송 | 손실된 데이터는 다시 보낸다 |
| 흐름제어 | 받는 쪽이 감당할 수 있을 만큼만 보낸다 |
| 혼잡제어 | 네트워크가 막히지 않도록 전송량을 조절한다 |
웹사이트 접속, 이메일, 파일 다운로드, 로그인 요청처럼 데이터가 정확히 도착해야 하는 경우에는 TCP가 자주 사용된다.
예를 들어 은행 앱에서 계좌 이체를 한다고 해보자.
이때 데이터가 중간에 일부 사라지거나 순서가 바뀌면 큰 문제가 생긴다.
10만 원 이체 요청
→ 중간 데이터 손실
→ 잘못된 요청 처리
이런 상황은 허용되면 안 된다. 그래서 정확성이 중요한 서비스에서는 TCP가 적합하다.
⭐ TCP 연결 과정: 3-way handshake
TCP는 데이터를 보내기 전에 먼저 상대방과 연결을 맺는다. 이 과정을 3-way handshake라고 한다.
쉽게 말해 서로 통신할 준비가 되었는지 세 번 확인하는 과정이다.
예를 들어 클라이언트가 서버에 접속한다고 해보자.
1. 클라이언트 → 서버: 연결해도 될까?
2. 서버 → 클라이언트: 좋아, 나도 준비됐어.
3. 클라이언트 → 서버: 확인했어. 이제 데이터 보내자.
실제 TCP에서는 이를 SYN, SYN-ACK, ACK라고 부른다.
| SYN | 클라이언트가 서버에 연결 요청 |
| SYN-ACK | 서버가 요청을 받고 응답 |
| ACK | 클라이언트가 응답을 확인 |
이 과정이 끝나면 TCP 연결이 성립되고, 이후 본격적으로 데이터를 주고받는다.
비유하면 전화 통화와 비슷하다.
전화를 걸고, 상대가 받고, 서로 말할 준비가 되었을 때 대화를 시작하는 구조다.
⭐ TCP는 어떻게 데이터를 정확히 전달할까?
TCP는 큰 데이터를 한 번에 통째로 보내지 않는다. 데이터를 작은 조각으로 나누어 보낸다.
예를 들어 100MB짜리 파일을 다운로드한다고 해보자. TCP는 이 파일을 여러 조각으로 나누고, 각 조각에 번호를 붙인다.
1번 조각
2번 조각
3번 조각
4번 조각
...
받는 쪽은 조각들을 받은 뒤 번호를 기준으로 다시 조립한다.
만약 3번 조각이 중간에 사라졌다면 받는 쪽은 이렇게 판단할 수 있다.
1번 받음
2번 받음
4번 받음
5번 받음
그런데 3번이 없음
그러면 TCP는 빠진 데이터를 다시 보내도록 한다.
이 덕분에 사용자는 파일을 깨지지 않고 받을 수 있다.
이 구조에서 중요한 개념이 Sequence Number와 ACK다.
| Sequence Number | 데이터 조각의 순서를 나타내는 번호 |
| ACK | 데이터를 잘 받았다고 알려주는 응답 |
즉, TCP는 데이터를 보내고 끝내는 것이 아니라, 상대방이 잘 받았는지 계속 확인하면서 통신한다.
⭐ UDP란?
UDP는 User Datagram Protocol의 약자다.
UDP의 핵심은 단순함과 빠른 전송이다.
TCP처럼 연결을 맺고, 데이터 순서를 확인하고, 손실된 데이터를 재전송하는 기능을 기본적으로 제공하지 않는다.
쉽게 말하면 UDP는 “일단 보낸다”에 가깝다.
예를 들어 친구에게 편지를 보내는 것이 TCP라면, UDP는 사람 많은 곳에서 확성기로 말하는 것에 가깝다. 상대가 들었는지, 중간에 일부를 놓쳤는지 매번 확인하지 않는다.
그래서 UDP는 TCP보다 구조가 단순하고 빠르다.
UDP는 데이터가 조금 손실되더라도 빠른 전달이 더 중요한 상황에서 사용된다.
대표적인 예시는 다음과 같다.
| 사용 사례 | UDP가 어울리는 이유 |
| 실시간 영상 스트리밍 | 약간의 손실보다 지연 시간이 더 중요하다 |
| 음성 통화 | 늦게 도착한 음성은 의미가 작다 |
| 온라인 게임 | 빠른 위치 정보 전달이 중요하다 |
| DNS 조회 | 짧은 요청과 응답에 적합하다 |
예를 들어 영상 통화를 한다고 해보자.
상대방의 음성이 0.5초 정도 끊길 수는 있다. 물론 좋지는 않지만 대화는 계속할 수 있다. 그런데 끊긴 음성을 몇 초 뒤에 다시 재전송해서 들려준다면 오히려 더 어색해진다.
실시간 서비스에서는 “늦게 정확히 도착하는 것”보다 “조금 손실되더라도 제때 도착하는 것”이 더 중요할 때가 있다.
이런 경우 UDP가 적합하다.
🤔그렇다면 UDP는 신뢰성이 아예 없을까?
UDP 자체는 TCP처럼 신뢰성 기능을 제공하지 않는다.
하지만 그렇다고 UDP를 사용하는 서비스가 항상 불안정하다는 뜻은 아니다.
UDP 자체는 단순하지만, UDP를 사용하는 프로그램이 필요한 기능을 직접 만들 수 있다.
예를 들어 온라인 게임을 생각해보자.
게임에서는 캐릭터 위치 정보가 계속 바뀐다.
1초 전 위치: x=10, y=20
현재 위치: x=50, y=80
이때 1초 전 위치 정보가 중간에 사라졌다고 해보자.
TCP라면 빠진 데이터를 다시 보내려고 할 수 있다.
하지만 게임에서는 1초 전 위치 정보가 지금 다시 도착해도 별로 쓸모가 없다.
오히려 늦게 도착한 예전 위치 때문에 캐릭터가 순간이동하듯 이상하게 보일 수도 있다.
그래서 게임에서는 이런 데이터는 굳이 재전송하지 않는다.
캐릭터 위치 정보 손실
→ 그냥 버림
→ 최신 위치 정보를 다시 받음
즉, 모든 데이터를 정확하게 받을 필요는 없다.
'인프라' 카테고리의 다른 글
| DNS와 CDN (1) | 2026.05.02 |
|---|---|
| IP 주소체계와 서브네팅, NAT (1) | 2026.05.02 |
| OSI 7계층과 TCP/IP 4계층 (1) | 2026.05.02 |