흐름제어 & 혼잡제어

신명철·2022년 2월 15일
4

네트워크

목록 보기
3/17

흐름제어

  • 송신측과 수신측 사이의 데이터 처리 속도 차이를 해결하기 위한 기법이다
  • 송신 측의 전송량 > 수신측의 처리량인 경우, 패킷이 수신 측의 큐를 넘어 손실될 수 있어서 송신측 패킷 전송량을 제어해줘야 한다.

흐름제어 두가지 방식

1. Stop and Wait (정지-대기)

매번 전송한 패킷에 대한 응답을 받아야 그 다음 패킷을 전송할 수 있다.

2. Sliding Window (슬라이딩 윈도우)

수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 해서 데이터 흐름을 동적으로 조절한다.

송신 측은 ACK 라는 프레임을 받게 되면 ACK 프레임에 따른 프레임의 수 만큼 오른쪽으로 경계가 확장된다.

윈도우?
수신, 송신 스테이션 양쪽에서 만들어진 버퍼 크기!


혼잡제어

  • 네트워크 혼잡을 피하기 위해 송신 측에서 보내는 데이터의 전송 속도를 제어하는 것
  • 송신 측 데이터 전달과 네트워크 데이터 처리 속도 차이를 해결하기 위한 기법
  • 한 라우터에 데이터가 몰려서 모든 데이터를 처리할 수 없는 상황에 이르렀을 때, 호스트들은 계속해서 재전송을 하고 결과적으로 혼잡만 가중시켜 오버플로우나 데이터 손실이 발생한다.

혼잡제어 알고리즘

TCP 혼잡제어 알고리즘(TCP congestion control algorithm)은 다음의 중요한 구성요소들을 갖는다.

  1. 슬로 스타트(slow start)
  2. 혼잡 회피(congestion avoidance)
  3. 빠른 회복(fast recovery)
  4. 빠른 재전송(fast retransmit)

이 중 슬로스타트혼잡회피는 TCP의 필수 요소이다. 다만 수신된 ACK들에 대응해 cwnd(congestion window) 크기를 얼마나 증가시키냐는 것이 서로 다르다. 빠른회복은 TCP 송신자들에게는 필수 사항은 아니다.

cwnd?
혼잡 윈도우는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 비율을 제한한다. 특히 송신하는 쪽에서 확인응답이 안된 데이터의 양은 cwnd 와 rwnd의 최솟값을 초과하지 않는다.

1. 슬로우 스타트

  • 전송 성공 시 ACK 패킷마다 cwnd를 1씩 증가시킨다. 즉, 한 주기가 끝나고 나면 cwnd는 2배배가 된다.
  • 혼잡 현상이 발생하면 cwnd 를 1로 떨어뜨린다.

  • 한번 혼잡 현상이 발생하고 나면 혼잡 현상이 발생했던 cwnd 의 절반까지는 이전처럼 증가시키다가 그 이후부터는 완만하게 1씩 증가시킨다.
  • 즉, 임계 값(ssthresh, slow start threshold)을 절반으로 줄인다.
  • 매 전송마다 2배씩 증가하기 때문에 데이터의 크기가 지수함수적으로 증가한다.
  • 파악한 임계 값에 도달하기 전까지 2배씩 증가, 임계값 도달 시 혼잡 회피 단계로 넘어간다.

2. 혼잡 회피

  • 윈도우 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 크기가 올라감
  • 이를 회피하기 위해 cwnd 크기를 전송 시마다 1 씩 증가시킨다.
  • 수신 측으로부터 일정 시간동안 ACK 를 받지 못하면, 타임 아웃이 발생해 cwnd 크기를 1로 줄인다.
  • 동시에 임계 값을 패킷 손실이 발생했을 때의 cwnd 크기의 1/2로 줄인다.

3. 빠른 회복

  • 혼잡한 상태가 되면 cwnd 를 1이 아니라 절반으로 줄이고 선형 증가 시키는 방법
  • 빠른 회복 정책이 적용되면 이후엔 순수한 AIMD 방식으로 동작

4. 빠른 재전송

  • 패킷을 받는 수신자 입장에서 세그먼트로 분할된 내용이 순서대로 도착하지 않는 경우가 있다.
  • 수신 측에서 패킷을 받을 때 먼저 올 패킷보다 다음 패킷이 먼저 도착해도 ACK 를 보냄
  • 단, 이 때 순서대로 잘 도착한 패킷의 마지막 순번을 ACK 에 실어서 보냄
  • 따라서 중간에 패킷이 손실되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게 되는 것이다. 이것을 감지하면 문제가 되는 순번의 패킷을 재전송할 수 있다.
  • 빠른 재전송은 중복된 순번의 패킷을 3개 받으면 재전송한다.
  • 재전송하는 경우 혼잡 상태로 간주하고 혼잡 회피를 한다.

AIMD(Addictive Increase Multiplicative Decrease)

  • 합 증가/ 곱 감소 알고리즘 이라고도 한다.
  • 처음 패킷 하나를 보내 패킷이 문제없이 도착하면 CWND(Congestion Window, 혼잡 윈도우)를 1씩 증가시키면서 전송하는 방법
  • 패킷 전송이 실패하거나 타임아웃이 발생하면 CWND를 1/2로 감소시킨다.
  • 호스트가 하나의 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 불리하지만 시간이 지날수록 평형 상태로 수렴한다
  • 단점은, 초기 넓은 대역폭을 활용하지 못하고 미리 혼잡 상태를 감지하지 못하고 혼잡해지고 나서야 대역폭을 줄이는 방식이라는 점이다.
profile
내 머릿속 지우개

0개의 댓글