1 분 소요

1. 전송 계층 프로토콜: TCP와 UDP

전송 계층은 데이터를 어떻게 전달할 것인지를 결정하는 계층입니다. 마치 우체국에서 일반우편과 등기우편을 선택하는 것처럼, 네트워크에서도 데이터 전송 방식을 선택할 수 있습니다.

1.1 TCP (Transmission Control Protocol)

신뢰성 있는 데이터 전송을 보장하는 프로토콜입니다.

특징:

  • 연결 지향적 프로토콜
  • 데이터 전달 보증
  • 순서 보장
  • 흐름 제어와 혼잡 제어
  • 상대적으로 느린 속도

사용 사례:

  • 웹 브라우징 (HTTP/HTTPS)
  • 이메일 (SMTP, IMAP, POP3)
  • 파일 전송 (FTP)
  • 원격 제어 (SSH, Telnet)

1.2 UDP (User Datagram Protocol)

빠른 전송을 위한 단순한 프로토콜입니다.

특징:

  • 비연결형 프로토콜
  • 데이터 전달 및 순서 보장 X
  • 흐름 제어 X
  • 빠른 속도

사용 사례:

  • 실시간 스트리밍
  • 온라인 게임
  • DNS 조회
  • VoIP (인터넷 전화)

[TCP와 UDP의 특징 비교 표 필요]

1.3 TCP 흐름제어와 혼잡제어

  • 흐름제어
    • 슬라이딩 윈도우
    • Stop and Wait
    • 버퍼 관리
  • 혼잡제어
    • Slow Start
    • Congestion Avoidance
    • Fast Retransmit/Fast Recovery

1.4 TCP 세그먼트 구조

  • TCP 헤더 구조
  • 주요 플래그 (SYN, ACK, FIN, RST 등)
  • 시퀀스 번호와 확인 응답 번호

2. TCP 3-way Handshake

2.1 연결 수립 과정

TCP는 데이터를 전송하기 전에 먼저 연결을 수립합니다.

  1. SYN: 클라이언트가 서버에 연결 요청
  2. SYN + ACK: 서버가 요청을 수락하고 클라이언트에게 응답
  3. ACK: 클라이언트가 응답을 확인

3Way

2.2 연결 종료 과정 (4-way Handshake)

  1. FIN: 클라이언트의 연결 종료 요청
  2. ACK: 서버의 응답
  3. FIN: 서버의 연결 종료 요청
  4. ACK: 클라이언트의 최종 응답

4Way

3. 연결 지향성 vs 비연결성

3.1 연결 지향성 (TCP)

택배 배송과 비슷합니다: 주소 확인 송장 작성 배송 추적 서명 확인

3.2 비연결성 (UDP)

편지 투척과 비슷합니다:

  1. 주소만 확인
  2. 바로 발송
  3. 도착 여부 확인 불가

4. 포트와 소켓

4.1 포트(Port)

  • 하나의 IP 주소에서 여러 애플리케이션을 구분하는 번호
  • 0~65535 범위의 숫자
  • Well-known 포트 (0~1023)
    • 80: HTTP
    • 443: HTTPS
    • 21: FTP
    • 22: SSH
    • 53: DNS

4.2 소켓(Socket)

  • IP 주소와 포트 번호의 조합
  • 네트워크 통신의 종단점
  • 예: 192.168.0.1:80

5. 주요 프로토콜과 포트 번호

5.1 응용 계층 프로토콜

  1. 웹 관련
    • HTTP (80)
    • HTTPS (443)
  2. 파일 전송
    • FTP (20, 21)
    • SFTP (22)
  3. 이메일
    • SMTP (25)
    • POP3 (110)
    • IMAP (143)
  4. 기타
    • DNS (53)
    • SSH (22)
    • Telnet (23)

5.2 프로토콜 선택 가이드

신뢰성이 중요한 경우 -> TCP
- 파일 다운로드
- 웹 브라우징
- 이메일 전송

속도가 중요한 경우 -> UDP
- 실시간 게임
- 동영상 스트리밍
- 음성 통화

실습: 간단한 TCP/UDP 통신 예제

TCP 서버/클라이언트 예제 코드

# TCP 서버 코드 예시
import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(1)

마치며

TCP와 UDP는 각각의 장단점이 있으며, 사용 목적에 따라 적절한 프로토콜을 선택하는 것이 중요합니다. 다음 포스트에서는 DNS와 도메인 네임 시스템에 대해 알아보도록 하겠습니다.

댓글남기기