네트워크 전송 계층 중 '전송 계층'에서 사용하는 프로토콜인 TCP와 UDP의 차이에 대해서 알아보자.
'전송 계층'은 말그대로 송신자에서 수신자로 가는 데이터의 전송을 맡는 계층이다. 그 데이터를 보내기 위한 규약들이 존재하는데 그것들 중 하나가 TCP, UDP이다.
밑 사진은 OSI 7계층과 TCP/IP 4계층 사진이다.
TCP(Transmission Controll Protocol)란?
TCP는 인터넷에서 데이터를 메시지 형태로 안정적으로 전송시키는 프로토콜이다. 보통 TCP는 IP와 함께 사용하게 되는데 이 때, TCP는 데이터를 잘게 나누고, 추적하고, 순서대로 재조립하는 역할을 하고, IP는 데이터를 목적지까지 주소를 찾아 보내주는 역할을 하게된다.
IP는 데이터를 목적지에 보내주는 역할만 하고 TCP가 중간에 유실됐는지, 순서가 뒤섞였는지 확인해주는 역할을 하는데 어떻게 이 역할을 수행하는지 알아보자.
TCP의 신뢰성 있는 전송 보장 방법
1. 연결 설정 (3-Way Handshake)
TCP는 통신을 시작하기 전에 신뢰성 있는 연결을 먼저 설정한다. 이를 3-way handshake 하며, 다음과 같이 진행된다.
- 클라이언트 → 서버: SYN (연결 요청)
- 서버 → 클라이언트: SYN + ACK (요청 수락 및 응답)
- 클라이언트 → 서버: ACK (연결 확인)
2. 데이터 전송과 순서 추적 (Sequence Number)
TCP는 전송하는 데이터를 세그먼트라는 작은 조각으로 나누고, 각 세그먼트에 순서 번호를 붙인다.
- 이 번호를 기반으로 수신자는 원래 순서대로 데이터를 재조립할 수 있습니다.
- 순서가 뒤섞여 도착하더라도 TCP는 이를 자동으로 정렬한다.
3. 수신 확인 (Acknowledgement, ACK)
수신자는 데이터를 받을 때마다 "정상적으로 받았다"는 의미의 ACK(응답)를 전송한다.
- 송신자는 이 ACK를 받아야만 다음 데이터를 전송한다.
- 만약 ACK가 오지 않으면 재전송을 시도한다.
4. 흐름 제어 (Flow Control)
수신자의 처리 속도가 느릴 경우, 송신자는 데이터 전송 속도를 조절한다. 이를 슬라이딩 윈도우(Sliding Window) 방식으로 제어하며, 수신자가 감당할 수 있는 만큼만 보내준다.
슬라이딩 윈도우 방식
1, 2, 3, 4, 5, 6, 7 로 이루어진 숫자 배열에서 A[i] + A[i+1] + A[i+2] 형식으로 연속적인 3개의 숫자의 합의 최댓값을 구한다고 가정해보면 아래 5가지의 경우의 수가 나옵니다.
[1, 2, 3], 4, 5, 6, 7
1, [2, 3, 4], 5, 6, 7
1, 2, [3, 4, 5], 6, 7
1, 2, 3, [4, 5, 6], 7
1, 2, 3, 4, [5, 6, 7]
이런식으로 수신자가 감당할 수 있는 정도의 데이터를 전송하면서 속도를 조절한다.
5. 혼잡 제어 (Congestion Control)
네트워크가 혼잡한 경우, TCP는 스스로 전송 속도를 줄여 패킷 손실을 줄인다.
- 네트워크 상태에 따라 윈도우 크기를 동적으로 조정하며, 점진적으로 속도를 회복시킨다.
6. 연결 종료 (4-Way Handshake)
데이터 전송이 끝나면 4단계 종료 절차를 통해 연결을 신뢰성있게 종료한다.
UDP(User Datagram Protocol)란?
신속하게 데이터를 전송하지만, 신뢰성은 보장하지 않는 전송 프로토콜이다. TCP와는 다르게 연결을 맺지 않고, 데이터를 한 번에 보내는 방식으로 전송한다.
연결을 위해 할당되는 논리적인 경로가 없는데, 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 되는데 이렇게 데이터를 서로 다른 경로로 독립적으로 처리하게 된다.
Datagram이란?
네트워크에서 독립적으로 전달되는 데이터의 단위를 말한다. UDP에서는 송신자 포트번호, 수신자 포트번호, 길이, 체크섬, 실제데이터 이렇게 묶은 한 데이터 패킷을 이야기 한다.
TCP와 UDP의 차이점
구분 | TCP | UDP |
연결 방식 | 연결형 | 비연결형 |
순서 보장 | O | X |
재전송 | O | X |
속도 | 느림 | 빠름 |
용도 | 파일 전송, 웹 등 | 실시간 통신, 게임 등 |
TCP의 전송 단위인 바이트 스트림과 UDP의 데이터 그램의 차이점
TCP (바이트 스트림) : 데이터를 쪼개지 않고 "하나의 데이터 흐름"으로 취급
// 클라이언트에서
socket.write("Hello");
socket.write("World");
// 서버에서는
socket.read() → "HelloWorld" ← 경계 정보 없음
UDP (데이터그램) : 각각의 메시지를 “하나의 독립된 단위”로 취급
// 클라이언트에서
send("Hello") → 1개의 UDP Datagram
send("World") → 또 다른 Datagram
// 서버에서는
recv() → "Hello" (첫 번째 datagram)
recv() → "World" (두 번째 datagram)
실제 사용 차이
- TCP는 파일, HTML, 채팅 로그처럼 연속적 데이터 처리에 적합
- UDP는 실시간 게임, 음성 스트리밍처럼 빠르게 끊긴 메시지 단위 전송에 적합
'Network' 카테고리의 다른 글
[Network] 공인(Public) IP vs 사설(Private) IP (2) | 2025.06.14 |
---|---|
[Network] ARP vs RARP (1) | 2025.06.13 |
[Network] HTTP/1.1과 HTTP/2의 차이는 무엇일까? (0) | 2025.06.08 |