CS

[Network] TCP/IP 흐름제어 & 혼잡제어

D0HAN. 2021. 7. 26. 06:29

>>TCP란?

☑️ 흐름 제어? 혼잡 제어?

: 혼잡 상황이 발생하면 네트워크 자원이 낭비되므로 혼잡 상황을 최소화 하기 위한 기법

  • 흐름 제어송신측수신측의 데이터 처리 속도 차이를 해결하기 위한 기법.
                         송신측의 데이터 전송량 제어
  • 혼잡 제어: 송신측의 데이터 전달네트워크 상의 데이터 처리 속도 차이를 해결하기 위한 기법.
                        송신측의 데이터 전송 속도 제어

 


✅ 흐름 제어 Flow control

1. Stop and wait 방식

  • 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법 (비효율적)

2. Sliding window 슬라이딩 윈도우 기법

  • 수신 측에서 설정한 윈도우 크기만큼은 송신 측에서 확인 응답ACK를 받기 전에 전송 가능.
  • 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜.

 

  •  윈도우에 포함되는 모든 패킷을 확인 응답 없이 전송하고, 그 패킷들의 전달이 확인되는 대로 윈도우를 옆으로 옮기며 그 다음 패킷들을 전송
  • TCP/IP를 사용하는 호스트들은 보내는 용과 받는 용의 2개의 윈도우를 가지고 있다. 실제 데이터를 보내기 전에 TCP-3way-handshaking을 통해 수신 컴퓨터의 receive window size에 자신의 윈도우 크기를 맞추게 된다.
    * 호스트: 응용 프로그램을 사용하는 주체. 

 


혼잡 제어 Congestion control

:데이터 전달과 네트워크의 데이터 처리 속도를 해결하기 위한 기법

: 송신측에서 보내는 데이터의전송 속도를 제어

 

1. AIMD (Additive Increase Multicative Decrease)

  • 합 증가/ 곱 감소 알고리즘
  • 처음에 패킷 하나를 보내는 것으로 시작, 전송한 패킷이 문제 없이 도착하면 윈도우 크기를 1씩 증가시키며 전송
  • 패킷 전송을 실패하거나 타임아웃이 발생하면 윈도우 크기를 절반으로 감소시킴
  • 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형 상태로 수렴
  • 문제점
    - 초기 네트워크의 높은 대역폭을 사용하지 못함
    - 처음에 전송 속도를 올리는 데 시간이 너무 오래 걸림
    - 네트워크가 혼잡해지는 상황을 미리 감지하지 못하여 혼잡해지고 나서야 대역폭을 줄임

 

 

2. Slow start

  • AIMD와 같이 패킷을 하나씩 보냄
  • 하나의 패킷이 문제없이 도착하여 ACK를 보낼 때마다 윈도우 크기를 1씩 늘림
  • 한 주기가 지나면 윈도우 크기는 2배 -> 그래프의 모양이 지수함수 꼴
  • 혼잡 현상이 발생하면 윈도우 크기를 1로 떨어트림
  • 한 번 혼잡 현상이 발생하고 나면 이전에 혼잡 현상이 발생했던 윈도우 크기의 절반까지는 이전처럼 지수함수 꼴로 윈도우 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킴

 

3. Fast Recovery

  • 혼잡 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄인 후 선형증가.
  • 혼잡 상태를 한 번 겪고 나서부터는 AIMD 방식으로 동작

 

4. Fast Retransmit

  • 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK패킷을 보냄
  • 순서대로 잘 도착한 마지막 패킷의 다음 패킷 순번을 ACK패킷에 실어보내게 되므로 송신측에서는 순번이 중복된 것을 알게됨
  • 이것을 감지하여 중복된 순번의 패킷을 3개 받으면 타임아웃 전에 문제가 되는 순번의 패킷을 즉시 재전송해줌
  • 이런 현상이 일어나면 혼잡 현상이 발생한 것이므로 윈도우 크기를 줄임

 

 


✅ 혼잡 제어 정책

1. TCP Tahoe

  • 처음에는 Slow Start 방식을 사용하다가 임계점에 도달하면 AIMD 방식 사용
  • 그러다 3 ACK 순번 중복(중간패킷유실)이나 타임아웃이 발생하면 혼잡이라고 판단하여 임계점은 혼잡이 발생한 윈도우 크기의 절반으로, 윈도우 크기는 1로 줄임
  • 단점: 혼잡 이후 Slow start 구간에서 윈도우 크기를 키울때 너무 오래걸림. -> TCP Reno

 

2. TCP Reno

  • Tahoe와 마찬가지로 slow start로 시작하여 임계점 이후에는AIMD방식으로 변경.
  • 단, 3 ACK 중복과 타임아웃을 구분함
  • 3 ACK 중복이 발생하면 Fast Recovery 방식을 사용
  • 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄인 후 윈도우 크기를 선형적으로 증가시킴.
  • 임계점은 줄어든 윈도우 값으로 설정
  • 타임아웃이 발생하면 Tahoe와 마찬가지로 윈도우 1로 줄이고 Slow start 진행.(임계점 변경하지 x)

 

 

 

 

 

 

 

 

 

참고

TCP/IP 흐름제어, 혼잡제어
TCP/IP (흐름제어/혼잡제어)

TCP의 흐름제어, 혼잡제어

https://ko.wikipedia.org/wiki/%ED%98%BC%EC%9E%A1_%EC%A0%9C%EC%96%B4#%EB%B9%A0%EB%A5%B8_%EC%9E%AC%EC%A0%84%EC%86%A1

https://evan-moon.github.io/2019/11/26/tcp-congestion-control/

https://velog.io/@mu1616/TCPIP-%ED%98%BC%EC%9E%A1-%EC%A0%9C%EC%96%B4