'혼잡제어'에 해당되는 글 1건

  1. 2008.03.31 TCP 혼잡제어 (1)
TCP 는 Transmission Control Protocol 의 줄임말로, 실제 TCP 대신 흐름제어소켓이라고 말하기도 한다.

이 프로토콜은 네트워크로 연결된 호스트간의 데이터를 안전하게 전달하기 위한 목적으로 사용되며

다음과 같은 특징을 가진다.

1. 전용통신선로(Session) 을 확보한다. ( 3-way hand shaking 을 이용한다. )

2. 데이터 변조를 검사할 수 있다.

3. 데이터에 일련번호를 주어서 순서가 뒤바껴서 도착하더라도 원상태로 복구가 가능하다.

4. 데이터가 누락되었거나 변조되었을 경우 재전송 요구를 할 수 있다.

이를 위해 TCP 는 flow control 과 congestion control 두 개의 메커니즘을 이용하여  end-to-end 간의

신뢰성있는 전송을 보장한다.

Flow control : sender 가 receiver 로부터 advertised window(receive window) 크기를 받은 후,

                    그것보다 적게 보냄으로써 네트워크상의 흐름을 조절한다.

Congestion control : sender 가 네트워크의 상황을 보고 스스로 흐름을 조절한다.

                             라우터가 부하를 감당할 수 없게되어 패킷이 손실되거나 지연되는 경우를
                             'congestion' 이라고 한다.

그러면 본격적으로 congestion control 의 네 가지 메커니즘을 설명한다.

1.) Slow start

Congestion window 라는 새로운 윈도우 개념을 추가한 것이다.
 
새로운 패킷을 망으로 전송하는 비율과 receiver 에서 전송되는 ACK 를 관찰하면서 congestion window 의

크기를 exponential 하게 증가시키는 방식이다.

sender 는 그 연결에서 쓰이는 최대 세그먼트 크기 ( 1MSS ) 로 혼잡 윈도우 크기를 초기화 한 후, 최대

크기 세그먼트를 한 개 보낸다. 만일 이 세그먼트가 시간이 초기화되기 전에 ACK 가 오면 congestion window

는 4로 증가하여 congestion window 의 크기가 exponential 하게 증가하게 된다. 보통 64K 의 초기 값을

가지는 slow start threshold 값까지 slow start 를 수행한다.

2. ) Congestion avoidance

일정시간동안 ACK 가 오지않거나 ( time out ) 일정 수의 duplicate ACK  가 수신되면 sender 는 패킷이

손실되었음을 알게 된다.

avoidance 와 slow start 는 함께 수행되며, 각 연결마다 congestion window 와 slow start threshold

두 개의 변수를 유지한다.

3. ) Fast transmission

세그먼트가 무질서하게 수신될 경우 TCP 는 즉시 duplicate ACK 를 발생시킨다.

이 때의 ACK 는 가장 최근에 정상적으로 받은 패킷에 대한 ACK 와 동일하기 때문에 sender 의 입장에서

duplicate ACK 로 인식하게 된다.

보통 TCP sender 는 3 개의 duplicate ACK 가 수신되면 패킷 손실로 간주하고 time out 전에 패킷을

재전송한다.

4) Fast recovery

fast retransmission 수행후 slow start 가 아닌 congestion avoidance 단계를 수행한다.

이 경우 slow start 를 수행하지 않는 이유는 duplicate ACK 는 단지 패킷의 손실을 알려주므로

혼잡시에만 수행하는 slow start 를 수행할 필요가 없기 때문이다. ( receiver 와 통신이 되고 있음을 의미 )

다른 세그먼트가 수신될 때만 receiver 는 duplicate ACK 를 발생시키기 때문에 duplicate ACK 를 발생시킨

세그먼트는 망을 떠나 receiver 버퍼에 저장되어있음을 뜻한다.

그러므로 두 sender, receiver 사이에는 여전히 데이터가 전송되고 있으므로 slow start 를 수행하여

급격히 데이터 흐름을 감소시킬 필요가 없는 것이다.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. itman 2013.02.09 20:19  댓글주소  수정/삭제  댓글쓰기

    궁금한게 있는데 여쭤봐도 될런지요.

    tcp sender가 3개의 중복 ack가 수신되면 패킷손실로 간주한댔는데 3개의 중복ack인 이유가 있나요? 1개나 2개 혹은 다른 갯수가 포함안되는 이유를 알수 있을까요?