[네트워크] TCP/IP, TCP, UDP 알아보기

klmin·2024년 11월 26일

TCP/IP란?

TCP/IP는 인터넷에서 데이터를 주고받기 위한 프로토콜 스택(규칙 집합)을 의미한다.
Transmission Control Protocol (TCP)Internet Protocol (IP)를 중심으로 설계된 네트워크 모델로 전 세계 인터넷의 기반이 되는 표준이다.

TCP/IP의 주요 특징

계층적 구조 : 네트워크 통신을 단계별로 나누어 각 계층이 특정 역할을 담당한다.
표준화 : 전 세계 네트워크에서 통일된 방식으로 데이터를 전송할 수 있다.
확장성 : 네트워크 크기와 복잡성에 관계없이 안정적으로 작동한다.

TCP/IP의 계층 구조

  • 응용 계층 (Application Layer)

    • 사용자와 직접 상호작용하며 데이터 생성 및 표현을 담당.
      예) HTTP, FTP, SMTP.
  • 전송 계층 (Transport Layer)

    • 데이터의 신뢰성, 오류 복구, 흐름 제어를 관리.
      예) TCP, UDP.
  • 인터넷 계층 (Internet Layer)

    • 물리적 매체를 통해 데이터 전송 및 네트워크 인터페이스 관리.
      데이터 전송을 위한 주소 지정 및 라우팅.
      예) IP, ICMP, ARP.
  • 네트워크 액세스 계층 (Network Access Layer)

    • 데이터 전송을 위한 물리적 매체와 네트워크 인터페이스 관리.
      물리적 장치 간 데이터 전송 및 데이터 링크 계층 역할.
      예) Ethernet, Wi-Fi.

예시) 사용자가 브라우저에서 웹 페이지를 요청

  1. HTTP (응용 계층): 웹 페이지 요청 생성.
  2. TCP (전송 계층): 요청 데이터를 패킷으로 나누어 신뢰성 있는 전송 보장.
  3. IP (인터넷 계층): 목적지 주소(IP)를 기준으로 패킷을 라우팅.
  4. Ethernet (네트워크 액세스 계층): 실제 물리 네트워크에서 데이터 전송.

TCP란?

TCP(Transmission Control Protocol)는 TCP/IP 스택의 전송 계층(Transport Layer)에 속하며 신뢰성 있는 데이터 전송을 보장하는 연결형 프로토콜(Connection-Oriented Protocol)이다.

TCP의 주요 특징

  • 연결 지향
    • 데이터 전송 전에 연결을 설정(3-Way Handshake).
  • 신뢰성 보장
    • 데이터 손실, 중복, 순서 뒤바뀜을 감지하고 복구.
  • 데이터 확인 및 재전송
    • ACK 번호로 각 데이터 패킷의 수신 여부를 확인하고, 손실된 패킷은 재전송한다.
  • 순서 보장
    • 데이터를 보낸 순서대로 수신하도록 보장.
  • 패킷 손실 복구
    • 전송 중 손실된 데이터를 재전송.
  • 혼잡 제어
    • 네트워크 트래픽 상황에 따라 데이터 전송 속도를 조절해 혼잡을 완화.

TCP 헤더 구조 (20~60 바이트)

필드설명
Sequence Number데이터의 순서를 보장하기 위한 시퀀스 번호.
Acknowledgment Number수신 데이터에 대한 확인 응답을 위한 번호.
FlagsSYN, ACK, FIN, RST 등 상태를 나타내는 플래그.
Window Size흐름 제어를 위한 수신 버퍼 크기.
Checksum데이터 오류 검사를 위한 필드.
Options**선택적으로 추가할 수 있는 기능(예: 타이밍 정보).

TCP의 3-Way Handshake (연결 설정)

TCP는 클라이언트와 서버 간의 연결을 설정하기 위해 3단계 과정을 수행한다.
이 과정은 양방향 데이터 전송 준비를 확인하고 초기 시퀀스 번호(ISN)를 교환한다.

상태 정의 (TCP 플래그 상태)

