1. Congestion Avoidance


Congestion Avoidance란 무엇인가?


- Qos의 혼잡 회피 메커니즘은 TCP 프로토콜이 네트워크 상에서 패켓 손실 후, 전송 속도를 줄이는 TCP 혼잡 제어 메커니즘을 기반으로 동작한다. 이 방법은 큐에 혼잡이 발생되기 이전에 미리 일부의 TCP 패켓을 드롭시켜 큐에 들어오는 TCP 트래픽의 양을 줄이게 만드는 것이다.

- 따라서 큐의 혼잡을 예방해 네트워크의 성능을 저하시키는 ‘Tail-Drop(테일 드롭)’과 ‘Global Synchronization(글로발 싱크로나이제이션)’ 현상이 발생하는 것을 미리 방지한다. 즉, 결과적으로 지연과 지터를 줄이는 역할을 수행하는 것이다.

Congestion으로 인한 Tail-Drop and Global Synchronization 현상 발생

- 혼잡은 적정 수준의 이상으로 큐에 패켓이 쌓여 있는 현상을 말한다. 이 현상은 주로 대량의 패켓이 들어오거나 과도한 쉐이핑으로 인하여 큐에 트래픽이 쌓여 있는 상태에서 발생된다. 이렇게 혼잡이 발생한 상황에서 패켓들이 계속 들어온다면 큐의 용량은 한계가 되어 부하될 것이다.

- 이때 큐의 용량을 초과하여 패켓들이 버려지는 현상을 ‘Tail-Drop(테일 드롭)’이라고 한다. 테일 드롭이 발생하면 해당 네트워크상에 있는 대부분의 시스템들은 성능이 저하되는 ‘Global Synchronization(글로발 싱크로나이제이션)’ 현상이 발생된다.

TCP Congestion에 대해서 알아 보도록 하자.

- 초기에는 TCP가 구현될 당시에는 패켓이 손실되거나 다른 이유로 인해 승인 패켓이 수신되지 않는 경우 RTO(Retransmission Timeout)만큼 기다렸다가 다시 전송을 시작하는 것이 거의 전부라고 할 만큼 혼잡 제어의 개념이 포함되지 않았다.

- 또한, 네트워크 전송 속도나 전송되는 정보의 양이 현재와는 비교할 수 없을 정도로 소량이기 때문에 필요성이 부각되지 않았다. 그러나 현재 인터넷 사용자가 증가되면서 인터넷상의 라우터들을 연결하는 링크의 속도 차이로 인하여 라우터 버퍼의 오버플로우가 발생하고, 이로 인한 패켓 손실이 급격하게 증가되었다.

- 예를 들면, 수신측에서 허용 용량만 송신쪽에서 전송한다면 혼잡을 발생하지 않으나, 그 반대 경우라면 혼잡이 발생되어 해당 패켓들이 폐기되는 현상이 발생될 것이다.


2. TCP Slow Start and TCP Congestion


TCP 연결이 초기화 됐을 때 현재의 연결로는 어느 정도의 전송 속도를 수용하는 부분은 예측하기 힘들다. 그렇다고 한번에 많은 패켓들이 전송했다가 혼잡 현상이 발생된다면, 더 큰 글로발 싱크로나이제이션 현상의 원인이 된다.

그렇기 때문에 현재 연결이 어느 정도의 전송 속도를 수용할 수 있는지를 파악하는 부분은 상당히 중요하다. 이 문제를 TCP Slow Start 알고리즘이 해결하였다.


- 위의 그림을 보면 TCP 연결이 된 이후, Sender는 초기 CWND(Congestion Window)를 ‘1’로 설정해 ‘패켓 ‘를 전송한다. ‘패켓 1’을 수신했다는 ACK를 Receiver로부터 수신하면, Sender는 CWND를 1 증가시키므로 2개의 패켓(패켓2,3)이 전송된다. 이 후 2개의 Receiver로부터 2개의 ACK를 수신하면 다시 CWND를 2 증가시키므로 4 개의 패켓(패켓 3,4,5,6)이 전송된다. 이와 같은 방식으로 ACK가 한 수신될 때마다 계속 윈도우 싸이즈를 1만큼 증가시키게 된다.

- 즉, ‘TCP Slow Start’ 동안 Sender는 하나의 ACK를 수신할 때마다 윈도우를 1 증가시키기 때문에 결과적으로 하나의 ACK를 수신할 때마다 2개의 추가적인 패켓을 전송할 수 있게 된다.

