[네트워크] 3. TCP와 UDP 프로토콜의 이해
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는 데이터를 전송하기 전에 먼저 연결을 수립합니다.
- SYN: 클라이언트가 서버에 연결 요청
- SYN + ACK: 서버가 요청을 수락하고 클라이언트에게 응답
- ACK: 클라이언트가 응답을 확인
2.2 연결 종료 과정 (4-way Handshake)
- FIN: 클라이언트의 연결 종료 요청
- ACK: 서버의 응답
- FIN: 서버의 연결 종료 요청
- ACK: 클라이언트의 최종 응답
3. 연결 지향성 vs 비연결성
3.1 연결 지향성 (TCP)
택배 배송과 비슷합니다: 주소 확인 송장 작성 배송 추적 서명 확인
3.2 비연결성 (UDP)
편지 투척과 비슷합니다:
- 주소만 확인
- 바로 발송
- 도착 여부 확인 불가
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 응용 계층 프로토콜
- 웹 관련
- HTTP (80)
- HTTPS (443)
- 파일 전송
- FTP (20, 21)
- SFTP (22)
- 이메일
- SMTP (25)
- POP3 (110)
- IMAP (143)
- 기타
- 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와 도메인 네임 시스템에 대해 알아보도록 하겠습니다.
댓글남기기