상태 설명
CLOSED연결이 닫혀 있는 초기 상태.
LISTEN서버가 클라이언트 연결 요청을 기다리는 상태.
SYN_SENT클라이언트가 SYN 패킷을 전송한 상태.
SYN_RECEIVED서버가 클라이언트의 SYN을 받고 ACK로 응답한 상태.
ESTABLISHED클라이언트와 서버 간 연결이 성립된 상태로 데이터 송수신이 가능.

3-Way Handshake 과정

  1. SYN (Synchronize)
    클라이언트는 서버에 연결 요청(SYN)을 보낸다.
    이 요청에는 클라이언트의 초기 시퀀스 번호(ISN, Initial Sequence Number)가 포함된다.

    클라이언트 상태: SYN_SENT.

    예) 클라이언트가 seq=1000을 사용하여 서버로 SYN 메시지를 전송한다.
Client ----[SYN, seq=1000]----> Server
  1. SYN-ACK (Synchronize + Acknowledge)
    서버는 클라이언트의 요청(SYN)을 확인(ACK)하면서 자신의 연결 요청(SYN)을 보낸다.
    이때, 서버는 클라이언트의 시퀀스 번호를 기반으로 ACK=ISN+1(1001)을 설정하고 자신의 초기 시퀀스 번호 ISN=2000을 보낸다.

    서버 상태: SYN_RECEIVED

    예) 서버가 클라이언트의 seq=1000을 확인(ACK=1001)하고 자신의 seq=2000을 사용해 SYN 메시지를 전송합니다.
Client <----[SYN-ACK, seq=2000, ack=1001]---- Server
  1. ACK (Acknowledge)
    클라이언트는 서버의 응답(SYN-ACK)을 확인(ACK)한다.
    이때 클라이언트는 서버의 시퀀스 번호를 기반으로 ACK=ISN+1(2001)을 설정해 ACK 메시지를 보낸다.

    양측 상태: ESTABLISHED

    예) 클라이언트가 서버의 seq=2000을 확인(ACK=2001)하고 연결 설정을 완료한다.
Client ----[ACK, seq=1001, ack=2001]----> Server

TCP의 4-Way Handshake (연결 종료)

TCP는 데이터 전송 완료 후 연결을 해제하기 위해 4-Way Handshake를 수행한다.
이 과정은 클라이언트와 서버가 각각 연결 종료를 요청하고 확인하는 4단계로 구성된다.

상태 정의 (TCP 플래그 상태)

상태 설명
ESTABLISHED데이터 송수신 중인 상태.
FIN_WAIT_1클라이언트가 연결 종료 요청(FIN)을 보낸 상태.
FIN_WAIT_2클라이언트가 서버의 ACK를 받고 대기 중인 상태.
CLOSE_WAIT서버가 클라이언트의 FIN을 수신하고 연결 종료를 준비 중인 상태.
LAST_ACK서버가 FIN을 전송하고 ACK를 기다리는 상태.*
TIME_WAIT연결이 닫힌 후 잔여 패킷 처리를 위해 대기하는 상태(클라이언트).
CLOSED연결 종료 완료.

4-Way Handshake 과정

  1. FIN (Finish)
    클라이언트는 서버에 연결 종료 요청(FIN)을 보낸다.
    이 요청은 클라이언트의 현재 시퀀스 번호(seq)를 포함한다.

    클라이언트 상태: FIN_WAIT_1

    예) 클라이언트가 seq=1000을 사용하여 FIN 메시지를 서버로 전송.
Client ----[FIN, seq=1000]----> Server
  1. ACK (Acknowledge)
    서버는 클라이언트의 FIN 요청을 확인하고 ACK 응답을 보낸다.
    이때 서버는 클라이언트의 시퀀스 번호에 1을 더해 ack=x+1로 응답한다.

    서버 상태: CLOSE_WAIT, 클라이언트 상태: FIN_WAIT_2.

    예) 서버가 클라이언트의 seq=1000을 확인하고 ACK=1001로 응답.
Client <----[ACK, seq=2000, ack=1001]---- Server
  1. FIN (Finish)
    서버도 연결을 종료하고 싶다는 FIN 요청을 보낸다.
    이 요청은 서버의 현재 시퀀스 번호(seq=y)를 포함한다.

    서버 상태: LAST_ACK.

    예) 서버가 seq=2000을 사용하여 FIN 메시지를 클라이언트로 전송.
