[컴퓨터과학] Network - 전송 계층 (TCP & UDP) 프로토콜

Kyung Jae, Cheong·2024년 11월 16일
post-thumbnail

Network - TCP & UDP

1. Transport 계층의 역할 & Port

Transport 계층은 네트워크 통신의 핵심인 데이터 전송을 담당하며, 송신지와 수신지 간 신뢰성 있는 데이터 전송을 보장하거나 효율적이고 빠른 데이터 전송을 가능하게 합니다.

  • TCP/IP 모델3계층, OSI 7계층4계층에 해당합니다.

1.1 Transport 계층의 주요 역할

  1. 프로세스 간 데이터 전송

    • 네트워크를 통해 전송된 데이터를 송수신 장치 내의 특정 응용 프로그램(프로세스)로 전달합니다.
    • 이를 위해 포트 번호를 사용하여 데이터의 목적지를 식별합니다.
  2. 데이터 전송의 신뢰성 보장

    • 데이터의 정확한 도착을 보장하며, 필요한 경우 데이터의 재전송을 처리합니다(TCP의 경우).
  3. 데이터 분할 및 재조합

    • 전송 데이터가 크기 제한을 초과하지 않도록 작은 단위로 분할(Segmentation)하여 전송합니다.
    • 수신 측에서는 이를 재조합(Reassembly)하여 원본 데이터로 복원합니다.
  4. 흐름 제어 (Flow Control)

    • 송신자와 수신자의 처리 속도 차이를 조정하여 데이터 손실을 방지합니다.
  5. 오류 제어 (Error Control)

    • 데이터 손실이나 오류 발생 시 이를 감지하고 재전송을 요청합니다(TCP의 경우).

1.2 Port (포트)

Port(포트)Transport 계층에서 데이터를 특정 응용 프로그램으로 전달하기 위해 사용하는 논리적 번호입니다.

  • 포트는 데이터가 목적지 장치에서 어떤 서비스(응용 프로그램)로 전달되어야 하는지를 결정하는 중요한 역할을 합니다.

포트 번호의 범위

  • 포트 번호는 0부터 65535번까지 할당 가능하며, 3가지 범위로 나뉩니다:
    • Well-known Ports (0~1023)
      • 표준화된 서비스와 프로토콜에 예약된 포트 번호.
      • 예: HTTP(80), HTTPS(443), FTP(21), SMTP(25).
    • Registered Ports (1024~49151)
      • 특정 애플리케이션이나 사용자 정의 서비스에 등록된 포트.
      • 예: MySQL(3306), PostgreSQL(5432).
    • Dynamic or Private Ports (49152~65535)
      • 임시 또는 비표준 애플리케이션에 사용.
      • 주로 클라이언트가 서버에 연결할 때 사용되는 동적 포트.

포트 번호의 활용 사례

  • 웹 브라우저를 통해 웹 페이지를 요청할 때, 브라우저는 HTTP 프로토콜(포트 80)을 통해 요청을 전송합니다.
  • 이메일 클라이언트SMTP(포트 25)를 사용하여 메일 서버에 이메일을 전송합니다.
  • 비디오 스트리밍 애플리케이션UDP를 통한 동적 포트를 사용하여 데이터를 송수신합니다.

1.3 Transport 계층의 동작 과정

  • 송신 측

    • 데이터를 세그먼트(Segment)로 나눠 포트 번호와 함께 송신.
    • 포트 번호를 통해 데이터를 목적지의 특정 애플리케이션에 전달.
  • 네트워크

    • IP 주소를 통해 데이터가 올바른 수신지 장치에 도달하도록 전달.
  • 수신 측

    • 포트 번호를 확인하여 데이터를 올바른 응용 프로그램으로 전달.
    • 데이터 재조합 후 사용자에게 표시.

1.4 Transport 계층의 주요 프로토콜

Transport 계층의 데이터 전송 방식은 주로 두 가지 주요 프로토콜로 나뉩니다:

  • TCP (Transmission Control Protocol)

    • 연결 지향형 프로토콜로 데이터의 신뢰성을 보장.
    • 데이터 전송 순서와 오류 검사를 통해 정확한 데이터 도착을 보장.
  • UDP (User Datagram Protocol)

    • 비연결형 프로토콜빠른 데이터 전송이 가능.
    • 오류 검사나 데이터 순서 보장은 하지 않음.

2. TCP (Transmission Control Protocol)

TCP(Transmission Control Protocol)연결 지향형 프로토콜로, 데이터 전송의 신뢰성을 보장하기 위해 설계되었습니다.

  • 데이터가 송신자에서 수신자까지 정확하고 순서대로 전달되도록 보장하며, 오류 발생 시 이를 감지하고 재전송하는 기능을 제공합니다.

