티스토리 뷰

self training/nw

QoS 정리

atthis 2016. 5. 24. 19:40

경희대학교 국제 캠퍼스 IT 네트워크 시스템 고급 연수 기간 중 QoS 정리를 해보았다.

 

 

 

 

 

 

 

 

QoS 정리

 

qos 란 다른 응용 프로그램, 사용자, 데이터의 흐름의 우선순위를 정하거나 데이터 전송에 특정 수준의 성능을 보장하기 위한 서비스의 품질이다

중요한 패킷(voip, iptv) 같은 것들을 망에 혼잡이 생겼을 때 먼저 보내주는 역할이라고 할 수 있다. 한마디로 서비스들의 중요순위를 매겨 그것들을 교통 정리 하는 것이 qos 이다

 

qos 에는 크게 2가지 패킷이 분류가 되는데 먼저 첫 번째는 Multi-field(MF) Classification 이라고 한다. 이 패킷은 패킷 헤더 내에 있는 다양한 필드들을 보고 중요한 패킷인지 중요하지 않은 패킷인지 판단하고 분류한다.

두 번째는 Behavior-Aggregate(BA) Classification 이다. 이건 패킷에 이미 qos 정보가 포함되어 있어 간단히 그 필드만 보면 중요한지 아닌지를 판단할 수 있는 분류 방법이다. 이더넷 패킷의 경우 802.1p COS 필드이고, IP 패킷의 경우는 dscp 이다. 하나하나씩 알아보자

 

먼저 802.1p COS 필드,

일단 802.1q 는 무엇이냐 하면 VLAN Tag 이고 802.1p는 우선순위이다 (q p를 구별하자)

 

802.1p (COS) 3비트로 8 단계의 우선순위 서비스를 할 수 있다 .

 

COS Canonical Format Identifier 의 줄임말로 IEEE802.1q를 사용하는 이더넷 헤더 내 3비트의 필드로 0~7 사이의 값을 통해 전송 상의 우선순위를 나타 낸다.

그러므로 802.1p CoS 는 같은 말이다.

 

*중요*

이더넷 망에서는 802.1p를 통해 패킷의 중요도를 판단할 수 있다.

 

우선순위는 0 이 가장 낮고(꼴찌) 7이 가장 높다(1)

 

 

 

 

그럼 이제 다음 패킷으로 넘어가기 전에 필드가 하나 남았다.

 

그렇다 DSCP 필드이다

이것은 많이 쓰던 것이니깐 익숙할 것 이다.

DSCP를 살펴보기 전에 IntServ, DiffServ부터 알아보자. (이게 뭔 소리;)

 

IntServ Intergrated Service Model 의 약자로 통합 서비스 모델 이다

조금 쉽게 말하면 응용 서비스가 실시간으로 요구하는 QoS 지원하기 위해 새로운 모델에 기반을 둔 IP 패킷 전달 방식이다.

intserv는 응용 서비스에서 발생하는 패킷의 흐름을 단위로 하여 Qos 보장형 서비스와 비보장형 서비스 유형으로 구분하여 패킷을 전달한다.

그러나 이 intserv 에는 큰 문제점이 있다. 실시간으로 계속 패킷을 요청하는 대에 있어 사용자가 무분별한 자원을 예약할 경우 네트워크 속도의 큰 저하를 초래 할 수 있는 것이다.

 

이러한 문제점을 해결하기 위해 DiffServ 가 등장하였다.

 

DiffServ Differential Service Model 의 약어로 차등 서비스 모델이라고 할 수 있다.

diffserv IntServ 방식을 보완한 모델로 비슷한 성질의 트래픽들을 클래스로 묶어 각 클래스마다 가중치를 두어 서비스를 처리하는 방식이다. 아주 쉽고 확장성이 뛰어나 현재로서 가장 많이 사용하는 방식이다. 아래 그림을 보자

   

 

  

 

 

트래픽이 들어오면 분류자(Classifier) 에 의 해 비슷한 성질을 가진 트래픽끼리 묶어 클래스로 분류한다.

분류자를 통과한 후 미터를 통하여 트래픽 플로우를 측정한다.

미터에 의해 측정된 트래픽 플로우를 사전에 약속한 트래픽 특성과 비교하여 결과에 따라 마킹한다.

마킹 된 패킷은 컨디셔너를 통해 약속된 트래픽 대역폭에 맞추어 조절한다.

