- 0
- 40 words
네트워크를 공부하다 보면 TCP랑 UDP라는 단어가 생각보다 자주 나온다.
처음 봤을 때는 둘 다 데이터를 보내는 방식인데 뭐가 그렇게 다른가 싶었다. 찾아보면 TCP는 신뢰성이 있고 UDP는 빠르다는 식으로 설명되어 있는 경우가 많은데, 이것만 외워서는 실제로 어디에 쓰이는지 잘 감이 안 온다.
둘의 차이는 결국 데이터를 얼마나 확실하게 전달할 것인지, 아니면 조금 손실되더라도 빠르게 전달할 것인지에 있다고 보면 이해하기 편하다.
TCP는 데이터를 확인하면서 보낸다
TCP는 데이터를 보내기 전에 상대방과 연결을 먼저 만든다.
그리고 데이터를 전송한 다음 상대방이 잘 받았는지 확인하는 과정도 거친다.
예를 들어 1번부터 5번까지 데이터를 보낸다고 해보자.
1 → 2 → 3 → 4 → 5
그런데 네트워크 상황 때문에 3번 데이터가 중간에서 사라질 수도 있다.
TCP는 이런 상황을 고려해서 데이터를 관리한다. 받은 데이터의 순서를 확인하고, 필요한 경우 손실된 데이터를 다시 전송한다.
그래서 TCP는 단순히 데이터를 보내는 것보다 정확하게 전달하는 것에 더 초점이 맞춰져 있다.
웹사이트에서 파일을 다운로드한다고 생각하면 이해하기 쉽다.
10MB짜리 파일을 받는데 중간의 데이터가 일부 사라졌다고 해서 그냥 없는 상태로 파일을 완성하면 문제가 생긴다. 이런 경우에는 시간이 조금 더 걸리더라도 빠진 데이터를 다시 받아야 한다.
TCP가 이런 상황에 적합하다.
UDP는 조금 다르다
UDP는 TCP처럼 데이터를 보내기 전에 연결을 만들지 않는다.
그냥 데이터를 전송한다.
송신자 ─────────→ 수신자
상대방이 제대로 받았는지 확인하는 과정도 기본적으로 없고, 데이터가 중간에 손실됐다고 해서 UDP가 알아서 다시 보내주지도 않는다.
처음 보면 TCP보다 기능이 부족한 것처럼 보일 수 있다.
그런데 꼭 그렇지는 않다.
오히려 이런 단순함 때문에 UDP가 필요한 경우가 있다.
예를 들어 실시간으로 음성이나 영상 데이터를 전달한다고 생각해보자.
1 → 2 → 3 → 4 → 5 → 6
여기서 3번 데이터가 조금 늦게 도착했다고 해서 3번을 다시 받고 기다린 다음 4번, 5번, 6번을 보여주는 것이 항상 좋은 것은 아니다.
통화나 게임에서는 데이터 하나가 조금 빠지는 것보다 전체적인 반응 속도가 더 중요할 때가 있기 때문이다.
그래서 UDP는 불필요한 확인이나 재전송 과정을 줄이고 데이터를 빠르게 전달하는 데 유리하다.
TCP와 UDP를 비교하면
| 구분 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결 지향 | 비연결 |
| 데이터 순서 | 보장 | 보장하지 않음 |
| 재전송 | 지원 | 기본적으로 지원하지 않음 |
| 신뢰성 | 높음 | 상대적으로 낮음 |
| 속도/지연 | 상대적으로 부담이 있음 | 상대적으로 가벼움 |
| 사용 예 | 웹, 파일 전송 | 실시간 통신, DNS 등 |
여기서 한 가지 주의할 부분이 있다.
UDP가 무조건 TCP보다 빠르다고 생각하면 조금 곤란하다.
UDP 자체가 데이터를 빨리 보내기 쉬운 구조인 것은 맞지만, 실제 속도나 지연시간은 네트워크 상태나 서버, 애플리케이션의 구현 방식에 따라서 달라진다.
특히 요즘은 UDP 위에서 별도의 신뢰성이나 순서 제어 기능을 구현하는 경우도 있다.
대표적으로 QUIC이 그렇다. 웹에서 사용되는 HTTP/3도 QUIC을 기반으로 동작하고, QUIC은 UDP를 이용하면서도 전송에 필요한 여러 기능을 자체적으로 제공한다.
그럼 어떤 걸 사용해야 할까?
결국 상황에 따라 달라진다.
파일 다운로드처럼 데이터가 하나라도 빠지면 안 되는 경우라면 TCP 쪽이 적합하다.
반대로 실시간 게임이나 음성 통화처럼 약간의 데이터 손실보다 빠른 반응과 낮은 지연시간이 중요한 경우에는 UDP가 더 적합할 수 있다.
그래서 TCP와 UDP 중 어느 하나가 더 좋은 프로토콜이라고 보는 것은 맞지 않는 것 같다.
둘이 애초에 중요하게 생각하는 부분이 다르기 때문이다.
TCP는 데이터를 제대로 전달하는 데 신경을 많이 쓰고, UDP는 전달 과정에서 발생하는 부담을 줄이는 데 초점이 맞춰져 있다.
네트워크를 공부할 때 이 차이를 알고 있으면 이후에 3-Way Handshake나 포트 번호, 소켓 같은 내용을 볼 때도 조금 편해진다.
처음에는 그냥 TCP는 안전하고 UDP는 빠르다고 외웠는데, 실제로는 어떤 상황에서 무엇을 포기하고 무엇을 가져갈 것인지의 차이라고 생각하면 훨씬 이해하기 쉽다.