TCP의 주요 특징

  • 연결 지향형(Connection-Oriented): 데이터 전송 전, 송신자와 수신자 간에 연결이 설정됩니다.
  • 신뢰성 보장: 데이터 전송 순서 보장, 데이터 손실 시 재전송.
  • 흐름 제어 및 혼잡 제어: 네트워크 상태에 따라 데이터 전송 속도를 조정.
  • 데이터 세그먼트화: 데이터를 작은 단위(세그먼트)로 나눠 전송하며, 수신 측에서 재조합.

2.1 TCP 헤더 구조

TCP는 데이터를 전송하기 위해 헤더(header)를 추가하며, 이 헤더에는 연결과 데이터 전송을 위한 다양한 정보가 포함됩니다.

TCP 헤더최소 20바이트이며, 주요 필드는 다음과 같습니다:

필드 이름크기
(비트)
설명
Source Port16송신 측 포트 번호
Destination Port16수신 측 포트 번호
Sequence Number32데이터의 순서를 지정하는 번호
(전송된 바이트의 시작 번호)
Acknowledgment Number32수신자가 다음에 받을 데이터
순서를 지정하는 번호
Header Length4TCP 헤더의 길이를 지정
(단위: 4바이트)
Flags9연결 관리 및 데이터 흐름을 제어하는 플래그
(SYN, ACK, FIN 등)
Window Size16송신자가 보낼 수 있는 데이터의 최대 크기
(흐름 제어에 사용)
Checksum16데이터의 무결성을 확인하기 위한 값
Urgent Pointer16긴급 데이터의 위치를 지정
(URG 플래그와 함께 사용)

2.2 TCP 연결 설정: 3-Way Handshake

TCP 연결은 송신자와 수신자 간의 3단계 과정(3-Way Handshake)을 통해 설정됩니다.

과정

  1. SYN (Synchronize)

    • 클라이언트서버연결 요청을 보냅니다(SYN 플래그 설정).
    • Sequence Number를 생성하여 함께 전송.
  2. SYN-ACK (Synchronize Acknowledgment)

    • 서버가 연결 요청을 수락하고 응답합니다(SYN 플래그와 ACK 플래그 설정).
    • 클라이언트Sequence Number1을 더한 값Acknowledgment Number로 설정.
  3. ACK (Acknowledgment)

    • 클라이언트서버응답을 확인하고 연결을 완료합니다(ACK 플래그 설정).
    • 서버Sequence Number1을 더한 값Acknowledgment Number로 설정.

연결이 설정되면 클라이언트와 서버 간 데이터 전송이 시작됩니다.

2.3 TCP 연결 종료: 4-Way Handshake

TCP 연결 종료는 송신자와 수신자 간의 4단계 과정(4-Way Handshake)을 통해 이루어집니다.

과정

  1. FIN (Finish)

    • 송신자가 데이터 전송을 종료하려고 FIN 플래그를 설정하여 요청합니다.
  2. ACK (Acknowledgment)

    • 수신자FIN 요청을 확인하고 ACK 플래그로 응답합니다.
  3. FIN (Finish)

    • 수신자가 자신의 데이터 전송을 종료하려고 FIN 플래그를 설정하여 요청합니다.
  4. ACK (Acknowledgment)

    • 송신자FIN 요청을 확인하고 ACK 플래그로 응답합니다.

4-Way Handshake가 완료되면 TCP 연결이 종료됩니다.

2.4 TCP 흐름 제어 (Flow Control)

TCP는 송신자와 수신자의 데이터 처리 속도를 조정하기 위해 흐름 제어를 수행합니다.

  • 윈도우 크기(Window Size)를 기반으로 송신 가능한 데이터 양을 결정합니다.
    • 수신 측 버퍼가 가득 차지 않도록 제어.
    • 송신자수신 측에서 처리할 수 있는 데이터만큼만 전송.

Sliding Window Mechanism

  • 송신자는 슬라이딩 윈도우 방식으로 데이터를 전송합니다.
    • 수신 확인(Acknowledgment)이 이루어지면 윈도우가 이동하며 새로운 데이터를 전송.

RWND (Receive Window)

  • 수신 윈도우로, 수신 측에서 한 번에 처리할 수 있는 데이터 크기를 의미합니다.
  • TCP 헤더윈도우 크기(Window Size) 필드에 저장되며, 송신자는 이 값을 기반으로 전송 속도를 조정합니다.
  • 송신 속도 제한 요소 중 하나입니다.

