컴퓨터 네트워크 06 : TCP 흐름제어, 혼잡 제어

728x90

컴퓨터 네트워크 06 : TCP 흐름제어, 혼잡 제어


 

TCP 통신의 문제점

신뢰성을 보장하는 TCP 통신은 아래와 같은 문제점들이 존재한다.

1. packet 손실

2. 순서 보장X

3. Congestion: 네트워크 혼잡

4. Overload: receiver가 overload 됨

 

위의 문제점들을 해결하기 위해 흐름제어와 혼합제어 기능을 활용한다.

 

1. 흐름제어

sender(송신측), receiver(수신측) 데이터 속도 차이를 해결하기 위한 기법(특히 송신측 속도가 빠르면 문제가 생김)

receiver가 packet을 지나치게 많이 받지 않도록 조절함(송신 측의 데이터 전송량을 수신측에 따라 조절해야 함)

receiver가 sender에게 자신의 상태를 feedback함

 

해결법

1. Stop and Wait: 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법

하나하나 확인해야하므로 비효율적이다.

 

2. Sliding Window(Go Back N ARQ)

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

*윈도우: TCP/IP를 사용하는 모든 호스트들이 송신과 수신을 위해 사용하는 패킷

먼저 윈도우에 포함되는 모든 패킷을 전송하고 그 패킷들의 전달이 확인되는대로 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송

최초 윈도우의 크기는 3way-handshaking과정을 통해 설정되고 이후 수신측에서 버퍼 공간에 따라 변경함.

 

 

 

2. 혼잡제어

송신측 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달된다. 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 된다. 이런 경우 호스트들은 또 다시 재전송을 하게되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시킨다. 혼잡을 피하기 위해 송신측에서 보내는 데이터 전송속도를 강제로 줄이는데, 이 작업을 혼잡제어라고 한다.

 

해결법

1. AIMD(Additive Increase / Multiplicative Decrease)

처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우 크기(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시켜가며 전송하는 방법

패킷 전송 실패나 일정 시간 초과시 패킷 보내는 속도를 절반으로 줄임

여러 호스트가 한 네트워크를 공유한 상황일 때, 나중에 진입하는 쪽이 처음에는 불리하다가 시간이 흐르면 모든 호스트의 속도가 평형하게 수렴하게 된다.

그러나 이는 네트워크 혼잡 이후에 대역폭을 줄이는 방식이므로 초기에 네트워크의 높은 대역폭을 사용하지 못해 시간이 오래 걸리고, 네트워크 혼잡을 미리 감지하지 못한다.

 

2. Slow Start

패킷을 하나씩 보내면서 시작하고, 문제없이 도착하면 각각의 ACK(응답)패킷마다 윈도우 크기를 1씩 늘린다. 주기마다 윈도우 크기가 2배로 늘어난다.

전송속도가 지수 함수 꼴로 증가하나, 혼잡 발생시 윈도우 크기를 1로 떨어뜨린다.

처음에는 네트워크 수용량을 예상할 수 없으나 혼잡 현상 발생시 네트워크 수용량을 예상할 수 있게 된다.

지수함수로 증가하다가 혼잡이후에 1씩 증가되는 모습

3. Fast Retransmit

패킷을 받는 쪽에서 먼저 도착해야할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보냄.

이럴 경우 중간에 하나가 손실되면 송신 측에서는 순번이 중복된 ACK 패킷을 받게되는데, 이를 감지하면 문제가 되는 순번의 패킷을 재전송할 수 있다.

중복된 순번의 패킷을 3개 받으면 재전송하게 되는데 이를 혼잡 상황으로 판단하여 윈도우 크기를 줄인다.

 

4. Fast Recovery

혼잡 상태에 윈도우 크기를 반으로 줄이고 선형증가 시킨다. 이 정책을 적용하면 혼잡 상황 이후에는 AIMD방식으로 동작하게 된다.

 

728x90