컨디셔너를 통과한 패킷은 맨 처음 분류자에서 나눈 클래스에서 맞는 큐에 저장되어 스케쥴링에 따라 출력된다

 

분류자 : 해당 패킷을 클래스 별로 구분하는 단계(ACL, class-map)

마킹 : 구분한 클래스에 대해 Poilcy-map을 통해 마킹을 해 우선순위를 지정

컨디셔너 : 버퍼를 이용하여 조절하는 Shaping Drop을 이용한 Policing (두 가지 방법)

큐잉 : 큐잉 기법으로 FIFO, WFQ, CQ, PQ, CBWFO, LLQ 등이 있다.

 

SLA service Level Agreement VOIP나 멀티미디어 서비스는 높은 수준의 Qos가 보장되어야 하고, 사용자의 요구에 맞춰 서비스를 제공하기 위해 동적인 서비스 협약이 필요하다. SLA 는 이러한 서비스를 제공하는 데 있어 서비스 품질에 대한 판단 기준이 된다.

 

L3 의 마킹 기법에 대해 많이 알아보자...

DiffServ 마킹 기법은 예전 방식은 IP Precedence 방식과 이를 보안한 DSCP 가 있다.

 

 

 

위 사진을 살펴보면 IP Precedence에서 DSCP 로 변경된 것을 알 수 있을 것이다.

TOS는 우선순위를 나타내는 3비트의 Precedence 4비트의 서비스 유형 지정 비트, 그리고 사용되지 않은 1 비트이다. 현재는 DSCP 필로 정의되어 있다.

 

IP Precedence

TOS 필드의 상위 3비트를 사용한다. 숫자가 클수록 우선순위가 높다.

 

 

 

위 표를 보면

67은 인터넷용과 네트워크용으로 예약되어있다. , 사용자가 임의로 마킹하지 않고, 특정한 프로토콜에 예약되어 써지고 있다는 것을 알 수 있다.

실제로 우선권의 값 중 가장 높은 것은 5 (critical) 이다.

0 BE(best effort) 를 뜻한다. BE일단 최선을 다해서 보내긴 보내보겠다.’는 의미로 제일 낮은 등급의 우선 순위 값이다. 이때 6, 7에서 예약되지 않고, Qos 지정을 받지 않은 모든 패킷들은 이 값을 가진다

따라서 5는 실질적인 최우선 순위 값으로 voip 와 같이 가장 우선적으로 처리되어야할 패킷들에 마킹 시켜주게 된다.

 

Dscp

Differentiated Services Code Point 의 약자 이며 RFC 2474에서 상위 7비트를 DSCP 라고 정의하였고, 각 값마다 Qos의 중요도에 대한 표준을 잡아놓았다.

그래서 라우팅 망에서는 이 DSCP를 통해 패킷의 중요도를 판단할 수 있다.

 

 

 

 

6비트는 위와 같은 형식으로 이루어져 있으며, 3비트로 클래스를 나누고, 나뉜 클래스에 대해 Drop 가능성을 3가지로 나누어 표현했는데...

 

 

 

Drop 가능성에 대해 알아보자 (가능성 = Probabili)

01 = 낮음

10 = 보통

11 = 높음

 

6비트의 DSCP는 각 처리 노드에서 해당 패킷에 대한 처리 방법을 정의하는 PHB를 선택 할 때 사용한다.

 

 

 

자 그럼 PHB를 알아보아야겠다.

 

PHBPer-Hob-Behaviousr 로 홉별 행위 이며 DiffServ 가 구현된 라우터 등의 장비에서 다양한 등급으로 마킹 되어 들어오는 일련의 패킷들의 흐름에 대해서 어떤 일관된 행위를 통해 다음 홉으로 전달하는 방식을 결정하는 것을 말한다.

이런 PHB 의 종류가 4가지나 있다.

 

Default PHB (Best-effort Forwarding PHB) : 최소한의 자원량만 할당한다. 마킹 ㄴㄴ

 

2. CA PHB(Class Selector PHB) : 상위 3비트만 표시해서 기저존의 Precedence

 

 

값과 서로 호환해서 사용이 가능하고 , 값이 클수록 우선 순위가 높다. - RFC 2475

 

3. AF PHB(Assured Forwarding PHB) : 4개의 클래스가 존재하며, 각 클래스에 대해 3개의 서로 다른 Drop 가능성 값을 갖는다.

 

 

4. EF PHB(Expedited Forwardion PHB) : DSCP 코드 값 중에서 우선 순위가 가장 높은 클래스, DSCP 값을 인식하지 못하는 장비에서도 IP Precedence 값으로 인식되어(5=Critical) 최고의 서비스를 보장한다.

 

