들어가기 전에
우리는 같은 '인터넷'을 쓰지만
일상에서 게임을 할 때는 "렉이 걸린다."
웹 페이지를 로딩할 때는 "느리다."고 표현합니다.
왜 그럴까요?
그 차이 중 하나는 TCP와 UDP의 전송 방식에 있습니다.
이번 글에서는 그 차이를 알아보겠습니다.
1. TCP란?
TCP(Trasmission Control Protocol)는 신뢰성 있는 연결을 보장하기 위한 연결지향형 프로토콜입니다.
데이터가 순서대로, 손실 없이, 중복 없이 도착하도록 전송합니다.
TCP 특징
(1) 연결 지향
- 데이터를 전송하기 전에 반드시 3-way Handshake 과정을 통해 연결을 수립합니다.
- 통신이 끝나면 4-way Handshake로 연결을 해제합니다.
(2) 신뢰성 보장
- 데이터가 손실되면 재전송 요청(Retransmission)을 통해 복구합니다.
- 패킷이 중간에 유실되면 송신자가 다시 보냅니다.
(3) 흐름 제어
- 송신자가 너무 많은 데이터를 빠르게 보내면 수신자가 처리할 수 없는 경우가 생길 수 있습니다.
- 이를 방지하기 위해 Window Size를 조절합니다.
(4) 혼잡 제어
- 네트워크에 트래픽이 몰리면 전송 속도를 조절합니다.
- 패킷 손실이 감지되면 전송 속도를 줄여 혼잡을 완화합니다.
TCP는 어디에 쓰일까요?
(1) 웹 페이지 로딩 (HTTP)
- 웹 페이지의 HTML, CSS, JS 파일을 순서대로 로딩하기 위해 TCP를 사용합니다.
(2) 파일 전송 (FTP, SFTP)
- 파일의 손실 없이 정확하게 전달되도록 TCP를 사용합니다.
(3) 이메일 전송 (SMTP)
- 메일 내용이 유실되지 않고 정확하게 도착하기 위해 TCP를 사용합니다.
2. TCP의 통신 모델
TCP는 신뢰성 있는 양방향 통신을 통해 주로 점대점(1:1) 및 전이중 통신(Full Duplex)을 지원합니다.
(1) 점대점(One to One)
- 하나의 클라이언트와 하나의 서버가 독립적인 연결을 맺고 통신합니다.
- 이를 통해 웹 브라우저가 서버에서 HTML 페이지를 받아올 때 두 장비 간에만 데이터를 주고받습니다.
(2) 전이중 통신(Full Duplex)
- 양쪽 모두 동시에 송수신할 수 있는 구조입니다.
- 이를 통해 메시지 전송 중에도 상대방의 응답을 받을 수 있습니다.
(3) 다중화(Multiplexing)
- 하나의 IP와 포트에서 여러 TCP 연결을 동시에 관리할 수 있습니다.
- 이를 통해 브라우저에서 여러 탭을 열면 같은 서버에 여러 연결이 동시 유지됩니다.
3. UDP란?
UDP(User Datagram Protocol)는 비연결형 프로토콜로 데이터를 빠르게 전송하기 위해 신뢰성을 포기합니다.
UDP 특징
(1) 비연결형
- 데이터를 보내기 전에 연결 과정이 없습니다.
- 송신자는 그냥 데이터를 보내고 수신자는 받기만을 수행합니다.
(2) 신뢰성 보장 없음
- 패킷이 유실되거나 순서가 뒤바뀌어도 복구하지 않습니다.
- 단순히 "보내기"만 하기 때문에 받았는지 확인하지 않습니다.
(3) 오버헤드가 적음
- 핸드쉐이크 과정이 없으므로 전송 속도가 빠릅니다.
- 단순한 구조로 인해 TCP보다 네트워크 자원을 덜 사용합니다.
그렇다면 UDP는 신뢰성이 전혀 보장되지 않을까요?
UDP 가 신뢰성을 보장하지 않는다는 말은 패킷 손실 시 재전송 하지 않음, 순서를 보장하지 않음을 뜻합니다.
그렇지만 Checksum 필드를 통해 패킷이 손상되었는지에 대한 검사는 합니다.
이를 통해 데이터가 손상되었는지를 검사하여 손상된 패킷은 버려집니다.
UDP는 어디에 쓰일까요?
(1) 스트리밍 서비스
- 약간의 손실이 발생해도 실시간으로 빠르게 전송하기 위해 UDP를 사용합니다.
(2) 온라인 게임
- 빠른 반응이 중요하기 때문에 약간의 데이터 손실은 감수하고 UDP를 사용합니다.
UDP 동작 원리
(1) 데이터 전송
- 송신자는 수신자의 IP와 Port를 지정하고 바로 전송합니다.
TCP처럼 연결을 해제하는 과정 없이 단순히 전송이 끝나면 종료됩니다.
중간에 데이터가 손실되거나 순서가 바뀌어도 재전송하지 않습니다.
4. UDP의 통신 모델
UDP는 비연결형 통신을 통해 1:1, 1:N, N:N 구조를 지원합니다.
(1) 1:1
- 하나의 클라이언트가 하나의 서버와 통신합니다.
- 이를 통해 DNS 조회 시 클라이언트가 DNS 서버에 요청하고 응답을 받습니다.
(2) 1:N
- 하나의 클라이언트가 여러 서버나 여러 클라이언트에 데이터를 전송합니다.
- 이를 통해 영상 스트리밍 서버가 여러 시청자에게 동시에 전송합니다.
(3) N:N
- 여러 클라이언트가 서로 동시에 통신할 수 있는 구조입니다.
- 이를 통해 온라인 게임에서 수십 명의 플레이어가 실시간으로 데이터를 주고받습니다.
5. TCP와 UDP의 차이
(1) 연결 방식
- TCP는 3-way Handshake 를 통해 연결지향형 프로토콜임을 알 수 있습니다.
- UDP는 비연결형 프로토콜 입니다.
(2) 신뢰성
- TCP는 손실 시 재전송하고 패킷 전송 순서를 보장하여 신뢰성이 보장됩니다.
- UDP는 보장하지 않습니다.
(3) 속도와 오버헤드
- TCP는 Handshake 과정으로 UDP에 비해 느리고 연결 유지 비용이 발생하여 오버헤드도 높습니다.
면접 대비 요약
TCP와 UDP의 차이점은 무엇인가요?
TCP는 신뢰성을 보장하는 전송이 가능한 반면 UDP는 그러한 신뢰성 보장없이 빠른 전송을 목표로 하고 있습니다.
UDP가 TCP보다 빠른 이유가 무엇인가요?
핸드쉐이크 과정 없이 바로 전송하기 때문에 오버헤드가 적습니다.
TCP는 언제 사용하나요?
파일 전송, 웹 페이지 로딩 등 손실이 치명적일 경우 사용합니다.
UDP는 언제 사용하나요?
실시간 스트리밍, 게임 등 빠른 전송이 중요한 경우 사용합니다.