🌐 TCP vs UDP 차이점
TCP(Transmission Control Protocol)과 UDP(User Datagram Protocol)는 모두 전송 계층(Transport Layer, OSI 4계층)에서 사용되는 프로토콜입니다.
하지만 두 프로토콜은 신뢰성(Reliability), 속도(Speed), 데이터 전송 방식에서 큰 차이가 있습니다.
🚀 1. TCP(Transmission Control Protocol)란?
"신뢰성을 보장하는 연결형 프로토콜"
TCP는 데이터를 정확하고 순서대로 전달하기 위한 프로토콜입니다.
즉, 데이터가 유실되지 않고, 순서가 보장되는 것이 중요할 때 사용됩니다.
✅ TCP의 주요 특징
✔ 신뢰성 보장 → 데이터가 손실되거나 순서가 어긋나면 재전송 요청 (에러 감지 및 복구)
✔ 연결형 프로토콜 → 데이터 전송 전, 3-Way Handshake(3단계 연결 과정) 수행
✔ 흐름 제어(Flow Control) → 수신 측이 처리할 수 있는 만큼만 전송
✔ 혼잡 제어(Congestion Control) → 네트워크 혼잡 시 전송 속도 조절
✅ TCP 사용 사례
📌 데이터 손실 없이 정확하게 전달되어야 하는 경우
- 웹 브라우징(HTTP, HTTPS)
- 이메일(SMTP, IMAP, POP3)
- 파일 전송(FTP)
- 원격 접속(SSH, Telnet)
⚡ 2. UDP(User Datagram Protocol)란?
"빠르고 단순한 비연결형 프로토콜"
UDP는 데이터를 빠르게 전송하는 것이 중요한 프로토콜입니다.
즉, 데이터의 순서나 손실이 발생할 수 있지만, 속도가 중요한 경우에 사용됩니다.
✅ UDP의 주요 특징
✔ 비연결형 프로토콜 → 3-Way Handshake 없이 바로 전송
✔ 빠른 전송 속도 → TCP보다 가벼우며, 추가적인 확인 과정이 없음
✔ 데이터 손실 가능 → 재전송 요청이 없기 때문에 일부 데이터가 손실될 수 있음
✔ 순서 보장 X → 데이터가 도착하는 순서를 보장하지 않음
✅ UDP 사용 사례
📌 속도가 중요하고, 약간의 데이터 손실이 허용되는 경우
- 스트리밍 서비스(YouTube, Netflix, Twitch)
- VoIP(음성 통화, 화상 채팅)
- 온라인 게임(실시간 멀티플레이)
- DNS(도메인 네임 시스템) 조회
- DHCP(네트워크 설정 자동화)
🛠 3. TCP vs UDP 비교
비교 항목 | TCP | UDP |
연결 방식 | 연결형(Connection-Oriented) | 비연결형(Connectionless) |
신뢰성 | 데이터 손실 없이 정확한 전송 보장 | 데이터 손실 가능 (재전송 없음) |
속도 | 상대적으로 느림 (오버헤드 많음) | 빠름 (오버헤드 적음) |
데이터 순서 | 순서 보장 | 순서 보장하지 않음 |
흐름 제어 | 있음 (수신 측이 처리 가능한 만큼 전송) | 없음 |
혼잡 제어 | 있음 (네트워크 혼잡 시 속도 조절) | 없음 |
패킷 확인 | 패킷이 정상적으로 도착했는지 확인 | 확인 과정 없음 |
전송 단위 | 스트림(Stream) 방식 | 데이터그램(Datagram) 방식 |
대표적인 사용 사례 | 웹, 이메일, 파일 전송 | 스트리밍, VoIP, 게임, DNS |
🔥 4. TCP와 UDP의 실제 사용 예제
✅ (1) TCP 예제 (Python)
TCP는 신뢰성을 보장하기 위해 서버-클라이언트 간 연결을 먼저 설정하고 데이터를 주고받습니다.
📌 TCP 서버 (Python)
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP 소켓 생성
server_socket.bind(("0.0.0.0", 12345)) # IP와 포트 바인딩
server_socket.listen(1) # 연결 대기
print("TCP 서버가 실행 중...")
conn, addr = server_socket.accept() # 클라이언트 연결 수락
print(f"클라이언트 {addr} 연결됨")
data = conn.recv(1024) # 데이터 수신
print(f"받은 데이터: {data.decode()}")
conn.sendall(b"Hello, Client!") # 응답 전송
conn.close() # 연결 종료
📌 TCP 클라이언트 (Python)
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP 소켓 생성
client_socket.connect(("127.0.0.1", 12345)) # 서버에 연결
client_socket.sendall(b"Hello, Server!") # 데이터 전송
data = client_socket.recv(1024) # 응답 수신
print(f"서버 응답: {data.decode()}")
client_socket.close() # 연결 종료
✔ TCP는 반드시 서버와 클라이언트가 연결을 맺은 후 통신해야 함
✅ (2) UDP 예제 (Python)
UDP는 신뢰성 없이 데이터를 빠르게 전송합니다.
서버-클라이언트 간 연결이 필요 없으며, 단순히 데이터를 보내고 받을 수 있습니다.
📌 UDP 서버 (Python)
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP 소켓 생성
server_socket.bind(("0.0.0.0", 12345)) # IP와 포트 바인딩
print("UDP 서버가 실행 중...")
while True:
data, addr = server_socket.recvfrom(1024) # 데이터 수신
print(f"{addr}에서 받은 데이터: {data.decode()}")
server_socket.sendto(b"Hello, Client!", addr) # 클라이언트에게 응답 전송
📌 UDP 클라이언트 (Python)
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP 소켓 생성
client_socket.sendto(b"Hello, Server!", ("127.0.0.1", 12345)) # 데이터 전송
data, server = client_socket.recvfrom(1024) # 응답 수신
print(f"서버 응답: {data.decode()}")
client_socket.close() # 소켓 종료
✔ UDP는 연결 과정이 필요 없으며, 서버가 데이터를 바로 받을 수 있음
🎯 5. TCP vs UDP 선택 기준
📌 TCP를 사용해야 하는 경우
- 데이터가 손실 없이 정확하게 전송되어야 하는 경우
- 순서가 중요한 데이터(예: 파일 다운로드, 이메일, HTTP 요청)
- 연결을 설정하고 안정적인 통신이 필요한 경우
📌 UDP를 사용해야 하는 경우
- 빠른 응답 시간이 중요한 경우 (예: 실시간 스트리밍, 온라인 게임)
- 데이터 손실이 발생해도 크게 문제가 없는 경우
- 연결 과정 없이 단순히 데이터를 주고받아야 하는 경우
🏆 6. 결론
✔ TCP는 신뢰성이 중요한 경우 사용 (웹, 이메일, 파일 전송 등)
✔ UDP는 속도가 중요한 경우 사용 (스트리밍, VoIP, 게임 등)
✔ TCP는 데이터가 순서대로 도착하지만, UDP는 순서 보장이 없음
✔ UDP는 연결 설정이 필요 없고 빠르지만, 데이터 손실 가능성이 있음
🚀 즉, TCP는 정확성을 보장하고, UDP는 빠른 속도를 제공하는 프로토콜입니다!
'컴퓨터 과학 > 🛜 네트워크' 카테고리의 다른 글
웹 소켓이란? (0) | 2025.02.04 |
---|---|
TCP 3-Way Handshake vs 4-Way Handshake 차이점 (0) | 2025.02.04 |
CORS(Cross-Origin Resource Sharing)란? (0) | 2025.02.04 |
REST API의 장점과 단점 (1) | 2025.02.03 |
TCP/IP 4계층 모델 (0) | 2025.01.31 |