→※DSCP 0번인 BE는 가장 낮은 우선순위이고, DSCP 46번인 EF는 가장 높은 우선순위이다

 

자 이제 컨디셔너 ( Conditioner ) 에 대해 알아보자

 

Conditioner 는 할당 받은 임계값을 초과했을 때 처리하는 매커니즘으로

Shaping 방식과 Policing 방식(아놔;;)이 있다.

이것들은 트래픽을 Classifier 하여 Marking 하고 Meter 에 의해 정의된 임계값과 비교 후 임계값 초과 시 발생 한다.

 

Shaping : 임계값을 초과할 때 버퍼에 저장을 해 두었다가 나중에 패킷을 처리하는 방식

Policing : 임계값을 초과할 때 초과한 패킷에 대해 Drop을 하는 방식

Token Bucket : Shaping 방식과 Policing 방식의 기본 알고리즘으로 일정 크기의 Bucket을 두어 트래픽이 들어올 때 Bucket 에 넣어두고, 처리하는 방식으로 Bucket을 넘어 갈 때 Shaping 이나 Policing 방식을 사용하여 처리한다.

 

 

 

CIR = ISP 와 계약한 전송 속도, 단위 : bps

Bc = 패킷을 담아두는 Bucket 으로 주 Bucket 이라고 보면 된다, 단위 : bit

Be = Bc를 초과할 시 담아두는 Bucket으로 보조 Bucket 이다. 단위 : bit

Tc = Bc를 가득 채우는 데 걸리는 시간, 단위 : bps, Bc=CIR*Tc 이다.

 

큐잉!

큐잉!

큐잉을 알아보자

큐잉이란 네트워크 장비가 처리할 수 있는 능력 이상으로 트래픽이 발생할 때 패킷들을 Queue 에 저장해 두었다가 나중에 서비스를 해주는 것이다.

 

 

 

1. FIFO = 가장 기본적인 Queuing 구조로 먼저 들어온 패킷이 먼저 나간다는 스케쥴링을 가진 Queue 이다.

 

 

 

2. PQ = FIFO 단점을 해결하기 위해서 ‘High, Medium, Normal, Low’ 4가지 클래스로 나눠 차등화된 서비스를 제공하는 Queuing 기법이다.

 

 

 

3. CQ = PQ의 문제인 우선순위가 높은 트래픽에 의해 우선순위가 낮은 트래픽이 서비스되지 못하는 현상을 해결하기 위해 각 클래스 별 QueueRound-Robin 방식으로 하나씩 돌아가며 처리한다.

 

 

 

4. WFQ (Weighted Fair Queue)

WFQPQ의 우선순위가 높은 트래픽에 의해 우선순위가 낮은 트래픽 서비스가 불가능해 진다는 단점과 CQ의 클래스 별로 차등화 된 서비스를 받지 못한다는 단점을 해결하기 위해 만들어졌다.

WFQ4096개의 클래스가 존재하는데 각 클래스 마다 IP Precedence로 가중치를 주어 실제 패킷 크기를 줄여 우선순위를 높여 처리하는 방식이다. (가상 패킷 크기 = 실제 패킷 크기 / ip precedence)

 

 

 

Class 1ip precedence5라면 실제 패킷 크기에 5로 나눠 가상 패킷으로 생각하게 된다. (C1_P1 실제 크기 : 15 => 가상 크기 : 3)

적용전 패킷 처리 순서를 보면 C1_P1 => C2_P1 => C2_P2 => C2_P3 => C2_P4 => C1_P2 => C1_P3 => C1_P4 순 이다.

적용 후 패킷 처리 순서를 보면 C1_P1 => C2_P1 => C2_P2 => C1_P2 => C2_P3 => C1_P3 => C2_P4 => C1_P4 순 이다.

이처럼 가중치를 주어 패킷 크기가 커 우선 처리하기 힘든 경우를 잘 처리 해 준다.

 

 

5. CBWFQ (Class-Base Weight Fair Queue)

CBWFQWFQ의 확장판으로 각 클래스 마다 Bandwidth, Weight, Packet Limit 정책을 정의할 수 있다.

또한 WFQ에서 혼잡 회피로 Tail Drop만을 사용한 반면 CBWFQ에서는 WRED도 사용할 수 있다.

 

 

 

 

 

