흐름 제어
슬로우 스타트이란?
handshaking 이후 송신측에서 네트워크 상태에 따라 흐름을 제어하는 기법
확인 응답을 받을 때마다 혼잡 윈도우의 크기를 2**n개 증가하며 패킷 전송
윈도우 size = min( rwnd(수신측 여유공간), cwnd (혼잡윈도우 크기) )
혼잡 제어
네트워크 전반의 문제이기 때문에 완전한 해결은 어려움.
- 라우터의 큐가 over됨.
- 버퍼의 처리속도가 감소됨.
예방적 혼잡 제어
- 사전에 전송할 데이터 양을 정한다. (망 사업자와 사용자간의 계약)
- 라우터가 미리 정의된 우선순위에 따라 패킷 전송을 조정해준다
반응적 혼잡 제어
네트워크에서 체증이 발생할 때마다 트래픽 양을 감소시킨다.
혼잡 발견 (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 알고리즘 : 네트워크 상황에 따라 패킷 여러 개를 모아뒀다 한방에 전송
네트워크 속도가 빠르면 : 크기가 작은 패킷이 생겨도 처리 가능
네트워크 속도가 늦으면 : 데이터를 모아 전송하므로 네트워크에 불필요한 오버헤드 감소