- ‘Slow’라는 말과는 달리 실제로 윈도우 싸이즈는 급속히 증가되게 된다. ‘Slow Start’ 상태에서의 윈도우는 지속적으로 계속 증가되는데, 윈도우의 크기가 임계값(ssthresh)과 같아지면 TCP 혼잡 회피가 시작된다. ‘Slow Start’와 달리 TCP 혼잡 회피 상태에서는 하나의 ACK는 혼잡 윈도우의 크기를 1씩 증가시킨다.

- 예를 들어, CWND의 값이 10인 상태에서 10개의 패켓이 안전하게 전송됐다는 승인 패켓을 수신하면, CWND의 값을 11로 증가시킨다. 여기서 중요한 점은 혼잡 회피에서의 CWND의 값은 ‘Slow Start’에 비해 훨씬 느린 속도로 증가한다는 것이다.


3. TCP Congestion Control Mechanism 


Sender의 상태가 ‘TCP Slow Start’ 상태이건, ‘TCP Congestion Avoidance’ 상태이건 간에 현재 연결이 유지되고 이를 통해 패켓들이 전송되는 한, 윈도우 싸이즈는 지속적으로 증가하고 언젠가는 혼잡으로 인한 패켓 손실이 발생된다. 이 문제를 해결하는 기능이 바로 TCP 혼잡 제어 메커니즘이다.

- TCP 프로토콜에서 패켓이 전달되는 과정을 쉽게 설명하면 처음 TCP 연결이 시작된 이후 전송을 시작할 때, 처음 윈도우 크기를 1로 설정해 전송을 시작하며, RTO(타임아웃)이 발생되기 전에 ACK를 수신할 경우에는 윈도우 싸이즈를 2배로 증가시킨 후 전송한다.

- 만일, 타임아웃이 발생될 때까지 ACK를 수신하지 못하면, ssthresh(임계값)을 윈도우 싸이즈의 반으로 설정하고, 윈도우 크기를 1로 재전송을 시작한다. 이후 윈도우 크기를 2배씩 증가시키다가 윈도우 크기가 ssthresh(임계값)보다 커지면 윈도우 크기를 1씩 증가시킨다.

TCP Sender가 RTO(타임아웃)이전에 ACK를 수신하면

- CWND가 Threshold 보다 큰 경우: CWND = CWND + 1

- CWND가 Threshold 보다 작은 경우 : CWND = CWND * 2

TCP Sender가 RTO(타임아웃)이전에 ACK를 수신하지 못하면

- Threshold = CWND / 2

- CWND = 1


4. Global Synchronization


Global Synchronization(글로발 싱크로나이제이션)는 혼잡 발생시 네트워크의 대표적인 불안 요소 중 하나이다.


- TCP가 동작 특성상 네트워크의 전송상태가 좋은 경우에는 트래픽을 많이 전송하고, 패켓 손실이 발생하면 전송하는 트래픽의 양을 줄여서 전송한다. 이 동작으로만 본다면 TCP는 상당히 체계적인 프로토콜이라 할 수 있지만, 바로 이런 TCP의 혼잡 제어 메커니즘 때문에 또 다른 문제를 야기시키게 된다.

- 한 예로, 일반적인 네트워크 환경에 라우터가 외부 네트워크와 연결되어 있고 내부에는 스위치 아래 호스트 PC들이 연결되어 있다. 모든 호스트 PC들은 라우터를 통해서 외부 네트워크와 연결되어 있다. 동시에 여러 PC들이 인터넷을 접속하게 되면 TCP의 동작 상황에 따라서 라우터의 출력 인터페이스 버퍼에는 여러 개의 TCP 플로우가 존재하게 된다.

- 이럴 경우 큐 싸이즈는 빠른 속도로 증가하게 되며, 이내 버퍼풀(Buffer Full)현상이 발생되어, 오버플로우가 발생된다. 그러면, 모든 TCP 플로우들은 버퍼풀(Buffer Fulll) 이후에 도착한 모든 패켓들은 ‘Tail-Drop’에 걸릴 것이고, 모든 호스트 PC들은 RTO(타임아웃)이 발생될 때까지 잃어버린 패켓들에 대한 ACK를 받지 못하게 된다.

- 결국, 모든 호스트 PC들은 자신의 전송 속도를 줄이게 되며, 즉 윈도우 싸이즈 크기를 1로 줄이며, 빠른 속도로 큐 싸이즈는 줄어들게 된다.

- 그러나 다시 ‘Slow Start’ 과정으로 인해 큐 싸이즈는 증가될 것이고, 오버플로우가 발생하며, 모든 TCP 플로우에 대해 동일한 반복 과정이 일어나게 된다.

