[Network] Transport Layer 6 - transport-layer 기능의 발전

chxghee·2024년 11월 7일

앞서 우리는 기본적인 TCP프로토콜을 배웠다.

하지만 네트워크 통신이 필요한 상황에 따라 문제 상황이 생기고 TCP는 이를 해결하기 위해 다른 기능이 추가적으로 필요할 수 있다.

시나리오

이 표는 네트워크 상황별 주요 과제를 요약한 것이다.

  1. Long, fat pipes (large data transfers)
    큰 데이터 전송이 이루어지는 환경에서 많은 패킷이 동시에 전송되며(“in flight”), 패킷 손실이 발생하면 전체 전송 과정이 중단될 수 있음.
    (이는 고속 전송 링크에서 중요한 문제입니다.)

  2. Wireless networks
    무선 네트워크는 잡음이나 장애물 때문에 패킷 손실이 발생할 수 있다
    -> TCP는 이러한 손실을 혼잡으로 인식
    -> so, sending rate를 떨어뜨려 성능 저하 발생가능

  3. Long-delay links
    지연이 긴 링크(예: 위성 통신)는 매우 긴 왕복 시간(RTT)을 유발.
    성능저하 가능

  4. Data center networks
    데이터 센터 네트워크는 매우 낮은 지연 시간을 요구하기 때문에,
    지연에 민감한 애플리케이션의 성능이 저하될 수 있다. (금융거래, 실시간 어플)

  5. Background traffic flows
    백그라운드 트래픽은 우선순위가 낮고, “Background” TCP 흐름으로 처리된다.
    (패킷의 우선순위에 따라 전송을 조절 할 수 없다)

하지만 이렇게 여러 TCP 변형 프로토콜의 유일한 공통점은

  1. TCP 세그먼트 포맷을 사용하고
  2. 네트워크 혼잡에 직면하여 서로 ‘공정하게’ 경쟁해야 한다는 점이다.

위에 여러 TCP 변형 프로토콜을 지원하기 위해 트랜스포트 계층의 기능들을 어플리케이션 계층으로 올려 UDP의 위에 존재하도록 하는 것이다.

이렇게 하면 어플의 구현으로 상황별 문제를 해결할 수 있다.
(ex http3 QUIC)

QUIC (Quick UDP Internet Connections)

UDP를 사용하면서 TCP에서 제공하는 혼잡제어, 신뢰성, 연결지향적인 기능을 어플리케이션 계층에서 구현하여 지원하는 것이다.

구글 서버, 유튜브 크롬 같은데서 사용되고 있다.

QUIC의 기능

  1. 에러와 혼잡 제어
  • QUIC도 loss를 통해 혼잡 상황을 탐지하고,
    Reno, Cubic처럼 전송 속도를 줄여 혼잡 제어를 수행.
  1. Connection Establishment (연결 설정)
  • QUIC은 연결 설정 시 신뢰성, 혼잡 제어, 인증, 암호화를 수행하며, 한 번의 RTT 만으로 연결 상태를 설정할 수 있다.
    (3-way handshake 보다 빠르게 빠름)
  • 한 번의 RTT 내에 필요한 모든 상태를 설정하므로, QUIC은 연결을 설정할 때 매우 빠름

  1. Multiple Application-level Streams (멀티플렉싱)
  • 병렬적으로 TCP를 연결하지 않고도 하나의 커넥션에서 stream을 분리하여 멀티플랙싱이 가능하다.

  • 이전 방식에서는 패킷 손실이 발생하면 모든 요청이 지연될 수 있다(HOL Blocking).
    QUIC은 각 스트림을 독립적으로 처리하여, 한 스트림에서 손실이 발생하더라도 다른 스트림에 영향을 주지 않는다.



추가 부록

Go-Back-N FSM

송신자

수신자

수신자는 다음에 기대하는 패킷의 시퀀스 번호(expectedseqnum)만 기억한다.

TCP 송신자

TCP 연결

Handshake

연결 종료

TIMED_WAIT 상태에서 2 * MSL 동안 기다리는 이유?

  1. 네트워크 상의 유실된 패킷 또는 재전송된 패킷을 처리하기 위함.
  2. 지연된 패킷이 새로운 연결에 영향을 주는 것을 방지하기 위함.

➡️ 이 시간 동안 기다림으로써 TCP는 안전하고 명확한 연결 종료를 보장한다.

TCP Throughput

long fat pipes에서 TCP의 동작

long fat pipes 란 대용량 데이터를 고속으로 전송하는 네트워크 링크를 의미

예시
1500 바이트 세그먼트들, 100ms RTT, 10Gbps 처리량을 원하는 상황.

이때 윈도우의 크기 : 1500 * 8 * W(윈도우크기) / 0.1초 = 10 Gbps
를 만족하는 W = 83,333 이다

10기가의 처리량을 만족하려면 83,333개의 세그먼트를 동시에 전송(in-flight)가능해야 한다.

처리량과 세그먼트 손실확률의 관계

위에 예제에서 손실확률 L 을 구해보면

요구되는 손실률 L = 2 * 10^{-10} 로,
10 기가를 만족하려면 이러한 극도로 낮은 손실률을 만족해야 한다.

	•	TCP throughput: 목표로 하는 네트워크 처리량 (10 Gbps)
	•	MSS: 최대 세그먼트 크기 (1500 바이트 → 1500 × 8 비트 = 12000 비트)
	•	RTT: 왕복 시간 (100ms → 0.1초)
	•	L: 패킷 손실 확률 (구하려는 값)

하지만, 일반적인 TCP 환경에서는 이러한 손실률을 유지하기가 매우 어렵다.

이러한 장거리와 고속 전송을 지원하기 위해 몇 가지 고속 TCP 버전이 개발되었다.

profile
다 같이 화이팅! 🙋‍♂️

0개의 댓글