1. Queuing Mechanism


큐는 마치 버스를 타기 위해 줄을 서는 모습과 비슷하다. 줄을 서면 보통 맨 앞에 있는 사람부터 차례대로 버스에 탑승을 한다. 이런 원리가 바로 큐의 가장 기본적인 FIFO(First-in First-Out) 큐잉이다.


- 네트워크에서 큐잉은 어떤 네트워크 장비가 서비스할 수 있는 것 이상을 패켓이 도착하거나, 동시에 동일한 목적지로 향하는 패켓들이 존재할 때 발생된다. 즉, 한꺼번에 처리할 수 없는 패켓들을 잠시 동안 버퍼에 저장해 놨다가 나중에 서비스를 하는 것이 큐잉이다. 이때 사용되는 버퍼의 종류는 소프트웨어 큐와 하드웨어 큐 2가지로 구분된다.

- 라우터로 들어오는 트래픽은 라우팅 프로세서에 의해 라우팅 경로가 결정되며, 결정된 출력 인터페이스를 통해 서비스가 된다. 이때 라우터의 인터페이스에서 연속 지연 시간 동안 패켓을 저장해야 하는 상황이 생기며, 이를 처리하기 위해 각 인터페이스마다 일정량의 하드웨어 큐를 사용한다. 이때, 인터페이스에 할당되는 하드웨어 큐는 보통 ‘TX Queue’와 ‘TX Ring’이라고 말한다. 이 하드웨어 큐의 크기는 라우터의 성능에 따라서 다르다.

하드웨어 큐인 ‘TX Queue’는 다음과 같은 특징을 가지고 있다.

- FIFO 스케줄링만 지원하며 변경이 안되며, 인터페이스별로 1개만 사용 가능하다.

- 다른 큐잉 스케쥴링을 사용하면 IOS는 ‘TX Queue’의 길이를 자동으로 축소한다.

- 관리자가 임의의 설정을 통해 ‘TX Queue’의 길이를 조절할 수 있다.

- ‘Best-Effort’ 서비스만 하는 단점을 가지고 있으며, 차후 이 문제를 소프트웨어 큐로 해결이 가능하다.


2. FIFO Queuing


FIFO 큐잉은 단일 FIFO 큐를 사용하는 것을 말한다. 가장 기본적인 큐잉의 구조로 TX Queue 앞에 있는 하드웨어 큐라고 생각하면 된다. 일반적으로 FIFO 큐잉은 하나의 큐만 제공되기 때문에 하나의 큐에에 모든 클래스의 트래픽을 저장한다.


- FIFO 큐잉에 사용되는 스케줄링 방식은 ‘머리가 먼저 들어온 사람부터 먼저 내보낸다.’라고 표현할 수 있다. 즉, 패켓의 클래스나 우선순위에 상관 없이 먼저 입력된 패켓을 먼저 서비스를 한다. ‘Best-Effort’ 서비스 모델만을 갖고 있는 전통적인 인터넷에서 사용되는 큐잉과 스케줄링 구조에 포함된다.

- 트래픽의 구분이 존재 하지 않기 때문에, FIFO 큐잉을 사용하는 장비에서는 분류, 마킹 작업을 할 필요가 없다.

- 구현이 간단하며 FIFO 큐의 동작이 예측이 가능하다. 즉, 패켓들의 순서가 유지되며, 패켓의 최대 지연은 큐의 최대 크기에 의해 결정된다. FIFO 큐잉의 단점으로는 클래스의 구분이 없기 때문에 차별화된 서비스를 제공하는 것이 불가능하다.

- 또한, Tail-Drop이 발생하기 때문에 버스트 트래픽 서비스에 부적합 하며, 혼잡이 발생하는 경우 TCP보다 UDP 트래픽에 유리하다.(TCP 재전송 문제)

- 즉, TCP와 UDP 트래픽이 존재하는 경우 혼잡이 발생하면, TCP Sender는 흐름 제어 알고리즘에 의해 전송 속도를 줄이게 되지만, UDP Sender는 계속해서 트래픽을 보내게 되며 TCP의 흐름 제어에 의해 발생한 대역폭을 차지하게 된다. 결국 TCP 트래픽의 서비스는 힘들게 된다.


3. Priority Queuing


Priority Queuing(우선순위 큐잉)은 FIFO 큐잉의 단점인 클래스의 구분 없이 차등화된 서비스 실시하는 문제를 해결하였다. 우선선위 큐는 기존의 FIFO 큐잉이 단일 FIFO 큐를 사용하는 것에 비해 ‘High’, ‘Medium’, ‘Normal’, ‘Low’라는 4가지 FIFO 큐를 사용한다. 4개의 FIFO 큐를 사용하므로, 각각의 큐가 서로 다른 트래픽 클래스에 매핑된다.


- ‘High’, ‘Medium’, ‘Normal’, ‘Low’ 4 가지 Class가 존재한다.