- 이런 현상을 바로 ‘Global Synchronization(글로발 싱크로나이제이션)’이라고 하며, 트래픽 양의 급격한 몰림현상으로 인해 성능은 물론 네트워크 장비까지 불안정해지는 원인이 된다.

- 이를 해결 하는 방법에는 RED(Random Early Detect), WRED(Weighted Random Early Detect) 기능이 있다.


5. RED(Random Early Detect) Mechanism


RED 동작 과정에 대해서 알아보도록 하자.

- 평균 큐 싸이즈가 ‘TH_min’ 보다 작은 경우에는 어떠한 패켓도 버리지 않고 받아 들인다.

- 큐 싸이즈가 ‘TH_min’ 보다는 크지만, ‘TH_max’ 보다는 작은 경우 큐 싸이즈에 따라 특정한 확률값을 갖고 패켓을 버린다.

- 큐 싸이즈가 ‘TH_max’ 보다 큰 경우는 입력되는 모든 패켓은 버린다. 즉 혼잡의 정도가 심해질수록 많은 패켓을 버림으로써 입력되는 트래픽의 양을 줄이려는 방법이다.

- 일반적으로, ‘TH_max’ 값이 너무 작으면 패켓 드롭이 자주 발생되어 전체 성능에 심각한 영향을 끼칠수 있으며, ‘TH_max’ 이상에서 모든 입력되는 패켓을 버리는 동작이 오버플로우에 의한 결과와 동일하기 때문에 ‘TH_max’를 큐의 최대 크기와 같거나 가까운 값으로 설정을 하게 된다.

- 또한 ‘P(드롭 가능성)’의 값이 너무 작으면 패켓이 드롭되는 빈도가 낮아져 혼잡 제어 효과가 제대로 나타나지 않는다.

- 따라서, RED를 사용할 때는 ‘TH_min’, ‘TH_max’, ‘P(드롭 가능성)’의 변수값을 적절하게 설정해야 한다.


6. WRED(Weight Random Early Detect) Mechanism


WRED(Weight Random Early Detect)는 RED에서 중요 트래픽에 대해서 랜덤하게 드롭되는 것을 방지하기 위해 중요 트래픽에 가중치를 부여하여 그 문제를 해결한다. 즉, WRED는 하나, 또는 여러 개의 서로 다른 클래스 트래픽에 서로 다른 특성을 갖는 RED를 적용함으로써 혼잡 제어를 하는 것을 말한다. 여기서 서로 다른 특성을 갖는 RED란 ‘TH_min’, ‘TH_max’, ‘P(드롭 가능성)’ 값이 서로 다른 RED 패켓 드롭 확률을 말한다.


- 낮은 우선순위의 패켓, 또는 클래스에 대해서는 더욱 공격적인 패켓 드롭이 발생하며, 우선순위가 높은 패켓, 또는 클래스에 대해서는 보수적인 패켓 드롭이 발생된다.

- 위의 그림을 보면 A 는 낮은 우선순위를 갖고 있다. ‘TH_max’가 B 의 ‘TH_min’보다 크게 설정된 경우를 볼 수 있으나, A 의 ‘TH_max’가 B 의 ‘TH_min’보다 반드시 작거나 같아야 하는 조건을 줄 수도 있다. 비록 같은 클래스에 속한 패켓들이지만, 드롭 우선순위가 다르며, 서로 다른 RED가 적용된다.

- 위의 그림을 보면 큐에 10개의 패켓이 들어있는 상태에서 새로운 패켓이 들어왔을 경우 새로 들어온 패켓이 ‘파란색 점선’ 패켓이라면 랜덤하게 드롭이 되지만, ‘빨간색 실선’ 패켓이 들어오면 정상적인 서비스가 이루어 진다.

- 또한, 큐에 패켓이 30 이상 들어있는 상태에서는 ‘파란색 점선’ 패켓은 100% 드롭이 실시되며, 나머지의 여유 공간은 ‘빨강색 실선’ 패켓이 서비스된다.

- 즉, 중요한 트래픽을 ‘빨강색 실선’으로 정의하고, 중요하지 않는 트래픽을 ‘파란색 점선’으로 정의하여 서로 다른 우선순위를 부여함으로써 차별화된 서비스를 제공할 수 있게 된다.

'IT > CISCO' 카테고리의 다른 글

RIP (Routing Information Protocol)  (0) 2017.02.11
QoS(Quality of Service)  (0) 2017.02.11
Qos Measure Element(2)  (0) 2017.02.10
Qos Measure Element(1)  (0) 2017.02.09
Multi Protocol Label Switching(2)  (0) 2017.02.09

+ Recent posts