네트워크/TCP,IP 프로토콜

[네트워크] TCP vs UDP: 차이점, 장단점, 사용 사례와 예제 코드 완벽 정리

CodeCaine Explorer 2024. 12. 18. 11:26
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