[TCP] Congestion Control (혼잡제어)

이원찬·2023년 12월 2일
0

네트워크

목록 보기
4/8

이 글은 컴퓨터 네트워크 수업내용을 정리한 글임을 알림니다.

Congestion 란?

송신자가 네트워크가 처리하기엔 너무 많이, 빨리, 패킷을 보낼때를 의미한다!!
=> (트래픽 몰릴때!!)

그렇다면 Congestion Control 이란?

호스트들이 데이터를 송수신 할때

라우터가 명시적으로 혼잡 정보를 호스트들에게 알려주어 혼잡을 예방하는것!!

용어 설명

cwnd(혼잡 윈도우)

송신측은 자신의 최종 윈도우 크기를 정할 때 두가지중 작은 것을 선택한다.

  1. 수신측이 보내준 윈도우 크기인 수신자 윈도우(RWND)
  2. 자신이 네트워크 상황을 고려해 정한 혼잡 윈도우(CWND)

네트워크 상황을 고려해 송신자 측에서 정한 윈도우를 혼잡 윈도우라 한다!!

위 사진은 Sender의 시퀸스 넘버 공간이다. (시퀸셜 넘버에 사용되는 숫자들!)
4가지 필드가 보인다.

  1. 패킷을 보낸뒤 ACK를 받은 필드
  2. 보냈지만 아직 ACK를 받지 못한 필드
  3. 사용 가능하지만 아직 사용하지 않는 필드
  4. 사용하지 못하는 시퀸스 필드

이때 혼잡 윈도우 == cwnd 는 2번 + 3번이다.

그리고 이때
TCP rate=cwnd / RTT 이다.

혼잡을 회피하는 방법

1. AIMD

Additive Increse/Multicative Decrease의 약자로

혼잡이 발생하기 전까지 전송률을 높히다가 손실이 발생하면 반으로 줄이기!

위 사진을 보면 전송률을 늘이다가 특정 구간에서 반으로 전송률을 줄이는 모습을 볼 수 있다.

Decrease 방법 두가지

  1. TCP Reno ( 세개 중복된 ack가 오면 절반으로 줄인다. )
  2. TCP Tahoe ( segment size 가 최대면 1로 줄인다! ) (완전 트래픽이 몰리는 상황)

2. Slow Start

처음엔 cwnd사이즈가 1이다…

처음에 요청을 1번 , 그다음 2번, 4번…. 기하급수적으로 cwnd 사이즈를 증가하는것!

그리고 혼잡 발생시 cwnd를 1로 줄여 버린다!!

3. TCP CUBIC (AIMD보다 좋은 방법?)

  • Slow Starter는 비례적으로 증가 하지만
  • CUBIC은 특정 시간 K일때 까지는 세제곱 (cube) 씩 증가하지만 k에서 멀어질때는 천천히 증가하는것!

위 사진에서는 세제곱을 하여 점선 퍼런 그래프가 휘어진 모습!!

4. Delay-based TCP congestion control (딜레이 기반 혼잡제어)

이전 slow start와 cubic의 문제점

패킷이 손실 날때까지 일단 보낸다!!!
만약 병목이 있는 곳에서 이렇게 한다면...? (매우 안좋다!!)

그래서 먼저 얼만큼 한가한지 판단해본다!!

RTT를 측정하고 대역폭을 정한뒤 혼잡을 제어 한다!

5. Explicit congestion notification (ECN)

명시적으로 혼잡을 알리는 방법

그냥 간단하게

  1. 송신자가 ECN을 보내면 라우터에 의해(네트워크 사업자에 의해)
  2. ECN이 수정되고 (정확히는 IP헤더의 ToS피드 부분이)
  3. 목적지에서 혼잡도를 판단하여 혼잡도와 함께 ACK를 응답하여 혼잡을 제어하는 기법!!
profile
소통과 기록이 무기(Weapon)인 개발자

0개의 댓글