- 우선순위 큐잉을 사용하는 경우 스케줄링의 방식은 오로지 ‘High’ class가 최우선적으로 서비스가 실시된다.

- 즉, 낮은 우선순위 큐에 저장돼 있는 패켓들은 높은 우선순위 큐에 저장돼 있는 패켓들이 모두 서비스 된 이후에 서비스가 실시된다.

- 만약, 낮은 우선순위 큐에 저장돼 있는 패켓이 서비스 되는 도중이라도 높은 우선순위 큐에 패켓이 입력되면, 낮은 우선순위 큐는 서비스를 잠시 멈추고, 높은 우선순위 큐에 새로 도착한 패켓을 먼저 서비스를 실시한다.

- 우선순위 큐잉 방식의 장점은 간단한 방법으로 차등화된 서비스를 제공할 수 있다. 그렇기 때문에, 실시간 어플리케이션 지원이 가능하다. 그러나 높은 우선순위 큐에 패켓이 계속해서 입력될 때에는, 낮은 우선순위 큐에 저장된 패켓이 서비스가 되지 못하는 현상이 발생된다. 이런 현상을 아사 현상이라고 한다.

- 또한, 동일한 우선순위의 패켓들만 많이 들어오는 경우에는 FIFO 큐처럼 동작이 되는 문제점도 발생될 수 있다.


4. Priority Queuing : ‘Priority-list’ Command


Priority Queuing 설정 방법은 다음과 같다.


- 프로토콜, 인터페이스, ACL 별로 ‘Priority-list’ 설정 (list-number 1 ~ 16)

- Default Queue 설정  우선순위 큐잉에 포함되지 않는 트래픽에 대해서 처리를 해야한다.

- 각각의 Queue 크기를 지정  ‘High’, ‘Medium’, ‘Normal’, ‘Low’ 은 기본적으로 20, 40, 60, 80 이다.

- 해당 인터페이스에 우선순위 큐잉 적용


Ex) Priority Queuing 설정

Router(config)# priority-list 1 protocol ip high tcp 23

Router(config)# priority-list 1 protocol appletalk medium

Router(config)# priority-list 1 protocol ipx medium

Router(config)# priority-list 1 protocol list 113 normal

Router(config)# priority-list 1 protocol ip normal

Router(config)# priority-list 1 default low

Router(config)# priority-list 1 queue-limit 20 40 60 80 ->default값 변경하지 않는 것을 권장:Queue Size

Router(config)# interface serial 0/0

Router(config-if)# priority-group 1

Router(config-if)# end

Router# show interface serial 0/0

Router# show queueing priority


5. Custom Queuing


Custom Queuing 또는 Fair Queuing은 Priority Queuing에서 낮은 우선순위 클래스의 패켓들이 우선순위가 높은 트래픽 때문에 발생되는 아사 현상을 해결하였다.


- Custom Queuing은 최대 16개의 FIFO 큐를 사용한다. 관리자가 각 큐에 대해서 클래스를 구분하여 각각의 클래스마다 각각의 큐를 지정해 사용이 가능하다. Priority Queuing에서 클래스를 4개로 나누어서 분리하는 것보다 더 세분화하여 분리하여 골고루 큐를 할당할 수 있는 장점을 가지고 있다.

- 이렇게 세분화된 트래픽은 각각의 해당 큐로 보내져 ‘Round Robin’ 스케줄러에 의해 하드웨어 큐인 ‘TX Queue’로 서비스 된다. 즉, 모든 큐의 패켓이 공평하게 서비스가 실시된다.

- Priority Queuing에서는 높은 우선순위 큐가 패켓을 갖고 있는 한, 낮은 우선순위 큐에 있는 패켓들은 아사 현상이 발생된다. 그러나 Custom Queuing은 모든 큐가 동일한 우선순위를 갖기 때문에 아사 현상을 발생시키지는 않지만, 트래픽의 특성을 고려하지 않고 서비스 차원에서의 공정성만 따지기 때문에 스케쥴링 부분에서 차별화된 서비스를 제공하기 힘들다.

- 이렇기 때문에 관리자의 잘못된 설정으로 인해 대역폭의 비효율적인 할당 및 지연시간 증가라는 문제가 발생된다.


6. Custom Queuing : ‘Queue-list’ Command


Custom Queuing 설정 방법은 다음과 같다.


- 프로토콜, 인터페이스, ACL 별로 ‘Queue-list’ 설정 (list 1~16 , queue 1~16)

- Default Queue 설정  우선순위 큐잉에 포함되지 않는 트래픽에 대해서 처리

- 각각의 Queue가 Bandwidth의 몇 퍼센트를 사용할 것인지를 설정

- 해당 인터페이스에 우선순위 큐잉 적용


Ex) Custom Queuing 설정

router(config)#queue-list <list-#> protocol <protocol-name> <queue-#>

Router(config)# queue-list 1 protocol ip 1 tcp 23

Router(config)# queue-list 1 protocol ip 2

Router(config)# queue-list 1 protocol ipx 3

