전공/네트워크

[네트워크] #14 혼잡 제어 공식, TCP 혼잡 제어

Campus Coder 2023. 10. 23. 03:52
728x90
반응형

목차

  1. Congestion
  2. Causes & cost of congestion
  3. TCP 혼잡 제어
  4. TCP 혼잡 제어 알고리즘

1. Congestion

네트워크에 트래픽(사용량)이 많이 몰리는 상황

 

혼잡 징후

- lost packets(라우터의 버퍼 오버플로우)

- long delays(라우터 버퍼 큐잉 딜레이)

 

flow control vs. congestion control

- flow control: 상대방이 데이터를 받을 수 있을 때, 그 범위 내로 데이터를 보내는 것

- congest control: 네트워크 관점에서 데이터가 많아지면 제어하는 것


2. Causes & cost of congestion

scenario 1

조건

  • 송신기 2개, 수신기 2개
  • 라우터 1개, 버퍼 크기 무한
  • 링크 출력 성능 R
  • 재전송 없음

 

각 송신기에서 아무리 빨리 데이터를 보내도 링크 출력 성능이 R이므로 R/2가 최고 성능이 됨

이상적인 시나리오에서도 패킷 도착 속도가 링크 용량에 근접함에 따라 큰 대기열 지연이 발생

 

scenario 2

조건

  • 라우터 1, 버퍼 크기 유한
  • 재전송 있음(패킷 로스 발생 가능, time-out)
    • 응용 계층 수신량과 송신량이 같음
    • 재전송이 있으므로 전송 계층 input ≥ 응용 계층 input

 

버퍼가 가득 차면 패킷이 로스되어 재전송해야 하므로 수신량이 송신량에 미치지 못함

 

버퍼가 가득차서 로스가 발생하지 않더라도 버퍼가 혼잡하면, 패킷이 라우터에 머물다가 time-out이 발생하고 A에서 패킷을 하나 더 보내게 되어 동일한 패킷이 두 개 전송될 수도 있음

 

scenario 3

호스트 D에서 호스트 B로 데이터를 보내려고 할 때, 두 번째로 지나는 라우터는 혼잡한 상태임(호스트 A가 보낸 패킷이 대부분)

→ 패킷 로스가 많이 일어남

 

따라서 input이 어느 수준 이상 많아지면 output는 급격하게 떨어짐


3. TCP 혼잡 제어

Approaches to Congestion Control

크게 2가지 방식으로 혼잡 제어에 접근할 수 있음

  • End-to-End congestion control
    - 호스트 A와 B가 직접 데이터 유실량 등을 확인하며 데이터를 보내는 속도를 조절
  • Network-assisted congestion control
    - 라우터들이 자신의 버퍼 상황을 체크하고 혼잡도를 호스트한테 알림

 

TCP congestion control

송신자가 전송 속도(window size)를 증가시키며 로스가 발생할 때까지 사용 가능한 대역폭을 탐색

  • cwnd: congestion window
  • 로스가 감지될 때까지 RTT마다 cwnd를 1 MSS씩 증가
  • 로스 후 cwnd를 반으로 감소

TCP는 결국 cwnd와 rwnd 중 작은 값을 기준으로 데이터를 전송

→ TCP 전송 속도는 cwnd/RTT에 비례(rwnd를 무시할 경우)


4. TCP congestion-control algorithm

  • slow start
  • congestion avoidance
  • fast recovery

 

TCP slow start

cwnd 초기값 = 1 MSS

연결이 시작되면 로스가 발생할 때까지 MSS를 2배씩 증가

초기값은 작지만 cwnd가 빠르게 증가

 

Congestion Avoidance

ssthresh: slow start threshold

ssthresh = 마지막 혼잡이 발생했을 때의 전송 속도의 절반

  1. 로스가 발생하면 cwnd 1로 초기화
  2. slow start 방식으로 cwnd 크기 2배씩 증가
  3. ssthresh 값에 다다르면 1씩 cwnd 증가

Fest Recovery

duplicate ACKs가 3개 발생하면 ssthresh 값에서 3을 더한 값으로 cwnd 값 초기화

이후 1씩 cwnd 값 증가

 

Summary

 

TCP Fairness

각 TCP 커넥션이 공정한 양의 데이터를 전송하도록 하는 것

각 TCP 커넥션이 로스가 발생할 때마다 cwnd를 조정하며 그 값은 점점 비슷해짐

728x90
반응형