2.5 혼잡 제어 (Congestion Control)

TCP는 네트워크 혼잡 상태를 완화하고 효율적인 데이터 전송을 보장하기 위해 혼잡 제어(Congestion Control) 메커니즘을 제공합니다.

  • 혼잡 제어네트워크의 대역폭 상태를 고려하여 데이터를 조정하며, 주요 요소로 CWND, MSS, AIMD, Slow Start, Congestion Avoidance가 포함됩니다.

CWND (Congestion Window)

  • 혼잡 윈도우로, 송신자네트워크 혼잡 상태를 고려하여 데이터를 전송할 수 있는 크기를 결정합니다.
  • 네트워크 상태에 따라 동적으로 크기를 조정하며, 혼잡 제어의 핵심적인 변수입니다.

MSS (Maximum Segment Size)

  • TCP 세그먼트의 최대 크기를 나타내며, 네트워크의 MTU(Maximum Transmission Unit)에 기반하여 설정됩니다.
  • 데이터가 MTU를 초과하지 않도록 세그먼트를 분할합니다.

AIMD (Additive Increase Multiplicative Decrease)

  • TCP 혼잡 제어의 기본 원칙으로, 네트워크 혼잡 상황에서 윈도우 크기를 조정하는 방식입니다.
  • Additive Increase (선형 증가):
    • 데이터 전송이 성공할 때마다 CWND를 선형적으로 증가 (보통 1씩 상승합니다).
  • Multiplicative Decrease (지수 감소):
    • 혼잡이 발생하면 CWND를 절반으로 줄여 네트워크 부하를 완화합니다.

Slow Start (느린 시작)

  • AIMD느린 초기 송신을 빠르게 하기 위한 기술입니다.

  • 혼잡 제어의 초기 단계로, CWND의 값을 작은 크기(1 MSS)로 설정하고, ACK를 받을 때마다 지수적으로 증가합니다.

  • CWND혼잡 임계값(ssthresh)에 도달하기 전까지는 계속해서 증가합니다.

  • 특징: 네트워크 혼잡 가능성을 줄이기 위해 천천히 시작하되, 초기에는 빠르게 데이터 전송을 늘립니다.

동작 과정:
1. 첫 번째 ACK를 받으면 CWND를 1 MSS에서 2 MSS로 증가.
2. 이후 ACK를 받을 때마다 CWND를 두 배로 증가(2 → 4 → 8...).

Congestion Avoidance (혼잡 회피)

  • CWND혼잡 임계값(ssthresh)에 도달하면, CWND선형적으로 증가시킵니다.
  • AIMD 원칙의 Additive Increase를 적용하여 네트워크 혼잡 상태를 예방합니다.

동작 과정:

  • RTT(Round Trip Time)마다 CWND를 1 MSS씩 증가.
    • 예: CWND가 10 MSS이면 다음 RTT에 11 MSS로 증가.

2.6 TCP의 활용 사례

  • 웹 브라우징: HTTP, HTTPSTCP 기반으로 작동.
  • 이메일: SMTP, POP3, IMAP 모두 TCP를 사용.
  • 파일 전송: FTP, SFTPTCP를 통해 신뢰성 있는 데이터 전송을 보장.

3. UDP (User Datagram Protocol)

UDP(User Datagram Protocol)비연결형 프로토콜로, 데이터의 신속한 전송을 목표로 설계되었습니다.

  • TCP와 달리 신뢰성보다는 효율성을 중시하며, 오류 검출이나 데이터 순서 보장을 제공하지 않습니다.

3.1 UDP의 주요 특징

  • 비연결형(Connectionless): 데이터 전송 전에 송신자와 수신자 간의 연결 설정 과정이 필요하지 않음.
  • 빠른 데이터 전송: 연결 설정 및 확인 과정이 없으므로 TCP보다 전송 속도가 빠름.
  • 단순한 헤더 구조: UDP 헤더8바이트로 구성되어 데이터 전송 효율이 높음.
  • 데이터 유실 허용: 일부 데이터 손실이 발생해도 전송을 계속 진행하며, 재전송 기능이 없음.

3.2 UDP 헤더 구조

UDP 헤더는 단순한 구조로 설계되어 있으며, 8바이트고정되어 있습니다.

필드 이름크기 (비트)설명
Source Port16송신 측 포트 번호
Destination Port16수신 측 포트 번호
Length16UDP 헤더와 데이터의 총 길이
Checksum16데이터의 무결성을 확인하는 값

UDP의 단순한 헤더 구조는 네트워크 리소스를 최소화하고 빠른 전송 속도를 가능하게 합니다.

3.3 UDP의 장단점