Router(config)# queue-list 1 default 4

Router(config)# queue-list queue 3 byte-count 3000  (기본 Byte-Count 1500). IPX를 2배이상 대역폭을 할당 설정

Router(config)# interface serial 0/0

Router(config-if)# custom-queue-list 1

위의 예제는 telnet bandwidth 20%, IP bandwidth 20%, IPX bandwidth 40%, 나머지 트래픽 bandwidth 20% 일 때 Custom Queuing 설정이다. 이때, 각각의 차지하는 비율이 ‘20 : 20 : 40 : 20 = 100’ 이기 때문에, ‘1:1:2:1 = 5’가 된다. 즉, IPX는 다른 Bandwidth 보다 2배이기 때문에 기본 Byte-Count 1500에 2배인 3000을 설정을 한 것이다.



7. WFQ(Weight Fair Queuing)


WFQ는 Priority Queuing과 Custom Queuing을 결합 형태를 갖고 있는 큐잉이다. 즉, WFQ 큐잉은 Priority Queuing의 단점인 우선순위가 낮은 클래스의 패켓들이 우선순위가 높은 트래픽에 의해 아사 현상 문제를 해결하고, Custom Queuing 큐잉의 단점인 차별화된 서비스 불가라는 문제를 해결하였다.


- WFQ는 ‘꼬리가 먼저 들어온 사람부터 먼저 내보낸다.’라고 표현할 수 있다.

- WFQ는 최대 4096개의 큐를 사용한다. 상당히 많은 큐를 제공하기 때문에 클래스를 플로우 단위로 나누어서 사용된다. 각각의 큐는 IP Precedence를 기준으로 가중치를 받게 된다.

- 즉, IP Precedence의 값과 반비례로 동작한다. 실제 패켓의 크기와 수식으로 계산을 하여 나온 가상 패켓의 크기를 기준으로 서비스되도록 스케줄링을 실시한다. 이와 같은 수식을 적용하는 이유는 우선순위가 높거나 크기가 작은 패켓들에 대해서 우선적으로 서비스를 하기 위해서이다.

- 한 예제로, FTP와 Telnet을 들 수 있다. 동시에 FTP와 Telnet 트래픽이 출력될 때 WFQ 큐잉은 Telnet 트래픽부터 서비스를 실시한다.


8. WFQ Queuing : ‘fair-queue’ Command


WFQ Queuing 설정 방법은 다음과 같다.


- 기본적으로 Cisco 라우터 Serial 인터페이스는 WFQ로 동작을 실시한다.

- 해당 인터페이스에서 ‘fair-queue’ Command를 사용한다.

- <1-4096> Conversation Discard Queues : 패켓을 Discard하기 위한 임계치

- <16-4096> Number Dynamic Conversation Queues : 최대 4096개의 플로우 기반 큐를 제공

- <0-1000> Number Reservable Conversation Queues : 예약할 수 있는 최대 큐


9. CBWFQ(Class-Base Weight Fair Queuing)


CBWFQ(Class-Base Weight Fair Queuing)이란 WFQ와 Custom Queuing을 결합한 형태를 갖춘 큐잉 방법이다.


- CBWFQ는 Custom Queuing의 장점인 각각의 큐마다 최저 대역폭을 바이트 단위로 할당하는 기능을 발전시켜서 전체 대역폭의 %로도 최저 대역폭을 보장할 수 있게 한다.

- 그러나, 기존의 WFQ가 플로우 기반으로 구현돼 큐가 많이 필요했던 것에 비해서 CBWFQ는 클래스를 기준으로 큐를 구분하기 때문에 64개로도 설정이 가능하다.

- 드롭 정책에도 WFQ는 ‘Tail-Drop’만 사용하지 못한 것에 비해 CBWFQ는 ‘Tail-Drop’과 같이 ‘WRED’를 사용하여 ‘Global Synchronization’ 문제를 해결한다.

- CBWFQ 설정은 MQC 방식의 3 단계를 과정을 갖는다.


10. CBWFQ Queuing : Example


CBWFQ 설정은 MQC 방식을 이용하여 다음 같이 진행된다.


- ‘class-map’ 구문을 가지고 클래스를 정의

- ‘policy-map’ 구문을 가지고 정책을 실시

- ‘policy-map’ 정책에서 ‘bandwidth’ Command 사용

- ‘policy-map’ 정책에서 ‘fair-queue’ Command를 이용하여 나머지 트래픽은 WFQ 적용 실시

- 해당 인터페이스에 ‘service-policy’ Command를 이용하여 적용 실시

- 정보 확인 : ‘show class-map’, ‘show policy-map’, ‘show policy-map interface s 0/0/

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

네트워크 기초와 패킷 필터링  (0) 2017.02.12
RIP (Routing Information Protocol)  (0) 2017.02.11
Qos Measure Element(3)  (0) 2017.02.10
Qos Measure Element(2)  (0) 2017.02.10
Qos Measure Element(1)  (0) 2017.02.09

+ Recent posts