Client <----[FIN, seq=2000]---- Server
  1. ACK (Acknowledge)
    클라이언트는 서버의 FIN 요청을 확인하고 ACK 응답을 보낸다.
    클라이언트는 서버의 시퀀스 번호에 1을 더해 ack=y+1로 응답하며 연결이 종료된다.

    클라이언트 상태: TIME_WAIT, 서버 상태: CLOSED.

    예) 클라이언트가 서버의 seq=2000을 확인하고 ACK=2001로 응답한다.
Client ----[ACK, seq=1001, ack=2001]----> Server

TCP의 사용 사례

웹 브라우징: HTTP/HTTPS.
파일 전송: FTP.
이메일: SMTP, IMAP.

UDP란?

UDP(User Datagram Protocol)는 연결 없이 데이터를 전송하는 비연결형 프로토콜(Connectionless Protocol)로 TCP와 달리 빠른 데이터 전송을 중시한다.

UDP의 주요 특징

  • 빠른 전송
    • 연결 설정 과정 없이 데이터를 바로 전송.
  • 비신뢰성
    • 데이터 손실, 중복, 순서 오류를 보장하지 않음.
  • 단순성
    • TCP보다 헤더 크기가 작아 네트워크 리소스 소모가 적음.
  • 확인 및 재전송 없음
    • 수신 확인(ACK)을 하지 않으므로 데이터 손실이 발생해도 송신 측은 이를 감지하지 않는다.
  • 순서 보장 없음
    • UDP는 각 패킷을 독립적으로 처리하며 순서가 뒤바뀌어도 이를 감지하거나 복구하지 않는다.
  • 오류 복구 책임 없음
    • UDP는 최소한의 오류 검사(Checksum)만 수행하며, 손상된 데이터는 폐기될 뿐 복구하지 않는다.

UDP 헤더 구조 (8 바이트)

UDP 헤더는 매우 간단하며 필수적인 데이터 전송 정보만 포함되어 있다.

필드 설명
Source Port송신자의 포트 번호.
Destination Port수신자의 포트 번호.
Length전체 UDP 패킷의 길이.
Checksum데이터 오류 검사를 위한 필드.

UDP의 동작 원리

데이터를 전송하기 전에 별도의 연결 과정을 거치지 않는다.
송신자는 수신자의 IP 주소와 포트 번호만 알고 있으면 데이터를 전송할 수 있다.

UDP의 사용 사례

실시간 애플리케이션: VoIP(인터넷 전화), 스트리밍.
온라인 게임: 빠른 반응 속도가 필요한 네트워크 게임.
방송: 멀티캐스트 또는 브로드캐스트 데이터 전송.

TCP와 UDP의 비교

TCP와 UDP의 차이점

특징TCPUDP
연결 방식연결형 (Connection-Oriented)비연결형 (Connectionless)
헤더 크기20~60 바이트8 바이트
데이터 전송 방식스트림 기반 (연속적인 데이터 흐름 처리)데이터그램 기반 (개별 패킷 처리)
연결 설정3-Way Handshake로 연결 설정연결 과정 없음
오류 복구손실된 데이터 재전송손실된 데이터 복구하지 않음
데이터 신뢰성신뢰성 보장보장하지 않음
데이터 순서전송 순서 보장순서를 보장하지 않음
전송 속도느림빠름
용도웹, 파일 전송, 이메일스트리밍, VoIP, 온라인 게임

TCP/IP와 UDP의 관계

TCP/IP는 프로토콜 스택 전체를 의미하며 전송 계층에서 TCP와 UDP가 각각의 역할을 담당한다.
TCP는 신뢰성과 안정성을 중시하고 UDP는 속도와 효율성을 중시한다.
네트워크 애플리케이션의 요구사항에 따라 TCP 또는 UDP를 선택한다.

결론

TCP는 정확성안정성이 UDP는 속도실시간성이 중요한 애플리케이션에 적합하다.

참고 : https://www.simplilearn.com/tutorials/cyber-security-tutorial/what-is-tcp-ip-model
https://afteracademy.com/blog/what-is-a-tcp-3-way-handshake-process/

profile
웹 개발자

0개의 댓글