UDP의 장점

  • 빠른 데이터 전송

    • TCP보다 연결 설정, 흐름 제어, 혼잡 제어 등이 없으므로 더 빠르게 데이터를 전송 가능.
    • 지연 시간이 중요한 실시간 애플리케이션에서 적합.
  • 브로드캐스팅 및 멀티캐스팅 지원

    • UDP브로드캐스팅(Broadcasting)을 지원하여 동일 네트워크에 연결된 모든 컴퓨터에 데이터 송신 가능.
    • 또한 멀티캐스팅(Multicasting)을 통해 특정 그룹에 데이터 전송 가능.
  • 단순한 구조

    • 헤더가 단순하여 네트워크 오버헤드가 적고, 효율적인 데이터 전송이 가능.

UDP의 단점

  • 신뢰성 부족: 데이터 손실 시 재전송하지 않으며, 데이터 순서 보장이 없음.
  • 오류 검출 한계: 체크섬을 통해 오류를 감지하지만 수정은 불가능.
  • 데이터 흐름 제어 없음: 네트워크 혼잡 상태에서도 데이터 전송을 멈추지 않음.

3.4 UDP의 활용 사례

UDP데이터 유실을 허용하면서도 빠른 전송이 중요한 서비스에 주로 사용됩니다.

주요 활용 분야

  • 동영상 스트리밍

    • 실시간 비디오 스트리밍(YouTube Live, Twitch 등)에서 주로 사용.
    • 일부 데이터 손실이 발생하더라도 빠른 전송이 우선시됨.
  • 온라인 게임

    • 지연 시간(Latency)이 중요한 환경에서 TCP보다 UDP가 적합.
    • 예: FPS 게임, MOBA 게임.
  • VoIP (Voice over IP)

    • 인터넷 전화(VoIP)에서 UDP를 사용하여 음성을 실시간으로 전송.
  • DNS (Domain Name System)

    • 네트워크에서 도메인 이름을 IP 주소로 변환할 때 UDP를 사용.

4. TCP & UDP 비교

구분UDPTCP
연결 방식비연결형(Connectionless)연결형(Connection-oriented)
데이터 전송 속도빠름느림 (연결 설정 및 흐름 제어 과정 포함)
신뢰성신뢰성 없음, 데이터 유실 허용신뢰성 보장, 데이터 손실 시 재전송
브로드캐스팅지원지원하지 않음
데이터 유실일부 유실 가능, 전송 지속데이터 유실 시 재전송
활용 사례실시간 스트리밍, 온라인 게임, DNS웹 브라우징, 이메일, 파일 전송 등

TCP와 UDP의 선택 기준

  • TCP
    • 데이터의 신뢰성정확성이 중요한 경우
    • 예: 이메일, 웹 브라우징, 파일 전송
  • UDP
    • 빠른 데이터 전송이 우선이며, 데이터 유실을 허용할 수 있는 경우
    • 예: 스트리밍, 실시간 게임

마무리

이번 포스팅에서는 네트워크 전송 계층의 핵심 요소인 TCPUDP를 자세히 살펴보았습니다.

  • Transport 계층은 송신자와 수신자 간 데이터를 효율적이고 신뢰성 있게 전달하는 역할을 합니다.

    • 이를 위해 포트 번호를 사용해 데이터를 특정 응용 프로그램으로 전달하고, TCP와 UDP라는 두 가지 주요 프로토콜을 통해 데이터를 전송합니다.
  • TCP연결 지향형 프로토콜로, 데이터의 순서 보장신뢰성 있는 전송을 제공하며, 흐름 제어혼잡 제어를 통해 네트워크 성능을 최적화합니다.

    • 하지만, 설정과 제어 과정에서 추가적인 지연이 발생할 수 있습니다.
  • UDP비연결형 프로토콜로, 빠른 데이터 전송단순한 구조를 자랑하며, 동영상 스트리밍, 온라인 게임, VoIP와 같이 실시간 처리가 중요한 서비스에서 주로 사용됩니다.

    • 그러나 신뢰성이 부족하여 데이터 손실 가능성이 있습니다.
  • TCP와 UDP의 선택 기준

    • TCP
      • 데이터의 신뢰성정확성이 중요한 경우
      • 예: 이메일, 웹 브라우징, 파일 전송
    • UDP
      • 빠른 데이터 전송이 우선이며, 데이터 유실을 허용할 수 있는 경우
      • 예: 스트리밍, 실시간 게임

다음 포스팅에서는 응용 계층 프로토콜 중에서 HTTPREST APIHTTPS 프로토콜을 다루도록 하겠습니다.

profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

0개의 댓글