728x90
반응형
SMALL
1. TCP와 UDP의 기본 개념
TCP (Transmission Control Protocol)
- TCP는 신뢰성 있는 데이터 전송 방식을 제공합니다.
- 데이터를 정확히 도착하도록 보장하고, 만약 중간에 손실되면 재전송을 요청합니다.
- 데이터를 주고받을 때 순서대로 패킷을 전달하고, 에러가 나면 고칩니다.
- 연결을 먼저 만들고, 끝날 때 연결을 닫는 연결 지향적 프로토콜이에요.
📌 비유: TCP는 전화통화 같아요! 📞
상대방이 전화를 끊을 때까지, 대화 내용이 정확히 전달되도록 확인하며 말해요!
UDP (User Datagram Protocol)
- UDP는 빠르지만 신뢰성 없는 데이터 전송 방식입니다.
- 데이터를 빠르게 보내고, 전송이 성공 여부는 확인하지 않습니다.
- 데이터를 보낼 때 연결을 만들지 않고, 각 데이터 패킷은 독립적입니다.
📌 비유: UDP는 편지 같아요! 📬
편지를 보내지만, 상대방이 받았는지 확인하지 않아요! 빠르게 보내는 것이 중요해요!
2. TCP와 UDP의 주요 차이점
특징 | TCP | UDP |
---|---|---|
신뢰성 | 매우 높음 (데이터 손실 없이 보장) | 낮음 (데이터 손실이나 순서 문제 발생 가능) |
속도 | 상대적으로 느림 (에러 처리, 재전송 필요) | 빠름 (에러 처리 안 함) |
연결 방식 | 연결 지향적 (서버와 연결 후 통신) | 비연결형 (서버와 연결 없이 통신) |
사용 예시 | 웹 페이지, 파일 다운로드, 이메일 등 | 실시간 스트리밍, 온라인 게임 등 |
3. TCP의 사용 사례
- 웹 페이지 로딩 (HTTP/HTTPS): 웹사이트에서 페이지를 요청할 때, 데이터가 정확하게 도착해야 하므로 TCP가 사용됩니다.
- 파일 다운로드: 파일을 다운로드할 때 데이터가 손실되지 않도록 보장하기 위해 TCP가 사용됩니다.
📌 TCP의 장점
- 정확한 데이터 전달: 데이터를 정확하게 전달해야 하는 경우에 적합합니다.
- 에러 복구: 에러가 발생하면 자동으로 재전송합니다.
4. UDP의 사용 예시
- 실시간 스트리밍 (음악, 비디오): 실시간으로 데이터를 빠르게 보내야 하므로 UDP가 사용됩니다.
- 온라인 게임: 게임에서는 빠른 반응속도가 중요하고, 잠깐의 데이터 손실은 문제가 되지 않기 때문에 UDP가 사용됩니다.
📌 UDP의 장점
- 빠른 속도: 데이터 손실을 신경 쓰지 않기 때문에 빠르게 전송됩니다.
- 간단한 통신: 연결 설정 없이 바로 데이터 전송이 가능합니다.
5. TCP 예시 코드
TCP 연결 및 데이터 전송
import socket
# TCP 소켓을 생성 (AF_INET은 IPv4, SOCK_STREAM은 TCP 연결)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버 주소와 포트 번호 지정
server_address = ('localhost', 12345)
# 서버에 연결
server_socket.connect(server_address)
try:
# 서버로 데이터 보내기
message = "Hello, TCP Server!"
server_socket.sendall(message.encode('utf-8')) # 메시지 보내기
# 서버로부터 응답 받기
data = server_socket.recv(1024) # 최대 1024바이트 수신
print('Received:', data.decode('utf-8'))
finally:
# 연결 종료
server_socket.close()
동작 설명
- 서버에 연결:
server_socket.connect()
를 사용하여 서버와 연결을 설정합니다. - 데이터 전송:
server_socket.sendall()
을 사용하여 데이터를 서버로 보냅니다. - 응답 받기: 서버에서 보낸 응답을
recv()
를 통해 받습니다. - 연결 종료: 모든 작업이 끝나면
server_socket.close()
로 연결을 종료합니다.
TCP 특징: 데이터의 정확성과 순서가 보장됩니다. 서버가 응답을 보내기 전에 요청이 제대로 도달했는지 확인합니다.
6. UDP 예시 코드
UDP 연결 및 데이터 전송
import socket
# UDP 소켓을 생성 (AF_INET은 IPv4, SOCK_DGRAM은 UDP 연결)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 서버 주소와 포트 번호 지정
server_address = ('localhost', 12345)
# 서버로 데이터 보내기
message = "Hello, UDP Server!"
server_socket.sendto(message.encode('utf-8'), server_address) # 메시지 보내기
# 서버로부터 응답 받기
data, server = server_socket.recvfrom(1024) # 최대 1024바이트 수신
print('Received:', data.decode('utf-8'))
# 연결 종료
server_socket.close()
동작 설명
- 서버에 연결: UDP는 연결 없이 데이터를 주고받습니다.
server_socket.sendto()
로 데이터를 전송합니다. - 데이터 전송:
sendto()
는 데이터를 보낼 서버 주소와 함께 데이터를 전송합니다. - 응답 받기:
recvfrom()
을 사용하여 서버로부터 데이터를 받습니다. UDP는 응답이 없더라도 데이터를 보낼 수 있습니다. - 연결 종료: UDP는 연결이 없으므로, 별도로 종료 명령을 내리지 않아도 됩니다.
UDP 특징: 데이터는 빠르게 전송되지만, 순서나 정확성이 보장되지 않습니다. 서버가 응답을 보내지 않으면 그 데이터는 누락될 수 있습니다.
7. 차이점 요약
- TCP는 연결 지향적이고, 데이터가 정확히 전송되도록 보장합니다. (예: 웹 페이지 로딩, 파일 다운로드)
- UDP는 연결이 없고 빠르지만, 데이터의 정확성과 순서 보장이 없습니다. (예: 실시간 스트리밍, 온라인 게임)
8. 쉽게 이해하는 비유
- TCP는 전화통화처럼, 상대방이 통화를 끝낼 때까지 내용을 정확히 전달하고 확인합니다. 📞
- UDP는 편지 보내기처럼, 빠르게 보내지만 상대방이 받았는지 확인하지 않아요. 📬
728x90
반응형
SMALL
'네트워크 > TCP,IP 프로토콜' 카테고리의 다른 글
TCP 3-way-handshake, 데이터 통신의 시작을 이해하자! - 코드카인 티스토리 (0) | 2024.12.23 |
---|---|
[네트워크] 웹사이트가 느려질 때 꼭 필요한 기술, 로드 밸런싱 완전 정복 - 코드카인 티스토리 (0) | 2024.12.10 |