본문 바로가기

카테고리 없음

흐름제어, 혼잡제어

흐름 제어

슬로우 스타트이란?

handshaking 이후 송신측에서 네트워크 상태에 따라 흐름을 제어하는 기법

확인 응답을 받을 때마다 혼잡 윈도우의 크기를 2**n개 증가하며 패킷 전송

윈도우 size = min( rwnd(수신측 여유공간), cwnd (혼잡윈도우 크기) )

 
 
 

혼잡 제어

네트워크 전반의 문제이기 때문에 완전한 해결은 어려움.

- 라우터의 큐가 over됨.

- 버퍼의 처리속도가 감소됨.

예방적 혼잡 제어
  1. 사전에 전송할 데이터 양을 정한다. (망 사업자와 사용자간의 계약)
  2. 라우터가 미리 정의된 우선순위에 따라 패킷 전송을 조정해준다
반응적 혼잡 제어

네트워크에서 체증이 발생할 때마다 트래픽 양을 감소시킨다.

 

혼잡 발견 (Ack timeout, Ack loss) -> 혼잡 대응 (통보, 보내는 속도 조절)

* 속도 조절 : slow start, 다시 0개부터 전송

 

- End-to-End 방식 (고전적)

네트워크 상태를 모르고 TCP에서 예측하기

맨 오른쪽 : 한개씩 증가

초기 cwnd를 1 MSS (Maximum segment size)로 설정해 패킷 1개만 전송

slow start로 시작해 cwnd와 rwnd중 더 작은 값까지 cwnd를 2**n배씩 증가

delay가 생기면 그때의 패킷 양의 1/2를 기준으로 잡고 다시 0개부터 전송

기준까지는 slow start로 증가하고 기준을 넘어서 Maximum까지는 한개씩 증가해 전송

 

 

 

- Network-assisted 방식 (최근)

혼잡이 일어났다는 것을 IP Header에 담아 송신자에게 보낸다.

 
 
 

+ AIMD(additive increase multiplicative decrease)

1. 손실이 일어날 때까지 1 MSS 증가

2. 손실이 발생하면 과감하게 1/2로 줄임.

1, 2 반복

 
 
 

동일한 Ack를 3개 받은 경우 : 심각하지 않은 혼잡

=> timeout되기 전 빠른 재전송

=> Cwnd를 1/2로 줄이고 1씩 증가시키는 빠른 회복

 
 
 
 

대용량 데이터는 윈도우 기법으로 전송

Nagle 알고리즘 : 네트워크 상황에 따라 패킷 여러 개를 모아뒀다 한방에 전송

네트워크 속도가 빠르면 : 크기가 작은 패킷이 생겨도 처리 가능

네트워크 속도가 늦으면 : 데이터를 모아 전송하므로 네트워크에 불필요한 오버헤드 감소