[CS] 트랜스포트 레이어(UDP, TCP)

2025. 4. 27. 20:45·CS/네트워크

🚀 UDP 체크섬과 오류 검출

 UDP(User Datagram Protocol)란?

비연결형 프로토콜로, 신속한 데이터 전송을 제공하지만 신뢰성 보장은 하지 않는다.

이때 데이터를 전송하면서 발생할 수 있는 오류를 검출하기 위해 체크섬이라는 필드를 사용한다.

 

UDP 체크섬은 데이터가 손상되었는지 여부를 판단하는 데 사용된다.

 

UDP 헤더에는 총 4개의 필드가 있다.

  • Source Port (16비트)
  • Destination Port (16비트)
  • Length (16비트)
  • Checksum (16비트)

이 중 Checksum 필드는 데이터 전송 중 오류가 있는지 확인하기 위한 필드이다.

수신 측은 이 체크섬을 다시 계산해 전송된 값과 비교한다.

일치하지 않으면 데이터가 손상된 것으로 판단한다.

 

UDP 체크섬은 전송 계층 + 일부 네트워크 계층의 정보를 모두 포함하여 계산한다.

정확히 아래 세 가지 요소를 모두 합쳐서 계산한다.

  • UDP 가짜 헤더 (Pseudo Header)
  • UDP 헤더
  • UDP 데이터 (Payload)

Pseudo Header 구성

Source IP Address 32비트 송신자 IP
Destination IP Address 32비트 수신자 IP
Protocol 8비트 값은 항상 17 (UDP를 의미)
UDP Length 16비트 UDP 전체 길이 (헤더 + 데이터)

 

체크섬 계산 과정

  • 위에 언급한 모든 데이터를 16비트 단위로 나눈다.
  • 각 16비트 값을 모두 더한다.
  • 더하는 과정에서 오버플로(17비트)가 발생하면 → 맨 앞 비트를 다시 뒤에 더한다. (1의 보수 합).
  • 계산된 총합의 1의 보수(반전)를 취한 값이 UDP 체크섬이다.

수신 측에서의 동작

  • 수신자는 Pseudo Header + UDP Header + 데이터를 같은 방식으로 다시 계산한다.
  • 계산된 체크섬이 수신된 체크섬과 다르면 → 데이터 손상으로 판단한다.
  • UDP는 오류 복구는 하지 않고 그냥 버린다(drop) → 애플리케이션 계층에서 재전송 로직 필요.

 

🚀 신뢰적 데이터 전송 원리(SR, GBN)

신뢰적 데이터 전송이란, 데이터의 손실, 오류, 순서 뒤바뀜 없이 수신 측에 정확하게 전송되도록 보장하는 메커니즘을 의미한다.

 

GBN (Go-Back-N) 프로토콜

  • Sliding Window Protocol의 일종.
  • 송신 측은 최대 N개의 패킷(N=윈도우 크기)을 연속해서 전송할 수 있다.
  • 수신 측은 순서대로만 수신을 허용하며, 번호가 어긋난 패킷은 모두 폐기한다.

동작 방식

  • 송신자는 각 패킷마다 시퀀스 번호(Sequence Number)를 부여한다.
  • 송신자는 ACK를 받지 않은 상태에서도 윈도우 크기 한도 내에서는 추가 전송이 가능하다.
  • 수신자는 수신한 마지막 정상 순서 패킷의 시퀀스 번호에 대한 ACK만 송신한다.
  • 패킷 손실 또는 오류 발생 시, 수신자가 ACK 누락 → 송신자는 오류가 발생한 패킷부터 그 이후 모든 패킷을 재전송한다.

특징

  • 장점: 구현이 단순하다.
  • 단점: 하나의 패킷 손실로 인해 정상 수신된 이후의 패킷도 모두 재전송해야 해서 비효율적이다.

 

SR (Selective Repeat) 프로토콜

  • GBN의 비효율성을 개선한 프로토콜.
  • 송신 측과 수신 측 모두 개별 패킷 단위로 관리하며, 순서와 관계없이 수신하고 개별적으로 ACK를 송신한다.

동작 방식

  • 송신자는 윈도우 크기 내에서 여러 패킷을 연속적으로 전송한다.
  • 수신자는 정상 수신된 패킷은 버퍼에 저장하고, 해당 패킷에 대해 개별적으로 ACK를 보낸다.
  • 패킷 손실 시, 손실된 패킷만 재전송 요청하여 효율성을 높인다.
  • 수신자는 버퍼링을 통해 순서가 맞지 않는 패킷을 임시 저장 후, 모든 패킷이 도착하면 상위 계층에 순서대로 전달한다.

특징

  • 장점: 오류 발생 시에도 필요한 패킷만 재전송하여 데이터 전송 효율이 높다.
  • 단점: 수신 측에서 버퍼링 및 순서 재정렬 로직이 필요하므로 구현이 복잡하다.

 

🚀  TCP 3-way handshake, 4-way handshake

TCP(Transmission Control Protocol)?

인터넷에서 데이터를 신뢰성 있게 전송하기 위해 사용하는 전송 계층 프로토콜이다.

 

TCP가 필요한 이유?

인터넷에서 데이터를 주고받을 때 그냥 보내면 순서 뒤바뀜, 유실, 중복 같은 문제가 발생할 수 있으므로 정확하고 순서대로 데이터를 전송하도록 보장한다.

 