policy-map을 보면 각 클래스 마다 적용한 정보와 각 상황에 맞을 경우 매치 정보를 보여 준다.

6. LLQ (Low Latency Queue)

LLQCBWFQPQ를 혼합한 Queuing 기법으로 우선 처리해야 할 트래픽은 PQ로 수행하고 나머지는 CBWFQ로 수행한다.

 

 

 

 

패킷트레이서에서의 Qos 설정

 

 

 

 

Classifier DSCP Marking

 

어떤 트래픽인지 acl 을 통해 지정한다.

class-map을 생성하고, 지정한 aclmatch 시킨다. 트래픽 분류가됨(classifier)

policy-map을 생성하고, 생성한 각 class 마다 DSCP을 세팅한다. 이때 나머지 트래픽은 default BE방식으로 설정한다.

R1->R2로 가므로 output 으로 policy-map을 적용시켜준다.

 

 

 

 

1.Access-list

access-list 100 permit icmp host 20.20.20.1 host 20.20.20.2
access-list 101 permit tcp host 20.20.20.1 host 20.20.20.2 eq telnet
 
# src : 20.20.20.1, dst : 20.20.20.2 로 향하는 icmp, telnet 패킷을 허용한다.

 

2.Class-map

class-map match-all telnet
match access-group 101
class-map match-all ping
match access-group 100
 
# 101번과 100access-list에 포함되는 패킷은 각각 telnet, ping 클래스 맵에 포함시킨다.

 

3. Policy-map

policy-map dscp_marking
class ping
set ip dscp ef # icmp 에 대해서는 ef를 마킹한다.
class telnet
set ip dscp af11 # telnet 에 대해서는 af11을 마킹한다.

 

4. PING

QoS_Router(config-if)#do ping 20.20.20.2
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.20.20.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/6 ms

 

결과

 

 

 

 

 

 

Policing , Shaping 설정

 

 

acl 로 해당 네트워크를 지정한다.

class-map 으로 지정한 acl 로 매치시킨다.

policy-map을 생성하여 클래스에 Shaping을 적용한다.

생성한 Policy-map을 인터페이스에 output 으로 적용한다.

 

 

 

 

 

 

 

1. Access-list

QoS_Router(config)#access-list 100 permit icmp host 10.10.10.2 host 30.30.30.2

 

2. Class-map

QoS_Router(config)#class-map match-all shaping
QoS_Router(config-cmap)#match access-group 100

 

3. Policy-map

QoS_Router(config)#policy-map shap
QoS_Router(config-pmap)#class shaping
QoS_Router(config-pmap-c)#shape average 80000
# [단위 : bps, CIR 값을 입력해야함]

 

4. Service-policy

QoS_Router(config-pmap-c)#int se0/0/0
QoS_Router(config-if)#service-policy output shap

 

5 . Ping

QoS_Router(config-if)#do ping 20.20.20.2
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.20.20.2, timeout is 2 seconds:
!..!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 6/341/563 ms

 

 

결과

 

 

 

 

 

CBWFQ  설정

 

 

ACLICMP 트래픽을 지정한다.

class-map 으로 트래픽을 매치시킨다

policy-map 으로 각 클래스의 대역폭을 보장한다.

생성한 Polic-map을 인터페이스에 output 으로 적용한다.

 

1. Access-list

QoS_Router(config)#access-list 100 permit icmp host 20.20.20.1 host 20.20.20.2

 

2. Class-map

QoS_Router(config)#class-map match-all ping
QoS_Router(config-cmap)#match access-group 100

 

3. Policy-map

QoS_Router(config)#
QoS_Router(config)#policy-map queue
QoS_Router(config-pmap)#class ping
QoS_Router(config-pmap-c)#bandwidth percent 20
QoS_Router(config-pmap-c)#exit
QoS_Router(config-pmap)#class class-default
QoS_Router(config-pmap-c)#fair-queue # WFQ 설정

 

4. Service-policy

QoS_Router(config-pmap-c)#int se0/0/0
QoS_Router(config-if)#service-policy output queue

 

 

 

 

 

 

결과

 


 

 

 

 

 

 

 

 

'self training > nw' 카테고리의 다른 글

NAT  (0) 2022.12.23
What_is_wireshark_filtering_eq  (0) 2018.09.21
VXLAN 에 대해서 -NetWork 구조  (0) 2016.05.31
VXLAN 에 대해서 -개념, 왜?  (0) 2016.05.27
패킷트레이서 개념 및 UI  (0) 2016.05.09
댓글