[Qos]

WRED, Mesh-Optimized, Burst-Optimized . . 
QOS에 대해 아직 모르는 것이 너무 많다. 오늘은 이것에 대해 정리해보려 한다. 

 

QOS (Quality Of Service)

QoS 동작에서 Ip.Precedence 와 class-map , policy-map 이해가 필요.

 

송신자가 Ip Precedence 를 마킹 , 트래픽을 우선순위를 정의해서 차등 처리할 수 있도록 한다.

0 ~ 7 까지 총 8단계의 우선순위를 가진다. 

기본적으로 , 대부분의 트래픽은 Ip Precedence = 0 으로 설정되어 

들어온 순서대로 큐잉 및 전송 (Best-Effort 방식으로 처리된다) 

 

또한 

 

Ip Precedence가 마킹 된 패킷이 들어온다 해도, 네트워크 장비가 그 값을 해석하고 QoS 정책으로 반영하지 않으면 아무 영향이 없다. 

그러면 TCP 포트 80 (HTTP) 트래픽을 IP Precedence 5로 마킹하고 QoS 정책을 적용해보자.

 

1. ACL 정의 - TCP 80 트래픽을 지정

2. Class-map - 위 ACL과 매핑

3. Policy-map - Precedence 5로 마킹

4. Interface에 적용 .

 

여기서 

Class를 구분하는 것의 의미는 Software Queue를 의미한다. 

포트를 나가기 전 Hardware Queue 순서에 따라 패킷이 나가게 된다 (FIFO) 

Software Queue에서 Hardware Queue로 이동과 관련한 정책이 QoS . 

 

A class, B class, C class 3개의 클래스로 class-policy 가 구분되면 Software Queue가 3개 생성.

A class 에서 Hardware Queue 로 3개의 패킷씩 이동. B class 에서는 1개씩 이동한다 같은 Policy가 만들어진다. 

  * 하드웨어 Queue는 장비마다 정해져 있으며 소프트웨어 Queue 사이즈는 설정 가능.

  * 10개를 넘는 소프트웨어 Queue (클래스) 생성은 권장되지 않는다 . 

 

따라서 QoS는 Hardware Queue가 가득 Full 되어야 동작한다. 

이러한 큐의 Full 그리고 큐사이 이동을 . . Congestion Management 라 한다. 

관련 기술로는 WFQ, CBWFQ, LLQ 와 관련한 내용이 있다.  

 

그렇다면 

Congestion Avoidance는 ? 

Hardware Queue가 가득 차지 않으면 QoS가 동작하지 않는다며 . . 혼잡을 피하면 Queue가 가득 찰 일이 없는 거 아니야 ? 

 

맞다. 

Congestion Avoidance 는 Software Queue에서 동작하는 기술이다.  

대표적으로 WRED 가 있다. 

Software Queue가 꽉 차기 전에 일부 패킷을 랜덤하게 Drop하는 방식이다 

Drop은 무작위지만 QoS 마킹에 따라 우선순위별로 차등 적용된다.   

 

 * 드랍은 손실을 의미할까 ?

     : 아니다 . TCP에서 드롭을 받으면 속도를 자동적으로 줄이고 Drop 된 부분을 재송신받아 재조립한다. 

       오히려 큐가 100%가 찼을 때 , Tail Drop 발생하게 되면 송신 측이 속도를 줄이는 것이 느려지고 안정화에 시간이 걸린다. 

        ** Tail Drop은 버틸 만큼 버티다가 무너지는 방식. 

 

그런데 지금까지 말한 WRED는 Software queue에서 동작한다 . . 는 현대적 모델에서는 맞지 않는 말이다. 

WRED는 Hardware Egress Queue (ASIC 내 큐) 에 직접 적용된다. (특히 Nexus, Catalyst 9000 시리즈) 

  * Congestion Avoidance , Congestion Management 기술들은 asic 내 적용. 

 

WRED 의 설정 옵션에는 Burst Optimized 와 Mesh Optimized 옵션이 있다. 

Burst 옵션은 순간적인 트래픽 급증을 수용하고 , 천천히 드롭 시작

Mesh 옵션은 꾸준한 트래픽 혼잡이 올 수 있으니 , 초반부터 드롭을 시작 

그렇다면 한 장비 내에서 일부 모듈은 mesh-optimized, 일부는 burst-optimized 로 설정해도 되나 ?
결론은 "된다"  

 

Cisco NX-OS 기반에서 일반적으로 적용되는 큐 사용률 기준의 동작 수치 예시 

burst-optimized는 큐가 70% 이상 찼을 때부터 Drop 확률 1~5% 시작 

mesh-optimized는 큐가 30% 이상 찼을 때부터 Drop 확률 5% 시작