TCP의 주요 특징

  • 연결 지향형
    • 데이터 전송 전 반드시 연결(3-way handshake)을 먼저 설정해야 한다.
  • 신뢰성 보장
    • 전송된 데이터가 도착했는지 확인하고 누락 시 재전송한다.
  • 순서 보장
    • 데이터가 순서대로 도착하지 않아도 정렬해준다.
  • 흐름 제어
    • 수신자가 감당 가능한 속도로 전송을 조절한다.
  • 혼잡 제어
    • 네트워크가 혼잡해지지 않도록 전송 속도를 조절한다.
  • 바이트 스트림 기반
    • 데이터가 연속된 바이트로 전송된다.

 

TCP 3-Way Handshake

클라이언트와 서버가 TCP 연결을 정상적으로 설정하기 위한 3단계 절차이다.

1.서로 통신 가능 상태인지 확인하고 2. 시퀀스 번호를 교환하여 데이터 순서를 관리할 수 있게 설정한다.

 

통신 과정

1) 클라이언트가 서버로 연결 요청(SYN)을 하고, 시퀀스 번호 X를 보낸다.

2) 서버가 요청을 수락하고(ACK X+1) 자신도 연결 요청(SYN) Y를 보낸다.

3) 클라이언트가 서버의 요청(SYN)을 수락하고 ACK(Y+1)을 보낸다.

연결완료!

TCP 4-Way Handshake

TCP 연결을 정상적으로 종료하기 위한 절차이다.

 

통신 과정

1) 클라이언트가 서버로 연결 종료 요청(FIN)을 보낸다.

2) 서버가 클라이언트의 종료 요청을 수락(ACK)한다.

3) 서버가 클라이언트로 연결 종료 요청(FIN)을 보낸다.

4) 클라이언트가 서버의 종료 요청(ACK)을 수락한다.

연결 종료!

 

🚀 TCP 혼잡제어(AIMD, 슬로우 스타트)와 흐름제어

흐름제어란?

수신자가 감당할 수 있는 만큼만 데이터를 보내도록 송신자의 속도를 조절하는 것

 

방법: 슬라이딩 윈도우

수신자는 자신이 처리 가능한 버퍼 크기를 TCP 헤더에 명시한다.

송신자는 이 값을 참고해 한 번에 보낼 수 있는 데이터 양을 제한한다.

 

동작 예시

  1. 수신자 버퍼: 10KB
  2. 송신자: RWND 확인 → 최대 10KB까지만 보냄
  3. 수신자가 일부 처리 후 RWND = 6KB 로 줄이면, 송신자도 6KB까지만 보냄

 

혼잡제어란?

네트워크가 혼잡해지지 않도록 전송 속도를 동적으로 조절하는 기술로, 네트워크 혼잡의 징후는 주로 패킷 손실로 감지한다.

 

슬로우 스타트 (Slow Start)

  • 처음에는 작은 윈도우(cwnd = 1 MSS)로 시작
  • 매 RTT마다 2배씩 증가 (지수 증가)
  • ssthresh (slow start threshold) 에 도달하면 AIMD로 전환

 AIMD (Additive Increase, Multiplicative Decrease)

  • 느리게 증가(Additive Increase), 급격하게 감소(Multiplicative Decrease)
  • RTT마다 cwnd += 1 (선형 증가)
  • 패킷 손실 감지 시 → cwnd /= 2 (절반으로 줄임)

혼잡 회피 (Congestion Avoidance)

  • ssthresh 이후로는 AIMD 방식 적용
  • 느리게 천천히 증가 → 혼잡을 방지

빠른 재전송 & 빠른 복구 (Fast Retransmit & Fast Recovery)

  • 중복 ACK 3개 수신 시, 패킷 유실로 간주 → 즉시 재전송
  • 이때 ssthresh = cwnd / 2, cwnd = ssthresh
    (슬로우 스타트로 돌아가지 않고 혼잡 회피 단계로 복구)

'CS > 네트워크' 카테고리의 다른 글

[CS] 애플리케이션 레이어 2  (0) 2025.04.20
[CS] 애플리케이션 레이어 1 (HTTP)  (0) 2025.04.11
[CS] 컴퓨터 네트워크의 기본 개념  (0) 2025.04.06
'CS/네트워크' 카테고리의 다른 글
  • [CS] 애플리케이션 레이어 2
  • [CS] 애플리케이션 레이어 1 (HTTP)
  • [CS] 컴퓨터 네트워크의 기본 개념
dev_ajrqkq
dev_ajrqkq
알고리즘 천재가 될 거야
  • dev_ajrqkq
    기록이 자산이다
    dev_ajrqkq
  • 전체
    오늘
    어제
    • 분류 전체보기 (147)
      • Front-end (0)
      • Back-end (11)
        • Spring (1)
        • Java (8)
      • CS (9)
        • 데이터베이스 (5)
        • 네트워크 (4)
      • Algorithm (80)
      • 이것저것 (0)
      • 버그잡기 (1)
      • TIL (37)
      • 후기 (1)
      • 취준 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      항해99
      개발자취업
      99클럽
      티스토리챌린지
      TypeScript
      Til
      코딩테스트준비
      오블완
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    dev_ajrqkq
    [CS] 트랜스포트 레이어(UDP, TCP)
    상단으로

    티스토리툴바