engineering/Network Eng.2008. 10. 20. 10:00


Token Bucket

Token Bucket방식  

Buket 자체를 FIFO 큐로 사용하지 않고, 트래픽을 제어하기 위한 제어용 토큰을 관리하는 용도로 사용한다. 트래픽은 토큰의 유무에 따라 흐름의 제어를 받게 된다. 또한 항상 정해진 일정량만 통과하도록 되어 있는 Simple Leaky Bucket과는 달리 트래픽이 버스트 한 경우에도 정해진 한계치 범위 내에서는 통과가 가능하다.  


Leaky Bucket방식  

일정하지 않는 트래픽을 일정하게 유지시커 전송시키기 이한 방식으로 ATM네트워크에서 셀 트래픽의 속도를 조절하기 위해 제안되었으나 패킷 네트워크의 제 3계층에서도 사용된다. Bucket의 깊이와 전송율은 일반적으로 사용자가 조절이 가능하며, 바이트 단위로 표시된다.

이 방식은 네트워크 내의 한  종류의 트래픽 양을 조절하는 임의의 임계치로 사용할 수 있는 방식인 반면, 여러 종류의 트래픽 속도를 지원해야 하는 경우에는 비 효과적이다. Peak rate가 고정된 값을 가지므로 네트워크 자원의 여유가 많을 때에도 충분히 활용할 수 있는 적응성을 가지지 못하는 단점을 가지고 있다. 


Dual Leaky Bucket방식  

먼저 Token Bucket으로 트래픽 양의 버스트를 허용하면서 조절한 후, Simple Leaky Bucket을 이용헤서 특정 한계치의 값만큼 일정하게 트래픽을 전송하는 방식이다.

 

>> 상세

Token bucket은 Traffic Policing과 Traffic shaping에서 사용되고 있는 기본 알고리즘입니다.
Committed Access Rate(CAR), Class-based Policing, Generic Traffic Shaping(GTS), Frame Relay Traffic Shaping(FRTS)등에서 사용이 되고 있습니다.

 

기본적으로는 single rate token bucket을 사용해 왔지만, IOS 12.2(4)T버전부터는 Traffic Policing에 대하여 dual rate token bucket도 도입이 되었습니다.

 

token bucket을 결정짓는 중요한 변수들은 다음과 같습니다. 우선 먼저 FRTS에서 사용되는 변수부터 살펴보겠습니다.

CIR = Mean rate or Committed Information Rate(CIR), in bits per second
Bc = Conformed Burst Size(Bc), in bits
Be = Excess Burst Size(Be), in bits
Tc = Measuring Time Interval(Tc)

이 네가지 변수를 일단 잘 이해하는 것이 중요합니다.

 

이렇게 생각하죠.

bucket(양동이, 빠께스)에다 수도꼭지를 틀고 물을 받는다고 생각을 하겠습니다.
잠시후면 그 bucket에 물이 꽉차 흘러넘치기 시작하겠죠. 이때 수도꼭지를 끝까지 돌려서 최고의 속도로 물을 받을 수도 있고, 조금만 틀어 비교적 천천이 물을 받을 수도 있을 겁니다. 이렇게 물이 공급되는 속도(CIR)는 bucket의 크기(Bc)와 bucket에 물이 끝까지 다차는데까지 걸린 시간(Tc)으로 표현할 수 있습니다.  bucket에 물을 가득채웠을 때의 물의 양이 15리터고, 그때까지 걸린 시간이 30초라면, 물이 공급되는 속도는;

15리터 / 30초 = 0.5리터 / 1초 = 0.5lps (liter per second)
15리터 / 30초 = 20리터 / 1분 = 20lpm(liter per minute)
15리터 / 30초 = 120리터 / 1시간 = 120lph(liter per hour)

위의 계산에서는 세가지로 표현을 하였는데, 기준이 되는 시간이 무엇이냐에 따라서 여러가지로 표현할 수 있다는 것을 알아두시기 바랍니다. 

 

만약, bucket에 담긴 물을 30초에 한번씩 여러사람들이 퍼마신다고 생각을 하죠. 그렇다면 한번에 먹을 수 있는 최대용량은 15리터가 됩니다. 이번에 물을 다마시지 않고 10리터만 마시고 5리터는 남겨두었다고 하더라도 30초후에는 15리터만 남아있게 됩니다. 물을 담는 bucket의 한계가 15리터이기때문에 나머지는 흘러넘쳐 버려지겠죠.... 이렇게 버려지는 물이 아깝습니다..... 해결방법은? 예 당연히 bucket의 크기를 늘리는 겁니다. 30초마다 공급되는 물의 양인 15리터보다 5리터(Be)더 큰 20리터짜리 bucket을 둔다면 더 많이 담아둘수 있겠죠. 그렇다고 하더라도 30초마다 공급되는 물의 양은 변함이 없이 15리터입니다. 단지 어떤 interval에 마실수 있는 물의 양이 최고 20리터까지 늘어난거죠... 그렇다고 매번 30초마다 20리터씩 먹을 수 있는 것은 아닙니다. 그 전 30초전에 먹을때 남겨둔 양이 있어야 한다는 거죠. 장기적인 관점인 1시간을 놓고 볼때 최대로 마실수 있는 물의 양은 120리터인 것임에는 변함이 없습니다.

 

위의 예를 network에 적용해 보겠습니다. 우리가 Traffic Shaping이란 용어를 처음 접하는 곳은 역시 Frame Relay가 아닐까 생각합니다. 이때부터 실은 머리 아프기 시작하죠.

 

어느상황에서 traffic shaping이 필요한 걸까요? 다음은 IOS 12.2 documents에 나오는 내용입니다.

Policing and Shaping Overview - Why Use Traffic Shaping?

  • Control access to bandwidth when, for example, policy dictates that the rate of a given interface should not on the average exceed a certain rate even though the access rate exceeds the speed.
  • Configure traffic shaping on an interface if you have a network with differing access rates. Suppose that one end of the link in a Frame Relay network runs at 256 kbps and the other end of the link runs at 128 kbps. Sending packets at 256 kbps could cause failure of the applications using the link.
  • If you offer a subrate service. In this case, traffic shaping enables you to use the router to partition your T1 or T3 links into smaller channels.

Frame Relay서비스를 Service Provider(SP)로부터 살때 256kbps의 CIR을 샀다면, 초당 256kbps까지는 전송을 보장받았다는 것을 의미합니다. 만약 이때 port speed 역시 256kbps라면 Traffic Shaping은 의미가 없습니다. 굳이 customer측에서 throttling해 줄 필요가 없는 거죠. 어차피 물리적으로 256kps이상은 전송할 수 없으니까요. 하지만, 만약 port speed가 T1이라면 이때는 traffic shaping이 필요합니다. 이걸 해주지 않게 되면 Service Provider측에서 256kbps가 넘은 traffic은 drop시키거나, DE bit를 marking하는 등의 policing을 할텐데, 이렇게 drop되는 traffic이 voice거나 TCP와 같은 adaptive flow control하는 경우라면 문제가 되겠죠. 그래서 SP측에서 policing을 하기 전에 미리 허용된 범위에 맞게 조절(throttling)해서 보낸다면 SP측에서 drop시킬 염려는 없는 거겠죠. 왜냐면 256kbps는 guaranteed된 traffic이기 때문이죠.

 

256kbps의 CIR을 샀는데, port speed인 T1분량의 data(frame header포함1536kbits: 8k는 signal)를 traffic shaping없이 한꺼번에 T1속도로 전송 했다면 어떻게 될까요, 상대편에서 첫번째 bit와 마지막 bit를 받을때까지 1초가 걸립니다. 우리가 CIR을 통해서 유추할 수 있는 것은 1초에 256kbits만 받아들인다는 것입니다. 하지만 이것만 가지고는 상대편에서 이 data를 처리할 방법은 여러가지가 있습니다. 예를 몇가지 들어보겠습니다.

 

1. 전송한 순서대로 먼저 전송한 256kbits(1~256000)까지만 받아들이고 나머지는 모두 drop시킨다

2. 1초를 8로 나누어, 125ms(1/8초)동안은 처음 32kbits(1~32000)만 받아들이고, 나머지는 drop시킨다. 이렇게 8번 반복한다.

3. 극단적인 방법으로 3.9us(1/256000초)마다 1bit만 받아들인다. 이 경우는 심지어 바이트 단위로 전송도 어려운 거겠죠.

 

뭐, 어떤식으로 하던지 1초에 256kbits만 받아들이는데는 이상이 없어 보입니다. 위 3가지 방법은 모두 초단위로 환산을 했을 경우에 256kbps가 나오는 겁니다. 하지만 위의 3가지의 경우에 drop되는 bit는 전혀 다릅니다. 그래서 Frame Relay를 계약할때는 다른 변수를 보아야 합니다. CIR 256kbps만 가지고는 부족한 것이죠.

즉 측정시간(Tc)과 그 측정시간동안 허용된 양(Bc)을 나타내 주는 수치가 실제로 중요한 것이고, CIR은 이 두가지 값에 의해 자동으로 유추된 것입니다.

위의 3가지 방법은 모두 CIR 256kbps지만,

1. Bc = 256kbits, Tc = 1초 (CIR = 256kbits/1초 = 256kbps)
2. Bc = 32kbits, Tc = 125ms (CIR = 32kbits/125ms = 256kbps) - 일반적인 유형
3. Bc = 1bit, Tc = 3.9us (CIR = 1bit/3.9us = 256kbps)

 

다시말해서, 측정시간은 1초일 필요가 없다는 겁니다. 실제로 SP와 계약한 서비스는 일정시간(Tc)동안 얼마(Bc)까지 허용된다는 것입니다. 이걸 초단위로 환산을 하니까 CIR이 나온겁니다.

 

그런데, 우리의 이해에 혼란을 부채질하는 것은 측정시간을 흔히 초단위로 생각하는데에 있는 것 같습니다. 이것은 우리의 일상생활에서 "초"라는 시간이 가장 작은 시간단위쯤으로 여겨지고 있기 때문이죠. 하지만, network에서의 second란 위의 수도물의 예에서의 시간단위쯤으로 생각하시면 될 것 같습니다. 즉 아주 아주 더 세부적으로 나뉘어 질 수 있는 단위로 생각하셔야 합니다.

 

실제로 SP와 계약한 서비스가 2번과 같다면, 무조건 port speed대로 data를 전송할 것이 아니라, 계약한 허용치에 맞게 보내서 drop되지 않게 하는 것이 중요할 것입니다. 이걸 위해서 사용되는 것이 token bucket입니다.

 

위에서 수도꼭지에서 나오는 물을 token이라고 생각하시면 됩니다. 위의 예에서 수도꼭지에서 물이 끊임없이 쏟아지는 것처럼, token이 일정한 속도(CIR)로 끊임없이 공급됩니다. Tc의 시간이 되면 token이 bucket에 Bc만큼 채워질 겁니다. 이때 채워진 token수만큼 data를 전송한다면 SP쪽에서 걸어놓은 traffic policing에 걸리지 않고 data를 온전히 전송할 수 있을 겁니다. 만약 이때 SP측에서 허용한 Excess burst가 있다면 그것은 위의 예에서 설명한 것처럼, bucket의 크기를 늘려서 그 이전 Tc타임시에 다 쓰지 않고 남은 Token이 있다면 이게 축적(credit building)되어서 최대 한번의 Tc시간동안 Bc + Be까지도 전송할 수 있다는 것을 의미합니다.

 

이제 구체적인 예를 들어 설명하겠습니다.

CIR = 64000
Bc = 9600
Be = 9600
Tc = 150ms

여기서, 먼저 bucket의 크기는 Bc + Be = 9600 + 9600 = 19200입니다.

 

그리고 bucket이 텅빈 상태에서 150ms(Tc)가 지나면 bucket에 token이 9600(Bc)까지 채워질 겁니다. 이때를 Tc(0)라고 하고, 다음과 같이 전송할 data가 있다고 가정하겠습니다. 토큰 한개를 1bit로 생각하면 됩니다.

 

1. Tc(0); queue에 대기하고 있는 전송할 data(0) = 6000, bucket(0) = 9600
    - bucket에서 6000을 꺼내 data를 전송합니다. 이제 bucket에는 token이 3600이 남아 있습니다.

 

2. Tc(1); data(1) = 6000, bucket(1) = 13200
    - Tc인 150ms동안 새로이 추가된 token과 전에 쓰고 남은 토큰을 합해서 13200의 token이 있습니다. 역시 bucket에서 6000을 꺼내 data를 전송합니다. 이제 bucket에는 7200이 남아있습니다.

 

3. Tc(2); data(2) = 0, bucket(2) = 16800
    - 새로이 추가된 token을 더해 16800이 있습니다.

 

4. Tc(3); data(3) = 19200, bucket(3) = 19200
   - 새로이 추가된 token을 더해 16800 + 9600 = 26400이지만, 7200의 token은 흘러넘쳐 버려졌습니다. 보낼 data만큼의 token이 있으므로 19200모두 전송이 됩니다. 이때 이렇게 전송된 data중 SP쪽에서 허용된 Bc인 9600이상의 data외의 나머지 Be 9600은 DE bit를 세팅하여 Frame Relay Cloud로 전송하여 cloud내에서 congestion발생시 우선적으로 drop시킵니다. 이제 bucket에는 남아있는 token이 없습니다.

 

5. Tc(4); data(4) = 12800, bucket(4) = 9600
   - 새로이 추가된 token을 더해 9600되었지만, 이 경우에는 token이 모자릅니다, 이때는 packet scheduler에 의해 결정된 순서에 따라 앞부분 9600만 전송을 하고, 나머지data 3200은 다음 tc에 보냅니다.

 

6. Tc(5); data(5) = 800 + 3200(data(4)에서 남은 것), bucket(5) = 9600
   - 새로이 추가된 token을 더해 9600이 되었고, Tc(4)에서 전송하지 못한 3200까지 더해 모두 4000을 전송하면 남은 token은 5600이 됩니다.

 

음, 위의 설명을 자세히 들여다 보면 생기는 의문이 있을 겁니다. Tc마다 한번씩 한꺼번에 전송합니다. 이게 상당히 불합리해 보입니다. 그러지 않고 그냥 token이 확보되는대로 전송하는 것이 더 효율적이지 않을까 하는 생각을 해 보았는데, 그러면 문제가 생기더군요. 예를 들어 bucket에 가득 token이 채워진 상태에서 갑자기 3*Bc(28800)만큼 data가 들어왔다면 어떻게 될까 생각해 보시길 바랍니다. 그러면 일단 19200은 전송을 하고 나서 Token이 확보되는대로 나머지 9600을 150ms동안 전송을 할 겁니다. 이렇게 되면 한번의 Tc시간동안 총 3*Bc만큼 전송이 되어서 뒤에 보낸 9600은 Excess Burst를 고려하더라도 drop될수 밖에 없게 됩니다.

 

이런 stop-and-go 전송이 대부분의 경우에는 큰 문제가 없지만, 이것이 voice의 경우에는 문제가 됩니다. Tc가 serialization delay가 되기 때문이죠. 그래서 voice를 사용하는 경우에는 Tc를 10ms로 할 것을 권장합니다.

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:20
Q
네트워크 관리자입니다만 QoS에 관해 잘 몰라서 우선 CBWFQ로 적용해 놓았습니다. 문제는 예를 들어 전체 대역폭이 10Mbps라면 3Mbps의 대역폭을 사용자 A에게 할당하고, 나머지 7Mbps는 공유해 사용하도록 설정했을 때, 만약 사용자 A가 3Mbps의 대역폭을 모두 사용했을때, 나머지 7Mbps의 대역폭을 사용할 수 있는지 알고 싶습니다. 만약 사용할 수 있다면, 어떻게 설정해야 하는지도 궁금합니다.




A
QoS에는 여러 가지 방법이 있지만, 그 사용목적에 맞게 써야 한다고 봅니다. 먼저 CAR 프로토콜을 사용하는 QoS 폴리싱, 셰이핑과 같은 전용 대역폭을 사용하는 방식이 있으며, CBWFQ, DLLQ, FIFO, PQ 등 주로 큐잉이 사용되는 QoS 컨제스천 관리(congestion Management)와 같이 특정 트래픽에 우선권을 주는 방식이 있습니다. 따라서 트래픽이 몰리지 않는다면 큐잉은 동작할 필요가 없습니다. 트래픽마다 대역폭을 지정하기 위해서는 CAR가 보다 효율적입니다.
다음 예제에서는 AAA라는 트래픽(소스 IP가 192.168.1.3)은 3Mbps의 대역폭을 보장하고, 기본 트래픽은 7Mbps를 보장하는 QoS 적용 예제입니다.


policy-map rate_limite
  class AAA
      police 3000000 15625 15625 conform-action transmit exceed-action drop
  class default
      police 7000000 15625 15625 conform-action transmit exceed-action drop

interface fa0/1
  service-policy input rate_limite

ip access-list extended AAA
permit ip 192.168.1.3 any
ip access-list extended default
permit ip any any


답변 : 김상준(kizard@freechal.com)

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:16

무선 LAN에서 QoS를 보장하기 위해 IEEE 802.11e에서는 폴링 메커니즘을 이용한 비경쟁 기반의 채널 접근 방식을 사용하는 HCCA 프로토콜을 제안하고 있다. 이번 호에서는 HCCA 프로토콜의 동작 메커니즘과 MAC 선택 기능에 대해 살펴본다. 또한 2005년 상반기로 예상되는 802.11e MAC의 표준화 완료 시기에 맞춰 무선 LAN 시장을 전망해본다.

정승화_한국루슨트테크놀로지스/LWS/책임연구원

EDCA(Enhanced Distributed Channel Access) 프로토콜은 8개의 사용자 우선 순위의 트래픽에 따른 차별화된 채널 접속을 지원하는 우선적(Prioritize) QoS(Quality of Service)인 반면, HCF(Hybrid Coordination Function) 비경쟁 채널 접속 방식인 HCCA(HCF Controlled Channel Access) 프로토콜은 액세스 포인트와 스테이션 간의 계약에 기반을 두고 패러미터(Parameterize) QoS를 지원한다.


패러미터에 의한 QoS 보장
HCCA 프로토콜은 무선 매체 접근에 대한 중앙 관리를 하기 위해 액세스 포인트에 위치하는 HC(Hybrid Coordinator)를 사용한다. HC는 무선 매체를 중앙에서 통합적으로 관리하기 때문에 스테이션 간 무선 매체에 대한 경쟁을 줄임으로써 네트워크의 효율성을 증가시킨다. HC의 제어에 의해 프레임 교환을 아주 짧고 일정한 전송 지연시간으로 유지할 수 있다.
따라서 HC는 EDCA 프로토콜에서의 CW(Contention Window)와는 다르게 네트워크 상의 트래픽이 증가해도 프레임간 전송 지연시간은 증가하지 않는다. 또한 동일 HC의 제어를 받지 않지만, 같은 주파수 대역을 사용하는 스테이션을 제외하고는 전송 프레임 간 충돌 가능성은 거의 없다. 패러미터 QoS 지원을 위해 응용 서비스로부터의 특정한 QoS 트래픽에 대해 개별 맞춤화된 QoS 패러미터로 적용하고 엄격한 전송 지연과 스케줄링 제어를 한다.
HCCA에서는 패러미터화된 QoS를 요구하는 어떤 프레임의 전송을 개시하기 이전에 트래픽 스트림(Traffic Stream)이라는 가상 연결(Virtual Connection)을 우선적으로 설정한다. 트래픽 스트림은 스테이션 투 액세스 포인트의 업링크, 액세스 포인트 투 스테이션 다운링크 또는 스테이션 투 스테이션 직접 링크 모두에 해당될 수 있다. 액세스 포인트와 스테이션간에 트래픽 스트림을 설정하기 위해서는 프레임 크기, 평균 전송 속도 등의 트래픽 특성, 그리고 지연 시간과 같은 QoS 요구 패러미터들이 상호 협상 과정을 통해 교환된다. 또한 HC는 호 제어 알고리즘을 구현해 특정한 트래픽 스트림을 해당 BSS(Basic Service Set)로 받아들일 것인지를 최종 결정하는 역할을 수행한다.
HC가 스테이션에 QoS CF-Poll 프레임을 전송할 경우, 해당 스테이션에게 허용된 서비스 제공 시간인 TXOP(The concept of transmission opportunity)를 정의한 TXOP 제한 값이 QoS 제어 필드에 포함된다. 즉, HC는 TXOP를 사용해 매체 접근 시간의 할당을 제어하는 기능을 수행한다. HCCA의 중요한 QoS 패러미터중 하나인 TXOP 제한 값은 TSPEC(Traffic Specification)에 의해 결정된다. TSPEC은 스테이션에 의해 요청되며, 액세스 포인트는 네트워크 상황에 따라 TSPEC의 요청에 대해 허용 또는 거절을 할 수 있다.
일단 트래픽 스트림이 설정되면, HC는 설정된 트래픽 스트림에 요구되는 무선 대역을 액세스 포인트와 스테이션간에 할당함으로써 계약된 QoS를 제공하려 한다. HCCA의 비경쟁 주기에서는 HC가 매체에 대한 전체적인 제어권을 가지고 있으며, 경쟁 주기에서도 필요하다면 PIFS()만큼의 유휴 시간 이후에 QoS CF-Poll 프레임을 전송해 매체 접근을 가능하게 할 수 있다. 즉, 경쟁 주기에서도 폴드 TXOP를 할당하기 위해 QoS CF-Poll 프레임을 전송함으로써 매체의 제어권을 획득하게 되는 것이다. 따라서 주기적으로 반복되는 HCF 슈퍼 프레임은 비경쟁 주기와 경쟁 주기를 모두 포함한다(그림 1).

TXOP 소유자라고 불리우는 폴링된 스테이션은 QoS CF-Poll 프레임을 받으므로써 QoS CF-Poll 프레임에 정의돼 있는 TXOP 제한값만큼의 시간 동안 채널 접속에 대한 권한을 갖고 여러 개의 프레임을 전송한다. 이때 다른 스테이션도 비록 자신들에게 해당되지는 않지만 QoS CF-Poll 프레임을 받은 후에는 TXOP 시간과 일정 시간을 합해 자신의 NAV(Network Allocation Vector)를 설정하며, 이 시간 동안은 채널 접속에 대한 경쟁을 하지 않는다(그림 2).
결국 HC는 계약된 QoS 요구 사항을 만족하기 위해 QoS CF-Poll 프레임의 적절한 전송을 스케줄링해야 할 필요가 있다. 무선 매체는 시간 또는 위치에 따른 채널의 조건이 다양하기 때문에 효율적인 스케줄링 알고리즘을 만드는 것은 QoS를 지원하는데 있어서 중요한 요소 중 하나가 된다. 아주 우수한 스케줄링 알고리즘은 QoS 계약을 위반하지 않으면서 보다 많은 트래픽 스트림을 허용해 무선 네트워크의 성능을 향상 시킬 수 있도록 한다.


802.11e MAC의 선택 기능
앞에서 논의된 EDCA와 HCCA 프로토콜 이외에도 802.11e는 MAC 기능 향상을 위해 몇 가지 추가적인 선택 기능을 제공한다.


·CFB(Contention Free Burst) 방식
액세스 포인트나 스테이션은 매체 경쟁을 줄임으로써 효율성을 증가하기 위해 CFB(Contention Free Burst) 방식을 사용한다. CFB는 주어진 TXOP 시간이 남아 있고 전송해야 할 데이터가 있는 경우 사용된다. 기존 802.11에서는 또 다른 데이터를 전송할 경우 반드시 매체 접근을 위해 새로운 경쟁을 해야 하지만(그림 3a), 802.11e는 스테이션이 매체 경쟁없이 SIFS 시간 지연 후에 전송을 재기할 수 있도록 한다(그림 3b). 따라서 CFB는 DIFS와 백오프에 의한 오버헤드를 줄임으로써 효과적으로 성능을 향상시킬 수 있다. CFB는 EDCA와 HCCA에 의한 채널 접근 방식 모두에서 얻어지는 TXOP 시간 동안 사용된다.
802.11e는 주어진 TXOP 내에 전송 실패가 발생한 경우 액세스 포인트 또는 스테이션이 이를 복구할 수 있는 방법을 규정하고 있다. 즉, 다른 스테이션이 정상적인 경쟁 메커니즘을 통해 매체 접근 권한을 획득하기 이전에 TXOP 소유자가 전송을 재기할 수 있도록 한다.
또한 CFB는 802.11b와 802.11g가 혼합된 무선 LAN 환경에서 802.11g의 성능을 개선하기 위해 사용될 수 있다. 느린 전송 속도의 802.11b가 하나의 프레임을 전송할 수 있는 시간에 보다 빠른 전송 속도를 제공하는 802.11g 스테이션은 여러 개의 프레임을 동시에 전송할 수 있기 때문이다. 802.11b를 사용하는 스테이션에 할당된 하나의 프레임 전송시간과 동일한 시간으로 802.11g 스테이션에 하나의 TXOP가 할당될 수 있다.
일부 무선 LAN 업체들은 이미 자사 고유의 패킷 버스팅 기능을 구현했다. 그러나 802.11e는 다양한 장비업체의 장비간 호환성을 제공하기 위해 표준화된 버스팅 기능으로 CFB를 정의하고 있다.


블록 ACK(Acknowledgement)
기존의 802.11 MAC은 프레임을 성공적으로 수신한 후에는 ACK(Acknowledgement) 프레임을 전송한다. 블록(Block) ACK는 ACK 프레임을 받기 전에 여러 개의 데이터 프레임을 전송할 수 있도록 허용하는데, 이는 모든 프레임의 전송 과정에 발생하는 오버헤드를 감소시켜 무선 채널을 보다 효율적으로 사용할 수 있도록 한다. 블록 ACK는 액세스 포인트와 스테이션 간에 접속 설정과 협상 과정에 의해 개시된다. 블록 ACK가 설정되면 여러 개의 QoS 데이터 프레임들은 각 프레임간 SIFS의 시간 간격으로 CFB 방식을 사용해 전송된다. 802.11e에서는 두 가지의 블록 ACK 메커니즘으로써 각각 '즉각적인(Immediate)'과 '지연된(Delayed)' 방식을 정의한다.


·즉각적인 블록 ACK
즉각적인(Immediate) 블록 ACK 방식에서는 액세스 포인트나 스테이션이 주어진 TXOP 시간 내에 여러 개의 데이터 프레임을 CFB 방식으로 전송한다. CFB의 마지막 시점에 송신측은 블록 ACK 요구 프레임을 전송하며, 수신 측에서는 이전에 수신한 데이터 프레임들의 상태를 포함한 블록 ACK 프레임을 즉시 전송한다(그림 4a).


·지연 블록 ACK
지연(Delayed) 블록 ACK 방식에서도 즉각적인 블록 ACK 방식과 동일하게 CFB 방식으로 다수의 데이터 프레임을 전송한 후에 블록 ACK 요구 프레임을 전송한다. 그러나 수신 측은 블록 ACK 요구 프레임에 대한 응답으로써 블록 ACK 프레임이 지연됨을 알리기 위해 일반적인 ACK 프레임 만을 전송한다. 이후 해당 스테이션에게 새로운 TXOP가 할당될 때 송신측에 지연된 블록 ACK를 전송하게 된다(그림 4b). 지연된 블록 ACK 방식은 전체적인 지연을 향상하는 동시에, 신속히 ACK를 계산할 수 없는 낮은 성능의 시스템에 보다 많은 시간을 제공한다.

앞에서 살펴본 블록 ACK 방식 이외에도 실시간 전송을 요구하는 특정 애플리케이션에 사용할 수 있는 'No ACK' 방식도 802.11e에 정의돼 있다. No ACK 방식은 어느 정도의 프레임 손실을 감내하더라도 전송 지연에는 민감한 애플리케이션을 우선 전송하는 특징이 있다.

직접 링크 프로토콜
직접 링크(Direct Link)는 동일 네트워크에 있는 두 개의 스테이션이 액세스 포인트를 경유하지 않고 직접 데이터를 교환하는 방식이다. 기존 802.11 MAC에서는 하나의 스테이션이 동일 논리적 네트워크에 있는 다른 스테이션에게 프레임을 전송하기 위해 반드시 액세스 포인트를 통하게 돼 있다. 이 방식은 숨겨진 스테이션 문제와 같이 두 개의 스테이션이 서로의 무선 접속 범위를 벗어나 있는 경우에도 액세스 포인트를 경유해 통신할 수 있도록 한다. 하지만 이 방식은 직접 링크 방식에 비해 스테이션간 통신을 위한 무선 채널 대역을 약 절반정도 감소시키며, 전송지연에 민감한 트래픽을 효과적으로 지원할 수 없다.
802.11e에 정의된 DLP(Direct Link Protocol)는 두 개의 스테이션이 서로의 무선 접속 범위 내에 있을 경우, 스테이션 간 직접 프레임 전송을 할 수 있는 메커니즘을 제공한다. DLP의 동작 절차는 우선 직접 통신을 원하는 스테이션이 액세스 포인트에 DLP 요구 프레임을 전송함으로써 개시된다. 액세스 포인트는 DLP 요구 프레임을 상대 스테이션에 전달하고, 상대 스테이션으로부터 DLP 성공 상태를 포함한 DLP 응답 프레임을 수신해 DLP를 개시한 스테이션에게 전달한다. 이로써 액세스 포인트를 경우하지 않는 두개의 스테이션간 직접 통신이 시작된다(그림 5).
하지만 액세스 포인트가 DLP를 허용하지 않거나, 또는 상대 스테이션이 동일 네트워크에 위치하지 않는 경우에는 DLP 설정이 실패할 수 있다. 이 때 액세스 포인트는 'not allowed'나 'not present' 상태를 포함해 DLP를 개시한 스테이션에 DLP 응답 프레임을 전송한다. DLP 접속을 종료하기 위해서는 'DLP teardown' 메시지가 사용되며, 또한 DLP에 의해 연결된 스테이션은 일정 시간 이상 프레임 전송을 하지 않는 DLP 접속을 감시하기 위해 DLP 비활성 타이머(Inactivity Timer)를 유지한다.


APSD(Automatic Power-Save Delivery)
APSD(Automatic Power-Save Delivery)는 기존 802.11의 절전 모드(Power Save) 메커니즘을 개선한 방식이다. APSD는 비콘 주기의 반복되는 패턴에 근거해 스테이션에게 액세스 포인트로부터의 프레임 수신을 위해 다운 링크에 대한 스케줄링을 할 수 있도록 한다. APSD가 활성화되면 액세스 포인트는 APSD 설정 시에 정의된 비콘 주기 수만큼 APSD 스테이션의 프레임을 버퍼링 한 후에 자신의 서비스 주기에 깨어난 스테이션에 버퍼링된 프레임을 전송한다. 이 방식은 전원을 사용하지 않는 데이터 송수신이 없는 대부분의 시간 동안 사용된다. 따라서 일정 시간 동안 데이터를 전송하는 VoIP와 같은 애플리케이션에 적합하다.


VoWLAN 시장 확산에 802.11e 표준화 완료가 관건
표준화 진행 속도가 빠르게 진행되는 무선 LAN 기술에 보조를 맞추기 어려운 상황이 간혹 발생한다. 2004년 6월 802.11i 보안 관련 표준화가 완료되기 이전에 몇몇 장비 업체에서는 802.11i 표준에 기반을 둔 제품을 출시했었다.
이제 802.11e에서도 802.11i와 유사한 상황이 재현되고 있다. 2004년 내에 802.11e 표준화가 완료될 것으로 예상했으나, 최종 표준안의 승인은 2005년 상반기 중으로 예상되고 있다. 그러나 음성 서비스나 비디오와 같은 멀티미디어 애플리케이션에 대한 요구가 증가하자 Wi-Fi 협회에서는 802.11e의 드래프트 버전에 기반한 WMM(Wi-Fi Multimedia) 인증 프로그램을 2004년 9월에 발표했다.
Wi-Fi 협회에서는 무선 LAN에서 멀티미디어 QoS 구현을 위한 요구 사항을 개발하고 여러 업체들의 제품간 호환성을 인증하기 위한 상호 호환성 시험을 수행하고 있다. 현재 WMM은 인증 프로그램의 대상으로 802.11e의 경쟁 기반 EDCA 프로토콜만을 채택하고 있다. WMM 인증 프로그램은 멀티미디어를 지원하는 무선 LAN 제품의 개발뿐 아니라, TV, DVD 플레이어와 같은 가전 제품과 무선 LAN 제품의 통합에도 촉매제가 될 것이다. 또한 2005년 상반기부터는 HCCA 프로토콜을 지원하는 WSM(Wi-Fi Scheduled Multimedia) 인증 프로그램을 시작할 예정이다.
최근에는 일부 장비 업체에서 WMM 인증 프로그램을 통과한 제품을 시장에 출시하고 있다. 이런 제품들은 802.11e 표준화가 완료되면, 드래프트 버전과 최종 표준안 사이에 변경된 부분에 대해 소프트웨어 다운로드를 통한 업데이트가 가능할 것으로 보인다.
802.11e는 기존 무선 LAN 서비스업체에게도 상당한 의미를 부여할 것으로 본다. 음성, 비디오와 같이 실시간 전송이 필요한 트래픽에 QoS를 제공함으로써, 서비스 업체는 접속 매체로서 무선 LAN을 또 다른 시각으로 바라보게 될 것이기 때문이다. 특히 VoWLAN와 같이 무선 LAN을 사용한 음성 서비스의 증가 추세는 802.11e 표준화에 지대한 영향을 받을 전망이다.
이상에서 살펴본 바와 같이 802.11e MAC은 기존의 802.11 MAC의 무선 채널 접근 방식을 개선해 향후 무선 LAN에서도 QoS를 지원할 수 있도록 하고 있다. 802.11e 표준이 완료되면 그동안 사용자의 발목을 잡고 있는 무선 LAN QoS 문제가 해결되면 무선 LAN 사용 범위와 활용도가 더욱 확대될 것이다. 이를 통해 무선 LAN에서의 음성, 비디오, 멀티미디어 애플리케이션과 같은 다양한 서비스가 제공돼 무선 LAN을 통한 새로운 수익 구조를 만들어 갈 수 있게 될 것이다.


출처 - http://www.ionthenet.co.kr

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 14:07

ISP로부터 제공 받아 사용하는 대부분의 WAN 구간은 LAN 구간에 비해 상대적으로 고가이기 때문에 적은 대역폭으로 구성되는 것이 일반적이다. 이때, WAN 구간의 대역폭보다 큰 용량의 트래픽을 전송해야 하는 상황이 된다면 외부로 전송되지 못한 패킷들이 큐에 적체되게 돼 지연, 지터, 드롭이 발생하게 될 것이다. 만일 이 트래픽이 비디오나 음성과 같이 일정시간 내에 전달돼야만 하는 패킷이라면 아마도 정상적인 서비스를 제공하지 못하게 될 것이다. 이번호에서는 링크를 효율적(Link Efficiency)으로 사용하기 위한 QoS 기법에 대해 알아보자.

김화식 | 온세통신 시설운영팀, NRC Network+ 팀 마스터

지난호에는 QoS의 세부적인 튜닝 부분으로 들어가서 혼잡회피(congestion avoidance)에 대해 알아봤다. TCP의 작동 메커니즘을 확인하고 혼잡을 예방하기 위한 방법인 RED와 WRED를 소개했다. 이번 시간에는 QoS의 세부적인 튜닝 방법 중 하나로, 링크를 효율적으로 사용하기 위한 기술인 압축(compression) 기법과 LFI(Link Fragmentation and Interleaving) 기법에 대해 알아볼 것이다
압축 기법은 WAN 구간으로 패킷을 전송하기 전에 압축을 해서 전송하는 기술로, 패킷의 페이로드(payload) 부분을 압축하는 방법과 헤더(hader) 부분을 압축하는 방법으로 구분된다.
LFI 기법은 연속 지연(serialization delay)에 직접적으로 영향을 주는 기술로, 크기가 작은 패킷이 큰 패킷 뒤에 있는 경우, 큰 패킷이 큰 패킷의 길이만큼 더 지연이 되는 현상을 줄이기 위한 것이다. 이는 큰 패킷을 여러 작은 크기로 나눈(fragmentation) 후 각 개체들이 서비스 되어지는 사이사이에 작은 패킷을 끼어넣어(interleaving) 주는 방법으로, 보통 작은 패킷들이 지연에 민감한 애플리케이션에서 사용되는 경우가 많다.


압축 기법의 종류와 특징
압축 기법은 원본 패킷을 수학적인 알고리즘을 이용해 작게 압축해 전송한다. 반대편에서는 수신된 압축패킷을 다시 수학적인 알고리즘을 이용해 압축을 푸는 과정을 진행한다. 많은 수학자와 컴퓨터 과학자들이 다양한 압축 알고리즘을 개발하는 과정에서 압축하는 비율에 따라 효율이 좋은 경우와 나쁜 경우가 발생함을 발견했다. 또 같은 비율의 압축 방법이라도 다른 압축 알고리즘을 이용하면 각각 다르게 CPU와 메모리를 사용한다는 것도 확인하였다. 따라서 트래픽 패턴과 장비의 성능을 분석하고 적절한 압축 기법을 적용해야 한다.
앞서 말했듯이 어떤 부분을 압축하느냐에 따라 페이로드 압축과 헤더 압축으로 구분되는데, 페이로드 압축은 패킷의 헤더 부분과 데이터 부분을 압축하는 방법으로, 패킷의 크기가 큰 경우에는 헤더 압축보다 좋은 압축 효율을 제공하는 장점이 있다. 반면, 헤더 압축은 헤더 부분만을 압축하는 방법으로, 패킷의 크기가 작을 때 좋은 압축 효율을 제공한다.
(그림 1)은 페이로드 압축시 압축 필드와 헤더 압축시 압축 필드를 표시한 그림이다. 두가지 타입의 압축방법 모두 CPU와 메모리 부하를 발생시킨다. 어느 압축 알고리즘이나 계산하는데 걸리는 시간만큼 패킷의 지연은 늘어나기 마련이다. 하지만 압축 과정에서 작아진 패킷들은 적은 대역폭에서도 높은 성능을 발휘할 수 있다.



(그림 2)는 압축에 의한 지연과 대역폭의 변화에 대해 나타낸 그림이다. 압축 알고리즘에 의한 계산시간 증가로 포워딩 지연은 증가하지만, 압축에 의해 작아진 패킷 덕에 연속 지연(serialization delay)이나 큐잉 지연(queuing delay)은 줄어든다. 또한 프레임 릴레이와 ATM 네트워크 환경이라면 네트워크 지연도 줄어든다(네트워크 지연도 패킷의 크기에 비례하기 때문).



(그림 2)에서 1500바이트 패킷이 클라이언트에서 서버까지 전송하는 상황을 보면, 먼저 압축하지 않은 상황에서의 총 지연시간은 57(1+15+40+1)ms인 것을 알 수 있다. 압축 비율을 2:1로 적용했을 때 47(10+7+20+10)ms로 10ms 정도 줄어든 것을 알 수 있다. 실제적으로는 10ms의 지연시간이 줄어든 효과보다는 WAN 구간에서 전송할 수 있는 효율이 두배로 늘어났다는 점이 더 중요하다고 볼 수 있다. 물론, 전체적으로 두배의 전송 효율이 늘어난 것은 아니지만 WAN 구간에 의해 전체적인 성능이 결정되는 상황을 감안하면, 압축 기법은 실제로 전체적인 성능 향상에 크게 도움이 될 수 있다.
최근에는 압축 알고리즘을 하드웨어에서 지원함으로 CPU나 메모리의 부하를 줄임과 동시에 압축으로 인해 생기는 지연도 크게 줄어들었다.


페이로드 압축
페이로드 압축은 패킷의 3계층 헤더를 포함한 데이터 필드 부분을 압축하는 기법으로, 패킷의 크기가 클수록 압축 효율이 좋아진다. 라우터에서 지원하는 페이로드 압축 기법은 스택커(stacker), MPPC(Microsoft Point-to-Point Compression), 프레딕터(predictor) 등 3가지가 있다.
프레딕터는 일종의 코드북을 메모리에 저장하고 있다가 압축하고자 하는 문자열을 코드북의 내용과 비교해 같은 내용이 있으면 코드북의 자리값을 표기하는 방식으로 압축을 한다. 프레딕터는 메모리를 많이 사용하기 때문에 메모리 크기에 의존적이라고 할 수 있다.
스택커와 MPPC는 압축하고자 하는 문자열을 CPU가 Lempel-Ziv라는 압축 알고리즘을 이용해 압축한다. CPU를 많이 사용해 계산하기 때문에 CPU에 의존적이라고 할 수 있다.



페이로드 압축 기법은 실제 적용시 유의할 사항이 몇 가지 있는데 다음과 같다.


·WAN 구간의 지원 여부에 따른 압축 기법 선택
·라우터의 CPU와 메모리에 따른 압축 기법 선택
·적용시 양쪽 장비에 동일 압축 기법 적용

헤더 압축
헤더 압축은 패킷의 헤더(3, 4계층) 부분을 압축하는 기법으로, 2가지 종류로 분류돼 사용된다. 하나는 TCP 헤더 압축으로 IP와 TCP 헤더부분 40바이트를 3~5바이트로 압축하며, 또 다른 하나는 RTP 헤더 압축으로 IP, UDP, RTP 헤더 40바이트를 2~4바이트로 압축한다.
TCP 헤더 압축의 경우 압축의 효율을 최대한으로 높이기 위해서는 패킷의 크기가 작아야 한다. 예를 들어 64바이트의 패킷과 1500바이트의 패킷에 각각 TCP 헤더 압축을 적용해 보자. 64바이트의 패킷 중 40바이트의 헤더 부분을 압축하면 27~29바이트로 줄어들어, 압축전과 비교하면 약 2.37배(64/27)의 압축 효과가 생긴다. 그러나, 1500바이트의 패킷은 40바이트의 헤더 부분을 압축해도 1463바이트 정도로 줄어들어 압축전과 비교하면 약 1.02배(1500/1463)의 압축 효과밖에 생기지 않는다.
RTP 헤더 압축은 VoIP 트래픽에 적용할 때 가장 탁월한 효과를 발휘한다. VoIP 트래픽은 대부분 작은 패킷을 사용하기 때문이다. 예를 들면, 라우터에서 G.729 코덱을 사용하면 데이터의 크기는 20바이트 밖에 되지 않는다. 20바이트의 데이터에 IP, UDP, RTP 헤더가 40바이트 붙어 60바이트의 VoIP 패킷이 되기 때문에 헤더부분을 4바이트 정도로 압축을 하면 VoIP 패킷의 크기는 60바이트에서 24바이트로 줄어들게 된다.

(표 2)는 VoIP 데이터에서 헤더 압축 적용전과 적용후의 총 필요 대역폭의 비교를 나타낸 것이다.



연속 지연 줄이는 'LFI'
압축기법 사용의 가장 큰 이유는 적은 대역폭을 조금이라고 넓게 사용하고자 하는 목적으로, 성능을 향상시키는 측면에서 접근한 것이다. 이에 반해 LFI(Link Fragmentation and Interleaving)는 직접적으로 연속 지연을 줄이기 위한 목적으로 만들어진 것이다.
먼저, 이해를 돕기 위해 연속 지연에 대해 간단하게 설명하도록 하겠다. 연속 지연은 프레임을 물리적인 링크에 실어보내는 과정에서 걸리는 시간을 말한다. 만일 물리적인 대역폭이 xbps라고 하면 1/x초 동안에 1비트를 전송할 수 있으며, y비트의 프래임을 전송한다면 y/x 초가 걸리게 된다. 실제로 예를 들면 56Kbps의 링크에서 1500바이트 프레임(1만 2000비트)을 전송한다고 가정하면, 연속 지연은 12,000/56,000초가 걸리므로 214ms가 된다. 여기에서 문제가 발생할 수 있는데 1500바이트의 패킷 뒤에 60바이트의 VoIP 패킷이 있게 되면, 이 VoIP 패킷은 자기자신의 연속 지연은 약, 8.5ms 밖에 안되지만 실제로는 앞의 패킷이 전송될 때까지 기다려야 하기 때문에 연속 지연은 222.5ms가 된다. 이 수치는 이미 VoIP 트래픽으로서는 사용할 수 없다는 것을 뜻한다(VoIP 트래픽은 총지연의 합이 300ms 이내로 전송돼야 정상적으로 서비스를 할 수 있다).
위의 예처럼 작은 패킷들이 큰 패킷 뒤에서 서비스 되는 과정에서 생기는 문제점을 해결하기 위해 만든 기술이 LFI인 것이다. LFI는 작은 패킷의 앞에 있는 큰 패킷을 여러 조각으로 분해(Fragment)한 후 작아진 조각들 사이에 작은 패킷을 끼워넣어 먼저 서비스되게 만드는 기술이다.



(그림 3)을 보면 앞에 있는 1500바이트의 패킷을 300바이트×5개로 분해한 후 첫번째 조각을 서비스한 후 두번째 조각의 자리에 60바이트의 VoIP 패킷을 끼워넣은 모습을 볼 수 있다. 이 LFI 기술을 적용한 후 VoIP 패킷의 연속 지연은 52.5ms(44+8.5)로 적용하기 전 222.5ms에 비하면 170ms의 지연시간을 줄여주기 때문에 실제로 양질의 VoIP 패킷으로 서비스할 수 있게 된 것이다(나눠진 300바이트의 패킷에 8바이트의 플래그먼트 헤더와 2바이트의  플래그먼트 테일러가 붙어서 실제 나눠진 패킷의 크기는 311바이트가 된다).

☞ 연습문제 1

그럼 이제부터는 연습문제를 풀어보면서 LE(Link Efficiency) 메커니즘 초급 설정에 대해 알아보자.

(그림 4)를 보고 다음의 조건을 만족하도록 라우터 3에 설정하라.


① 라우터 3는 포인트 투 포인트 프로토콜 128Kbps로 연결돼 있다.
② 페이로드 압축 기법을 이용해 설정하라.
③ 메모리의 여유를 활용할 수 있게 설정하라


/


☞ 연습문제 1에 대한 설명
압축 적용시 유의사항을 확인하며 적용한다.

① WAN 구간의 지원 여부에 따른 압축 기법 선택
  → PPP에서는 3가지 압축기법이 모두 지원된다.

② 라우터의 CPU와 메모리에 따른 압축기법 선택
  → 페이로드 압축기법 중 메모리를 주로 사용하는 기법은 프레딕터이다.

③ 적용시 양쪽 장비에 동일 압축기법 적용


☞ 연습문제 1 설정하기


페이로드 압축 기법(프레딕터) 설정  


!      
interface Serial 0/1      
  bandwidth 128  → 대역폭 설정    
  ip address 192.168.12.253 255.255.255.0      
  encapsulation ppp  → 포인트 투 포인트 환경 설정  
  compress predictor  → 페 이로드 압축 기법(프레딕터) 설정함  
  clockrate 128000      
!


☞ 연습문제 1 설정 확인하기    


페이로드 압축 기법 설정 확인  


r3# show compress
Serial0/1
  Software compression enabled
  uncompressed bytes xmt/rcv 323994/5494
  compressed    bytes xmt/rcv 0/0
  1   min avg ratio xmt/rcv 1.023/1.422
  5   min avg ratio xmt/rcv 1.023/1.422
  10  min avg ratio xmt/rcv 1.023/1.422
  no bufs xmt 0 no bufs rcv 0
  resyncs 2

☞ 연습문제 2

(그림 4)를 보고 다음의 조건을 만족하도록 라우터 3에 설정하라.


① 라우터 3는 포인트 투 포인트 프로토콜 128Kbps로 연결돼 있다.
② TCP 헤더 압축 기법을 이용해 설정하라.


/


☞ 연습문제 2 설정하기


TCP 헤더 압축 기법 설정


!      
interface Serial 0/1      
  bandwidth 128  → 대역폭 설정    
  ip address 192.168.12.253 255.255.255.0      
  encapsulation ppp  → 포인트 투 포인트 환경 설정  
  ip tcp header compression → TCP 헤더 압축 기법 설정       
  clockrate 128000      
!      
       
☞ 연습문제 2 설정 확인하기

TCP 헤더 압축 기법 설정 확인
 
r3# show ip tcp header-compress  
TCP/IP header compression statistics:  
  Interface Serial0/1:  
    Rcvd:       252 total,  246 compressed,  0 errors  
                0 dropped,  0 buffer copies,  0 uffer failures  
    Sent:        371 total,  365 compressed,  
                12995 bytes saved,  425880 byte sent  
                1.3 efficiency improvement factor  
    Connect:    16 rx slots,  16 tx slots,  
                218 long searches,  6 misses 0 collisions,  0 negative cache hits
                98% hit ratio,  five minute miss rate 0 misses/sec,  1 max
 
생각보다 쉽다는 느낌이 늘 것이다. 이번에는 조금 복잡한 환경에서 LE(Link Efficiency) 메커니즘 고급 설정 연습을 해보자.

☞ 연습문제 3

(그림 5)를 보고 다음의 조건을 만족하도록 R3에 설정하여라.


① R3과 R1은 Frame-Relay 128 kbps로 연결되어있다.
② 시리얼라이제이션 지연이 10ms가 되도록 분해(Fragment)하여라.
③ 모든 트래픽은 64 kbps 로 쉐이핑 하여라. (FRTS사용)
④ Tc 는 10ms로 설정하여라.
⑤ Be 는 사용하지 말아라.
⑥ 서브인터페이스를 이용하여 설정하여라.



☞ 연습문제 3에 대한 설명


압축 적용시 유의사항을 확인하며 적용한다.


① 128Kbps 회선에서 연속 지연이 10ms가 되도록 하기 위해서는
→ x/128000 = 0.01  → x는 1280비트 →  바이트로 바꾸면 160바이트임.


② Tc를 10ms로 설정하기 위해서는
→ Bc/CIR(64000bps) = Tc(10ms) → Bc는 640비트이면 됨.


☞ 연습문제 3 설정하기


LFI 설정은 다음과 같다.


!  
interface Serial0/0  
  no ip address  → 서브인터페이스 사용하기 위해 IP를 부여하지 않음
  encapsulation frame-relay → 프레임 릴레이 설정을 선언함
  load-interval 30  
  clockrate 128000  → 클럭 레이트를 128000으로 설정함
  bandwidth 128  → 대역폭을 128Kbps로 설정함
  frame-relay traffic-shaping → 프레임 릴레이 트레픽 쉐이핑을 선언함
!  
interface Serial0/0.1 point-to-point → 서브 인터페이스 선언
  ip address 192.168.2.253 255.255.255.0 → 소스 포트가 TCP 80인 패킷을 구분
  frame-relay class shape-all-64  → shape-all-64라는 클래스 맵을 실행시킴
  frame-relay interface-dlci 102  → 프레임 릴레이 dlci 값을 설정함
!  
map-class frame-relay shape-all-64 → shape-all-64라는 클래스 맵을 선언
  frame-relay traffic-rate 64000 640     → FRTS를 실행함(Tc를 10ms로 설정하기 위해 Bc 값을 CIR의 1/100으로 설정함
  no frame-relay adaptive-shaping  
  frame-relay fair-queue  
  frame-relay framement 160  → 64Kbps의 대역폭에서 연속 지연을 10ms로 하기 위해 160바이트로 분할함
 

☞ 연습문제 3 설정 확인하기  

LFI 설정을 확인하면 다음과 같다.  

R3# show frame-relay fragment interface s 0/0.1 102
fragment size 160 fragment type end-to-end
in framgmented pkts 52  out framgmented pkts 9367
in framgmented byte 5268  out framgmented byte 1511866
in un-fragmented pkts 5552  out un-fragmented pkts 6320
in un-fragmented byte 341743  out un-fragmented byte 405268
in assembled pkts 5577  out per-fragmented pkts 7387
in assembled bytes 346749  out per-fragmented byte 1862784
in dropped reassembling pkts 0  out dropped fragmenting pkts 0
in timeouts 0
in out-of-sequence fragments 0
in fragments with unexpected B bit set 0
in fragments with skipped sequence number 0
out interleaved packets 0


R3# show frame-relay fragment
interface       dlci       frag-type     frag-size   in-frag   out-frag    dropped-frag
Serial0/0.1   101   end-to-end 160         54       9700             0


조금 복잡해 보이지만 지금까지 배워왔던 설정들을 생각해보면 별로 어렵지 않을 것이다. 이번호를 끝으로 이론적인 부분에 대한 설명은 마무리한다. 중요한 것은 어느 한 기술을 아는 것이 아니고 전체적인 흐름을 파악하는 것이다. 가장 먼저 클래스를 구분하고 마킹을 한 후 컨디셔너를 거치면 쉐이핑 또는 폴리싱을 적용하고, 큐잉을 이용해 차별화된 서비스를 제공한 후, 필요시에는 RED나 WRED를 적용하며 WAN구간의 대역폭이 적으면 압축이나 LFI를 적용하는 것처럼, 엔드 투 엔드로 물 흐르듯이 막힘없이 흘러가게 하는 것이 QoS에서는 중요하다. 다음시간에는 QoS를 공부하고 적용하고 싶어하는 사람들을 위해 가상의 시나리오를 만든 후 엔드 투 엔드 QoS를 적용하는 것에 대해 살펴볼 것이다.


출처 - http://www.ionthenet.co.kr

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 13:53

지난 4번의 강좌를 통해 QoS의 전체적인 그림을 그려봤다. 이제부터는 세부적인 튜닝으로 들어가 QoS 혼잡예방을 위한 다양한 메커니즘에 대해 알아보자. 이번 호에는 TCP 프로토콜의 혼잡제어 메커니즘의 작동 방법과 테일 드롭시 어떤 문제점이 있는지, QoS에서는 어떻게 적용하는지 살펴볼 것이다. 특히 이론적으로 중요한 TCP 혼잡제어 메커니즘, 글로벌 싱크로나이제이션, RED, WRED 등에 대해 중점적으로 설명한다.

김화식 | 온세통신 시설운영팀 CCIE

QoS의 혼잡 회피(congestion avoidance) 메커니즘은 TCP 프로토콜이 네트워크 상에서 패킷손실 후 전송속도를 줄이는 TCP 혼잡제어 메커니즘을 기반으로 한다. 이는 큐에 혼잡이 발생하기 전에 미리 일부의 TCP 패킷을 드롭시킴으로 자연스럽게 큐에 들어오는 TCP 트래픽의 양을 줄어들게 만든다. 따라서 큐의 혼잡을 예방해 네트워크의 성능을 저하시키는 테일 드롭(tail drop)과 글로벌 싱크로나이제이션(global synchronization)이 발생하는 것을 미연에 방지한다. 결과적으로는 지연(delay)과 지터(Jitter)를 줄이는 역할을 수행하는 것이다.


TCP 프로토콜과 혼잡 제어
혼잡은 적정 수준 이상으로 큐에 패킷이 쌓여 있는 상태를 말하는데, 이는 주로 많은 양의 패킷이 들어오거나 과도한 쉐이핑 정책으로 인해 큐에 트래픽이 적체돼 있는 상태에서 발생한다(혼잡에 대한 자세한 내용은 QoS 강좌 1회를 참고하면 된다).
이렇게 혼잡이 발생한 상황에서 패킷이 더 들어오면 큐의 용량이 초과된다. 이때 큐의 용량을 초과해 버려지는 현상을 테일 드롭이라고 한다. 테일 드롭이 발생하면 해당 네트워크 상에 있는 대부분의 시스템 성능이 떨어지는데, 이를 두고 글로벌 싱크로나이제이션 현상이라고 한다. 그러면 테일 드롭은 왜 발생하고, 시스템 성능은 왜 저하되는 것일까. 그 이유는 TCP 혼잡제어 메커니즘을 자세히 살펴보면 알 수 있다.
초기에 TCP가 구현될 당시에는 패킷이 손실되거나 다른 이유로 인해 승인 패킷이 수신되지 않는 경우 RTO(Retransmission TimeOut) 만큼 기다렸다가 다시 전송을 시작하는 것이 거의 전부라고 할만큼 혼잡 제어의 개념은 거의 포함돼 있지 않았다.
물론, 당시의 네트워크 전송 속도나 전송되는 정보의 양은 지금과는 비교할 수 없을 정도로 적었기 때문에 그다지 필요성이 부각되지 않았다고 생각할 수 있다. 그러나, 인터넷의 사용이 증가하면서 인터넷 상의 라우터들을 연결하는 링크의 속도 차이로 인해 라우터 버퍼의 오버플로우(overflow)가 발생하고, 이로 인한 패킷 손실이 급격하게 증가하게 됐다. 만일 엔드 투 엔드로 연결이 돼 있을 때 수신측에서 허용 용량만 송신쪽에서 전송을 한다면 혼잡현상이 발생하지 않을 것이다.


TCP 슬로우 스타트와 TCP 혼잡 회피
어떤 TCP 연결이 초기 설정됐을 때 현재의 연결로는 어느 정도의 전송 속도를 수용할 수 있을지 전혀 알 수가 없다. 그렇다고 한꺼번에 많은 패킷들을 전송했다가 혼잡이 발생하면, 이는 더 큰 성능 저하의 요인이 된다. 따라서 현재 연결이 어느 정도의 전송 속도를 수용할 수 있는지를 파악하는 것(흔히 영문으로는 probe라는 용어를 사용한다)은 대단히 중요한 일이다. 이는 TCP 슬로우 스타트(slow start) 알고리즘을 이용하면 가능하다.



(그림 1)을 보면 연결이 설정된 후, 송신원은 초기 cwnd(congestion window: 혼잡 윈도우)를 1로 설정해 패킷 1을 전송한다(실제 TCP는 바이트 단위로 동작한다. 그러나, 설명을 쉽게 하기 위해 여기서는 패킷의 크기가 모두 동일하고, 바이트 대신 일련의 번호로 구분되는 것으로 설정했다).
패킷 1을 수신했다는 하나의 승인패킷(ACK)을 수신하면, 송신원은 cwnd를 1 증가시키므로 두 개의 패킷 2~3이 전송된다. 이 후 2개의 승인패킷(ACK)을 수신하면 다시 cwnd를 2 증가시키므로 네 개의 패킷이 전송될 수 있고, 이와 같은 방식으로 승인패킷(ACK)이 하나 수신될 때마다 계속 윈도우의 크기를 1만큼 증가시키게 된다.
즉, 슬로우 스타트 동안 송신원은 하나의 승인패킷(ACK)을 수신할 때마다 윈도우를 1 증가시키기 때문에 결과적으로는 하나의 승인 패킷을 수신할 때마다 두 개의 추가적인 패킷을 전송할 수 있게 된다. 슬로우라는 말과는 달리 실제로 윈도우는 지수적으로(exponentially) 빠르게 증가하는 것이다.
슬로우 스타트 상태에서의 윈도우는 지수적으로 계속 증가하는데, 윈도우의 크기가 임계 값(ssthresh: slow-start-threshold)과 같아지면 TCP 혼잡 회피가 시작된다(초기 ssthresh 값은 64K로 설정된다). 슬로우 스타트와는 달리 TCP 혼잡 회피 상태에서는 하나의 승인패킷(ACK)은 혼잡 윈도우의 크기를 1씩 증가시킨다. 예를 들어 cwnd의 값이 10인 상태에서 10개의 패킷이 안전하게 전송됐다는 승인 패킷을 수신하면, cwnd의 값을 11로 증가시킨다. 중요한 점은 혼잡 회피에서의 cwnd의 값은 슬로우 스타트에 비해 훨씬 느린 속도로 증가한다는 것이다.





(그림 2)는 TCP 슬로우 스타트와 TCP 혼잡 회피 상황에서 윈도우의 크기 변화를 표현한 것이다. (그림 2)를 보면 TCP 슬로우 스타트 상황일 때에 비해 윈도우의 크기가 완만하게 증가되는 것을 볼 수 있다.


TCP 혼잡 제어 메커니즘
송신원의 상태가 TCP 슬로우 스타트 상태에 있건, 아니면 TCP 혼잡 회피 상태에 있건 현재 연결이 유지되고 이를 통해 패킷들이 전송되는 한, 윈도우는 지속적으로 증가하고 언젠가는 혼잡으로 인한 패킷 손실이 발생하게 된다. 따라서 이를 복구하기 위한 기능이 TCP 혼잡 제어 메커니즘이다.
TCP 프로토콜에서 패킷이 전달되는 과정을 쉽게 설명하면 처음 TCP 세션이 연결된 후 전송을 시작할 때, 처음 윈도우 크기를 1로 설정해 전송을 시작하며, 타임아웃(retransmission timeout: RTO)이 발생하기 전에 승인 패킷(ACK)을 수신할 경우에는 윈도우의 크기를 2배로 증가시킨 후 전송한다.
만일 타임아웃이 발생할 때까지 승인 패킷(ACK)을 수신하지 못하면, 임계값(ssthresh)을 윈도우 크기의 반으로 설정을 하고, 윈도우 크기를 1로 재전송을 시작한다. 이후 윈도우 크기를 2배씩 증가시키다가 윈도우 크기가 임계값보다 커지면 윈도우 크기를 1씩 증가시킨다.

(그림 3)은 TCP의 동작을 보여주고 있다. 1로 표시된 구간은 TCP 슬로우 스타트에 해당되며, 2로 표시된 구간은 TCP 혼잡 회피에 해당된다.





·TCP 송신원이 타임아웃 이전에 ACK 수신할 때
  if CWND ( Threshold --> CWND = 2 * CWND
  if CWND > Threshold --> CWND = CWND + 1


· TCP 송신원이 타임아웃 이전에 ACK 수신하지 못할 때   
  Threshold = CWND / 2
  CWND = 1



네트워크의 불안요소 '글로벌 싱크로나이제이션'
TCP가 동작하는 모습을 살펴보면 네트워크의 전송상태가 좋을 경우에는 트래픽을 많이 전송하고, 패킷 손실이 발생하면 전송하는 트래픽의 양을 줄이는 것을 알 수 있다. 이 사실만으로 본다면 TCP는 상당히 똑똑한 프로토콜이라고 할 수도 있다. 하지만 바로 이런 TCP의 혼잡제어 메커니즘 때문에 사실은 또 다른 문제가 발생할 수 있다.
예를 들어, 일반적인 소규모의 네트워크 구성을 생각해보자. 라우터에 외부 네트워크가 연결돼 있고 내부에는 스위치 아래에 호스트 PC들이 연결돼 있다. 모든 호스트 PC들은 라우터를 통해서 외부 네트워크와 연결돼 있다. 동시에 여러 PC들이 인터넷을 접속하게 되면 TCP의 동작 상황에 따라 라우터의 출력 인터페이스 버퍼(buffer)에는 여러 개의 TCP 플로우가 존재하게 된다. 이럴 경우 큐 사이즈는 빠른 속도로 증가하게 되며, 이내 버퍼 풀(buffer full)이 발생하고, 오버플로우가 발생하게 된다.
그러면, 모든 TCP 플로우들은 버퍼 풀 이후에 도착한 모든 패킷들을 잃게 되며(테일 드롭 발생), 모든 호스트 PC들은 타임아웃이 발생할 때까지 잃어버린 패킷들에 대한 ACK를 받지 못하게 된다.
결국, 모든 호스트 PC들은 자신의 전송 속도를 줄이게 되며(윈도우의 크기를 1로 줄인다) 빠른 속도로 큐 사이즈는 줄어들게 된다. 그러나, 다시 슬로우 스타트 과정으로 인해 큐 사이즈는 증가하게 되고, 오버플로우가 발생하며, 모든 TCP 플로우에 대해 동일한 과정이 반복되게 된다. 이런 현상을 글로벌 싱크로나이제이션(Global Synchronization)이라 하는데, 트래픽 양의 급격한 출렁거림으로 인해 성능은 물론 네트워크 장비가 불안정해지는 원인이 된다.


글로벌 싱크로나이제이션 해결 방법 1 : RED
실제로 글로벌 싱크로나이제이션은 네트워크에 심각한 문제를 유발시킨다. 물론 QoS 측면에서는 더더욱 안 좋은 현상이기도 하다. 가장 큰 문제는 지연과 지터가 커진다는 것이다. QoS에서는 글로벌 싱크로나이제이션 현상을 해결하기 위해 RED(Random Early Detection), WRED(Weighted Random Early Detection) 등을 사용한다.

(그림 4)는 RED를 적용하기 전과 적용한 후의 TCP 트래픽 흐름이 어떻게 차이가 나는지 보여주는 그림이다. RED는 TCP 동작 특성을 이용한 대표적인 혼잡 제어 기법으로, 이름이 암시하는 것처럼, 혼잡이 발생하기 이전에 미리 랜덤한 방식으로 패킷을 버림으로써 특정한 TCP 플로우로 하여금 전송 속도를 줄이게 하는 방법이다. 기본적인 동작은 큐에 두 개의 쓰레시홀드 TH_min과 TH_max를 두고 세 구간에 서로 다른 드롭 확률을 적용하는 것이다.



RED의 동작 과정은 다음과 같다(그림 5).




① 평균 큐 사이즈(AQS: Average Queue Size)가 TH_min보다 작은 경우에는 어떤 패킷도 버리지 않고 모두 받아 들인다.

② 큐 사이즈가 TH_min보다는 크지만 TH_max보다는 작은 경우 큐 사이즈에 따라 특정한 확률값을 갖고 패킷을 버린다.

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


일반적으로, TH_max 값이 너무 작으면 패킷 드롭이 빈번히 발생해서 전체 성능에 심각한 영향을 줄 수도 있으며, TH_max 이상에서 모든 입력되는 패킷을 버리는 동작이 버퍼 오버플로우에 의한 결과와 동일하기 때문에 TH_max를 큐의 최대 크기와 같거나 가까운 값으로 설정을 하게 된다. 또한, p(드롭 가능성)의 값이 너무 작으면 패킷이 드롭되는 빈도가 낮아져 혼잡 제어 효과가 제대로 나타나지 않을 수도 있다. 따라서, RED를 사용할 때는 TH_min, TH_max, 그리고 p 값을 적절하게 설정해 주는 것이 중요하다.


RED를 진일보시킨 'WRED'
RED를 적용함으로써 글로벌 싱크로나이제이션 현상은 예방할 수 있다. 하지만 랜덤하게 패킷을 버리기 때문에 중요한 패킷이 버려질 수 있는 단점이 있다. 이런 문제점을 해결하기 위해 버려질 수 있는 확률에 대한 가중치를 부여했다. 즉, WRED는 하나 혹은 여러 개의 서로 다른 클래스 트래픽에 서로 다른 특성을 갖는 RED를 적용함으로써 혼잡 제어를 하는 것을 말한다. 서로 다른 특성을 갖는 RED라는 것은 TH_min, TH_max, 그리고 max p 값이 서로 다른 RED 패킷 드롭 확률을 말한다.
동일한 클래스 트래픽에 WRED를 적용하는 경우는, 같은 클래스에 속한 서로 다른 우선순위의 패킷들에 서로 다른 RED를 적용하게 된다. 예를 들면, DiffServ의 AFx 클래스의 경우, 동일한 클래스에 3개의 서로 다른 드롭 우선권(drop precedence)이 존재하는데, 각각의 드롭 우선권에 대해 서로 다른 RED를 적용할 수 있다.

(그림 6)은 WRED 패킷 드롭 확률의 일례를 보여주고 있다. 이 그림은 DiffServ의 어떤 클래스 트래픽에서 파랑색과 빨간색으로 마크된 패킷들에 대해 서로 다른 RED를 적용할 수 있음을 보여주고 있다.





(그림 6)에서 볼 수 있듯이 낮은 우선순위의 패킷 혹은 클래스에 대해서는 더욱 공격적인 패킷 드롭이 발생하며, 우선순위가 높은 패킷 혹은 클래스에 대해서는 보수적인 패킷 드롭이 발생된다. 그림에서는 우선순위가 낮은 A에 대한 TH_max가 Z에 대한 TH_min보다 크게 설정된 경우를 보여주고 있으나, A에 대한 TH_max가 Z에 대한 TH_min보다 반드시 작거나 같아야 하는 조건을 줄 수도 있다.
비록 같은 클래스에 속한 패킷들이지만, 드롭 우선순위가 다르며, 서로 다른 RED가 적용된다. (그림 6)에서 큐에 10개의 패킷이 들어있는 상태에서 새로운 패킷이 들어왔을 경우 새로 들어온 패킷이 빨간색이라면 렌덤하게 드롭이 되겠지만, 파란색 패킷이 들어오면 정상적으로 서비스를 하게 된다.
또, 큐에 패킷이 30 이상 들어있는 상태에서는 빨간색 패킷은 100% 드롭되며, 나머지의 여유공간은 파란색 패킷이 서비스되는 것이다. 즉, 중요한 트래픽을 파란색으로 규정하고, 중요하지 않은 트래픽을 빨간색으로 규정해 서로 다른 우선순위를 부여함으로써 차별화 된 서비스를 제공할 수 있게 되는 것이다.
IP 우선권을 기준으로 WRED를 구성할 때는 8개의 WRED 설정이 가능하며, DSCP를 기준으로 WRED를 구성할 때는 64개까지의 WRED 설정이 가능하다.

실전! 연습문제


그럼 이제부터 연습문제를 풀어보면서 WRED 설정에 대해 알아보자.

<연습 문제>

(그림 7)에서 R3는 프레임 릴레이 128Kbps로 연결돼 있다. 다음의 조건을 만족하도록 R3에 설정하라.




① E0/0에서 들어오는 VoIP 패킷은 DSCP EF 코드를 사용해 CB 마킹하고, 전용큐를 사용해 58Kbps의 대역폭을 할당하며, WRED는 적용하지 말아라.


② E0/0에서 들어오는 HTTP 트래픽 중 URL에 "important"가 들어가는 패킷은 DSCP AF21 코드를 사용해 CB 마킹하고, 전용큐를 사용해 20Kbps의 대역폭을 할당하며, WRED를 적용하라.


③ E0/0에서 들어오는 HTTP 트래픽 중 URL에 "not-so"가 들어가는 패킷은 DSCP AF23 코드를 사용해 CB 마킹하고, 전용큐를 사용해 8Kbps의 대역폭을 할당하며, WRED를 적용하라.


④ E0/0에서 들어오는 나머지 패킷은 DSCP BE 코드를 사용해 CB 마킹하고, 전용큐를 사용해 20Kbps의 대역폭을 할당하며, WRED를 적용하라.


<연습 문제에 대한 설명>


CB 마킹(Class-Based Marking) 설정 순서는 다음과 같다.


① Class-map match-all/any 명령어를 이용해 클래스를 설정한다.

② policy-map 명령어를 이용해 적용할 정책을 설정한다.

③ 2번에서 만든 policy-map 이름을 적용하고자 하는 인터페이스에서 service-policy 명령어를 이용해 적용한다.

<연습문제 해결 : WRED 설정>

ip cef  
!                                                              → S0/0에 LLQ를 생성하는 과정
Class-map match-all dscp-ef                → dscp-ef 라는 Class-map 생성
  match ip dscp ef  
Class-map match-all dscp-af21             → dscp-af21 라는 Class-map 생성
  match ip dscp af21  
Class-map match-all dscp-af23             → dscp-af23 라는 Class-map 생성
  match ip dscp af23  
  !                                                           → E0/0에서 들어오는 트래픽에 대한 BC마킹 과정
Class-map match-all http-impo              → http-impo라는 Class-map 생성
  match protocol http url "*important*"  
Class-map match-all http-not                 → http-not라는 Class-map 생성
  match protocol http url "*not-so*"  
Class-map match-all class-default         → class-default라는 Class-map 생성
  match any                                             → 나머지 모든 트래픽들은 class-default에 적용
Class-map match-all voip-rtp                  → voip-rtp 라는 Class-map 생성
  match ip rtp 16384 16383                       → VoIP 트래픽을 구분
!                                                               → E0/0에 들어오는 부분에 적용할 정책 생성하는 과정
Policy-map laundry-list                           → laundry-list 라는 Policy-map 생성
  class voip-rtp                                       → 기 작성한 'voip-rtp' 라는 class-map을 소환
    set ip dscp ef                                      → voip 패킷에 대하여 DSCP 값을 EF로 설정
  class http-impo  
    set ip dscp af21  
  class http-not  
    set ip dscp af23  
  class class-default  
    set ip dscp default  
!                                                              → S0/0에 나가는 부분에 적용할 WRED 정책 생성하는 과정
Policy-map queue-on-dscp                   → queue-on-dscp라는 Policy-map 생성
  class dscp-ef                                      → 기 작성한 'dscp-ef' 라는 class-map을 소환
    priority 58                                           → LLQ 설정 부분(최우선순위 설정)
  class dscp-af21                                  → 기 작성한 'dscp-af21'라는 class-map을 소환
    bandwidth 20                                      → 대역폭을 20Kbps로 설정
    random-detect dscp-based              → dscp-base WRED 적용부분
  class dscp-af23  
    bandwidth 8  
    random-detect dscp-based  
  class class-default  
    fair-queue  
    random-detect dscp-based  
!  
interface Ethernet0/0  
  ip address 192.168.3.253 255.255.255.0  
  ip nbar protocol-descovery                  → nbar를 적용함
  service-policy input laundry-list           → 기 작성한 'laundry-list' 정책을 적용함
!  
interface Serial0/0  
  no ip address  
  bandwidth 128  
  encapsulation frame-relay  
  load-interval 30  
  max-reserved-bandwidth 85  
  service-policy output queue-on-dscp  → 기 작성한 'queue-to-point' 정책을 적용함
  clockrate 128000  
!  
interface Serial0/0.1 point-to-point  
  ip address 192.168.2.253 255.255.0  
  frame-relay interface-dlci 101  


<WRED 설정 확인>


R3# show policy-map int s0/0      
     
Serial0/0      

service-policy output: queue-on-dscp      
     
  Class-map:  dscp-ef  (match-all)      
  46437 packets, 2971968 bytes      
  30 second offered rate 0 bps, drop rate 0 bps      
  Match: ip dscp ef      
  Weighted Fair Queueing      
     Strict Priority      
     Qutput queue: Conversation 264      
     Bandwidth 58 (kbps) Burst 1450 (Bytes)      
     (pkts matched/bytes matched) 42805/2739520    
     (total drops/no-buffer drops) 0/0      
     
  Class-map:  dscp-af21  (match-all)      
  2878 packets, 3478830 byte      
  30 second offered rate 76000 bps, drop rate 0 bps    
  Match: ip dscp af21      
  Weighted Fair Queueing      
     Qutput queue: Conversation 266      
     Bandwidth 20 (kbps)      
     (pkts matched/bytes matched) 2889/3494718    
     (depth/total drops/no-buffer drops) 11/26/0    
      exponential weight: 9      
      mean queue depth: 5      
     
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thersh prob
af21 2889/3494718 8/9904 18/21288 32 40 1/10
     
  Class-map:  dscp-af23  (match-all)      
  1034 packets, 1250984 byte      
  30 second offered rate 32000 bps, drop rate 0 bps    
  Match: ip dscp af23      
  Weighted Fair Queueing      
     Qutput queue: Conversation 267      
     Bandwidth 8 (kbps)      
     (pkts matched/bytes matched) 1047/1266140    
     (depth/total drops/no-buffer drops) 11/46/0    
     exponential weight: 9      
     mean queue depth: 5      
     
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thersh prob
af23 1047/1266140 13/18252 33/34083 24 40 1/10
     
  Class-map:  dscp-default  (match-any)      
  847 packets, 348716 byte      
  30 second offered rate 2000 bps, drop rate 0 bps    
  Match: any      
  Weighted Fair Queueing      
     Flow Based Fair Queueing      
     Maximum Number of Hashed queues 256      
     (total queued/total drops/no-buffer drops) 0/0/0    
      exponential weight: 9      
     
dscp Transmitted Random drop Tail drop Minimum Maximum Mark
pkts/bytes pkts/bytes pkts/bytes thresh thersh prob
default 59/767 0/0 0/0 20 40 1/10



이번에 풀어본 연습문제는 상당히 복잡하므로, 지금까지 배워왔던 내용들을 잘 숙지하고 있어야 성공적으로 해결할 수 있을 것이다. CB 마킹을 이용한 이유는 명령어를 적용하는 형식에 익숙해지도록 유도하기 위해서였다. 이 CB 구조는 실무에서 요구되는 거의 모든 조건에 적용할 수 있기 때문에, 이 문장의 구조에 익숙해지면 상당한 실력을 요구하는 문제라도 쉽게 풀어낼 수 있을 것이다. 다음호에는 QoS에서 사용되는 또 다른 튜닝기법인 LE(Link Efficiency) 매커니즘에 대해 알아볼 것이다.

출처 - http://www.ionthenet.co.kr

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 13:48
[자이온의 실전 QoS 4] 큐잉 매커니즘의 이해와 활용

큐잉은 QoS에서 중요한 4가지 측정요소인 대역폭, 지연, 지터, 패킷 손실을 직접적으로 컨트롤할 수 있는 기술이다. 특히 중요한 트래픽에 대한 패킷 손실을 예방하며 허용된 대역폭 내에서 지연을 최소화할 수 있는 막강한 기능을 제공한다. 많은 이들이 QoS라는 말을 들을 때 제일 먼저 큐잉을 떠올릴 정도로 애용되고 있으며, QoS를 제공하기 위한 DiffServ의 여러 모듈들 중에서 유일하게 매번 사용되는 모듈이다.

김화식_온세통신 시설운영팀 CCIE

지난호에서 우리는 트래픽 쉐이핑과 폴리싱에 대해 알아봤다. 임계값(threshold)을 초과한 트래픽에 대해 버퍼를 이용해 지연시켰다가 서비스하는 쉐이핑과 드롭을 시키는 폴리싱에 대해 설명을 했으며, 쉐이핑을 이용하면 네트워크 상의 이그레스 블록킹(egress bloking) 문제와 대부분의 QoS 관련 이슈(패킷 손실에 의한 성능저하 문제)를 해결할 수 있다는 점을 설명했다. 또한 폴리싱을 이용하면 네트워크의 용량 부족 문제를 해결할 수 있으며, 대역폭을 쉽게 관리할 수 있고, 바이러스나 P2P 패킷과 같은 일부 서비스가 전체 네트워크 서비스에 영향을 미치는 것을 예방할 수 있다는 것도 알아봤다.
이번호에는 큐잉(queuing)에 대해 알아볼 것이다. 큐잉의 종류와 장단점, 그리고 실무에서의 적용 방법 등을 중심으로 이야기를 풀어나갈 것이다. 우선 큐(queue)의 기본에 대해 알아보자. 큐를 이해하는 가장 간단한 방법은 버스를 탈 때 줄서는 모습을 생각하면 된다. 보통 차례대로 버스를 타게 되면 제일 앞에 줄서있는 사람이 제일 먼저 버스에 올라탈 수 있다. 이런 원리가 큐의 가장 기본이 되는 FIFO(First-In First-Out) 큐인 것이다.

네트워크에서 큐잉의 의미
네트워크에서 큐잉은 어떤 네트워크 장비가 처리(서비스)할 수 있는 것 이상으로 패킷이 도착하거나, 동시에 동일한 목적지로 향하는 패킷들이 존재할 때 발생한다. 즉, 한꺼번에 처리할 수 없는 패킷들을 잠시 동안 버퍼(메모리)에 저장해 두었다가 나중에 서비스를 하는 것이 큐잉이다. 이때 사용되는 버퍼의 종류는 하드웨어 큐와 소프트웨어 큐로 나눌 수 있다.
좀더 쉽게 풀어서 설명하면 라우터로 들어온 인바운드 트래픽은 라우팅 프로세스에 의해 라우팅 경로가 결정되며, 결정된 출력 인터페이스를 통해 서비스된다. 이때 라우터의 인터페이스에서 연속 지연(serialization delay) 시간 동안 패킷을 저장해야 하는 상황이 생기며, 이를 처리하기 위해 각 인터페이스마다 일정량의 하드웨어 큐를 갖는다. 이때 인터페이스에 할당되는 하드웨어 큐를 보통 TX 큐(Transmit Queue) 또는 TX 링(Transmit Ring)이라고 말한다. 이 하드웨어 큐의 크기는 라우터의 성능에 따라서 달라진다. TX 큐의 특징은 다음과 같다. 

·FIFO 스케줄링(scheduling)만 지원하며 변경할 수 없다.
·인터페이스별로 1개만 사용할 수 있다.
·다른 큐잉 스케줄링을 사용하면 IOS는 TX 큐의 길이를 자동으로 줄여준다.
·관리자가 임의의 설정을 통해 TX 큐의 길이를 조절할 수 있다.

TX 큐는 FIFO 스케줄링만을 지원하기 때문에 FIFO 큐잉의 가장 큰 단점인, 모든 트래픽에 대해 단일 트래픽으로 인식하고 단지 큐에 들어온 순서에 의해서만 서비스를 해주는(베스트 에포트 서비스) 문제를 갖고 있다. 이 문제를 해결하기 위해 TX 큐 앞에 소프트웨어 큐를 두어 스케줄링을 제공한다. 우리가 일반적으로 알고 있는 큐잉은 이 소프트웨어 큐를 지칭하는 말이다. 

FIFO 큐잉의 이해
FIFO 큐잉은 단일 FIFO 큐를 사용하는 것을 말한다. 가장 기본적인 큐잉의 구조로 하드웨어 큐의 연장선상에서 생각하면 된다. 하드웨어 큐(TX 큐) 앞에 또 하나의 하드웨어 큐를 제공하는 것과 같은 동작을 한다. 일반적으로 FIFO 큐잉은 하나의 큐에 모든 클래스의 트래픽을 저장하게 된다. 그 이유는 큐가 하나밖에 없기 때문이다.

FIFO 큐잉에 사용되는 스케줄링 방식은 'First Come First Serve'다. 즉, 패킷의 클래스나 우선순위에 상관없이 먼저 입력된 패킷을 먼저 서비스하게 된다. 베스트 에포트 서비스 모델만을 갖고 있는 전통적인 인터넷에서 사용되는 큐잉과 스케줄링 구조에 해당한다. 트래픽의 구분이 존재하지 않기 때문에, FIFO 큐잉을 사용하는 장비에서는 패킷 분류(classification)나 마킹(marking)처럼 클래스와 관련된 기능은 필요 없다.
FIFO 큐잉의 장점은 구현이 간단하며 FIFO 큐의 동작이 예측 가능하다는 것이다. 즉, 패킷들의 순서가 유지되며, 패킷의 최대 지연은 큐의 최대 크기에 의해 결정된다. FIFO 큐잉의 단점으로는 클래스의 구분이 없기 때문에 차등화된 서비스를 제공하는 것이 불가능하다는 점이다. 또한, 테일(tail) 드롭이 발생하기 때문에 버스트 트래픽 서비스에 부적합 하며, 혼잡이 발생하는 경우 TCP보다 UDP 트래픽에 유리하다.
즉, TCP와 UDP 트래픽이 혼재하는 경우 혼잡이 발생하면, TCP 센더는 흐름 제어 알고리즘에 의해 전송 속도를 줄이게 되지만, UDP 센더는 계속해서 트래픽을 보내게 되며 TCP의 흐름제어에 의해 발생한 대역폭을 차지하게 돼 결국에는 TCP 트래픽의 서비스가 어렵게 된다. TCP 흐름제어에 대한 자세한 설명은 혼잡회피부분에서 보다 자세하게 설명할 것이다.


FIFO 큐잉을 개선한 '우선순위 큐잉'
엄격한 우선순위(strict priority) 큐잉이라고도 불리는 우선순위(priority) 큐잉은 FIFO 큐잉의 단점인 클래스의 구분이 없기 때문에 차등화된 서비스를 제공하지 못하는 문제를 해결하기 위해 만들어 졌다.


(그림 3)을 보면 우선순위 큐는 기존의 FIFO 큐잉이 단일 FIFO 큐를 사용하는 것에 비해 'High' 'Medium' 'Normal' 'Low'의 4가지 FIFO 큐를 사용하는 것을 알 수 있다. 4개의 FIFO 큐를 사용하므로, 각각의 큐가 서로 다른 트래픽 클래스에 매핑이 된다.


우선순위 큐잉을 사용하는 경우 스케줄링 방식은 아주 단순하다. (그림 4)를 보면 낮은 우선순위 큐에 저장돼 있는 패킷들은 높은 우선순위 큐에 저장돼 있는 패킷들이 모두 서비스 된 이후에 서비스가 되는 것을 알 수 있다. 만약, 낮은 우선순위 큐에 저장돼 있는 패킷이 서비스 되는 도중이라도 높은 우선순위 큐에 패킷이 입력되면, 낮은 우선순위 큐는 서비스를 잠시 멈추고 높은 우선순위 큐에 새로 도착한 패킷을 먼저 서비스 해주게 된다.
우선순위 큐잉 방식의 장점은 간단한 방법(우선순위가 높은 패킷을 우선 서비스)으로 차등화된 서비스를 제공할 수 있다는 것이다. 이 때문에 실시간 애플리케이션의 지원이 가능하다. 그러나 높은 우선순위 큐에 패킷이 계속해서 입력될 때, 낮은 우선순위 큐에 저장된 패킷이 서비스가 되지 못하는 아사(starvation) 현상이 발생되는 문제가 발생한다. 또한, 동일한 우선순위의 패킷만 많이 들어오는 경우에는 FIFO 큐처럼 동작이 되는 문제도 생길 수 있다.

커스텀 큐잉의 구현 원리
페어(fair) 큐잉이라고도 부르는 커스텀(custom) 큐잉은 앞서 설명한 우선순위 큐잉의 단점인 우선순위가 낮은 클래스의 패킷들이 우선순위가 높은 트래픽에 의해 아사되는 문제를 해결하기 위해 만들어 졌다.


(그림 5)를 보면 커스텀 큐잉은 최대 16개의 FIFO 큐를 사용하는 것을 알 수 있다. 관리자가 각 큐에 대해 클래스를 구분해서 각각의 클래스마다 각각의 큐를 지정해 사용할 수 있다. 우선순위 큐에서 클래스를 4개로 나눠 분리하는 것보다 더 세분화해 분리할 수 있다는 것이 장점이다.
이렇게 세분화된 트래픽은 각각의 해당 큐로 보내져 라운드-로빈 스케줄링에 의해 하드웨어 큐(TX 큐)로 서비스된다. 즉, 모든 큐의 패킷이 공평하게 서비스되는 것이다. 우선순위 큐잉에서는 높은 우선순위 큐가 패킷을 갖고 있는 한, 낮은 우선순위 큐에 비해 절대적인 서비스 우선순위를 유지한다. 때문에 낮은 우선순위 큐가 아사 현상을 경험하게 되지만, 커스텀 큐잉에서는 모든 큐가 동일한 우선순위를 갖기 때문에 아사 현상은 발생하지 않게 된다. 그러나, 이 방식은 트래픽의 특성을 고려하지 않고 서비스 차원에서의 공정성만을 감안하고 있기 때문에, 스케줄링 차원에서 차등화된 서비스를 제공하는 것은 불가능하며, 관리자의 잘못된 설정에 의해 대역폭의 비효율적인 할당과 지연시간의 증가 등의 문제가 발생할 수 있다.


우선순위 큐잉과 커스텀 규잉 방식의 장점만 결합한 WFQ
WFQ는 우선순위 큐잉의 단점인 우선순위가 낮은 클래스의 패킷들이 우선순위가 높은 트래픽에 의해 아사되는 문제를 해결하는 동시에 커스텀 큐잉 방식에서 차등화된 서비스를 제공하지 못하는 현상을 해소하기 위해 개발된 것이다.

(그림 6)을 보면 WFQ는 최대 4096개의 큐를 사용하는 것을 알 수 있다. 굉장히 많은 큐를 제공하기 때문에 클래스를 플로우 단위(fer-flow)로 나눠 사용한다. 각각의 큐는 IP 우선권(precedence)을 기준으로 가중치(weight)를 받게 된다. 더 정확하게 말하면 IP 우선권의 크기에 반비례해 부여한다. 실제 패킷의 크기와 수식으로 계산을 해서 나온 가상 패킷의 크기를 기준으로 서비스되도록 스케줄링이 이뤄진다. 이 같은 수식을 적용하는 이유는 우선순위가 높거나 크기가 작은 패킷들에 대해 우선적으로 서비스하기 위함이다.

(그림 7)은 WFQ에서 어떤 방식으로 스케줄링이 이뤄지는지를 보여주는 그림이다. 큐 1에는 우선권 값이 5인 트래픽이 들어 있고, 큐 2에는 우선권 값이 0인 트래픽이 들어 있다. 실제 패킷의 크기는 큐 1에 있는 패킷이 더 큰 것을 알 수 있다. 이 같은 환경에서 큐의 실행은 다음과 같다.

·FIFO 큐잉으로 서비스를 한다고 하면 서비스되는 순서는 큐1_1 → 큐2_1 → 큐2_2 → 큐2_3 → 큐2_4 → 큐1_2가 된다. 

·우선순위 큐잉으로 서비스를 한다고 하면 우선순위가 낮은 큐 2에 있는 패킷은 큐 1에 계속 패킷이 들어오기 때문에 서비스되지 않는다. 이것이 앞서 말한 아사(starvation) 현상이다.

·커스텀 큐잉으로 서비스를 한다고 하면 관리자의 설정(바이트 카운트, MTU)에 따라서 결과가 너무 차이가 나게 된다.

·WFQ를 이용해 서비스를 한다고 하면 '실제 패킷의 크기 / 우선권(precedence)에 의한 웨이트 = 가상 패킷의 크기' 의 공식을 적용해 계산된 가상 패킷의 크기를 구한 다음, 끝나는 시간이 적은 패킷을 우선해 서비스한다. (그림 7)에서의 결과를 보면 큐1_1 → 큐2_1 → 큐1_2 → 큐2_2 → 큐1_3 → 큐2_3 등의 순서로 서비스 됨을 알 수 있다. 즉, WFQ를 이용해 서비스를 하면 우선순위가 높은 패킷을 먼저 서비스하면서 우선순위가 낮은 패킷에 대해서도 서비스를 제공함을 알 수 있다.

WFQ 개선시킨 3단계 큐잉 기법 'CBWFQ'
CBWFQ는 WFQ를 한층 발전시킨 모습으로, 관리자들이 설정하기 쉽게 3단계를 이용해 구현한다. 1단계에서는 클래스를 구분하고, 2단계에서는 정책을 적용하고, 3단계에서는 인터페이스에 설정을 한다.




CBWFQ는 커스텀 큐잉의 장점인 각각의 큐마다 최저 대역폭을 바이트 단위로 할당하는 기능을 발전시켜서 전체 대역폭의 %로도 최저 대역폭을 보장할 수 있게 했다. 하지만 기존의 WFQ가 플로우 기반으로 구현돼 큐가 많이 필요했던 것에 비해(4098개) CBWFQ는 클래스를 기준으로 큐를 구분하기 때문에 64개로도 설정이 충분하다. 드롭 정책에도 WFQ가 테일 드롭(tail drop) 밖에 사용하지 못했던 것에 비해 CBWFQ에서는 테일 드롭과 병행해 WRED(Weighted random rarly detection)을 사용해 글로벌 싱크로나이제이션(global synchronization) 문제를 최소화했다.

CBWFQ의 실제 적용
자, 이론 설명은 여기까지 마치고 지금부터는 연습문제를 통해 CBWFQ의 초급 설정에 대해 알아보자.


☞ 연습문제 1
(그림 9)에서 라우터 3는 프레임 릴레이 128kbps로 연결돼 있다. 다음의 조건을 만족하도록 라우터 3에 설정하라.

1. 모든 VoIP 트래픽은 VoIP 전용 큐를 사용해 서비스하라.
2. VoIP를 제외한 다른 트래픽은 일반 큐를 사용해 서비스하라.
3. 전체 대역폭의 50%를 VoIP 전용 큐에 할당하라.
4. 일반 큐는 WFQ를 사용하라.
5. CBWFQ(Class-Based WFQ)를 이용해 설정하라.


(그림 9) CBWFQ 적용을 위한 실전문제(초급)

☞ 연습문제 1의 해결 방법
CBWFQ의 설정 순서는 다음과 같다.

1. Class-map match-all/any 명령어를 이용해 클래스를 설정한다.
2. policy-map 명령어를 이용해 적용할 정책을 설정한다.
3. 2번에서 만든 policy-map 이름을 적용하고자 하는 인터페이스에서 service-policy 명령어를 이용해 적용한다.

CBWFQ의 설정(초급)은 다음과 같다.

ip cef  
!  
class-map match-all voip-rtp  → Voip-rtp라는 이름의 Class-map을 설정(①)
  match ip rtp 16384 16383  → VoIP의 범위를 정함(클래스를 나누는 모습)
!  
policy-map queue-voip  → Queue-voip라는 이름의 policy-map을 설정(②)
  class voip-rtp   → ①에서 만든 Class-map을 불러옴
   bandwidth percent 50  → ①에서 만든 VoIP 클래스에 대역폭의 50%를 할당
  class class-default  → VoIP를 제외한 트래픽은 class-default로 정의
   fair-queue   → 일반큐를 WFQ로 설정하는 모습
!  
interface Serial0/0  
  no ip address  
  encapsulation frame-relay  
  load-interval 30  
  bandwidth 128  
  service-policy output queue-voip  → ②에서 만든 queue-voip를 인터페이스에 적용(③)
  clockrate 128000  
!  
interface Serial0/0.1 point-to-point  
  ip address 192.168.2.253 255.255.255.0  
  frame-relay interface-dlci 101  

CBWFQ 설정한 것을 확인하면 다음과 같다(초급).

R3# show policy-map int s0/0  
 
Serial0/0  
 
service-policy output: queue-voip  
 
  Class-map:  voip-rtp  (match-all)  
   136435 packets, 8731840 bytes  
   30 second offered rate 51000 bps, drop rate 0 bps  
   Match: ip rtp 16384 16383  
   Weighted Fair Queueing  
     Qutput queue: Conversation 256  
     Bandwidth 50 (%) Max Threshold 64 (packets)  
     (pkts matched/bytes matched) 48550/3107200  
     (depth/total drops/no-buffer drops) 14/0/0  
 
  Class-map:  class-default  (match-any)  
   1958 packets, 1122560 byte  
   30 second offered rate 59000 bps, drop rate 0 bps  
   Match: any  
   Weighted Fair Queueing  
     Flow Based Fair Queueing  
     Maximum Number of Hashed Queues 256  
     (total queued/total drops/no-buffer drops) 15/0/0  


연습문제 1은 초급단계라서 생각보다 쉽다고 느낄지도 모르겠다. 이번에는 조금 복잡한 문제를 풀어보자.


☞ 연습문제 2

(그림 10)에서 라우터 3는 프레임 릴레이 128kbps로 연결돼 있다. 다음의 조건을 만족하도록 라우터 3에 설정하라.

(그림 10) CBWFQ 적용을 위한 실전문제(고급)

그림은 그림 9와 동일함~~

1. VoIP 트래픽은 DSCP→ EF 마킹, 테일 드롭 적용, 대역폭 58Kbps 할당, 전용 큐를 사용
2. 서버 1→ 클라이언트 1 넷미팅 트래픽은 DSCP → AF41, 테일 드롭 적용, 대역폭 22Kbps 할당, 전용 큐를 사용
3. URL에 "important" 트래픽은 DSCP → AF21, WRED 적용, 대역폭 20Kbps 할당, 전용 큐를 사용
4. URL에 "not-so" 트래픽은 DSCP → AF23, WRED 적용, 대역폭 8Kbps 할당, 전용 큐를 WFQ로 사용
5. 그 외 모든 트래픽은 DSCP → BE, WRED 적용, 대역폭 20Kbps 할당, 전용 큐를 WFQ로 사용
6. E0/0의 인바운드에 CB 마킹을 적용해 마킹하고 S0/0의 아웃바운드에 CBWFQ를 적용


1. VoIP 트래픽은 DSCP 값을 EF로 마킹하고, 테일드롭을 적용하고, 대역폭을 58Kbps로 할당하며, VoIP 전용큐를 사용해 서비스하라.
2. 서버 1에서 클라이언트 1로 가는 넷미팅 비디오와 보이스 패킷은 DSCP 값을 AF41로 마킹하고, 테일 드롭을 적용하고, 대역폭을 22Kbps로 할당하며, 넷미팅 전용큐를 사용해 서비스하라.
3. 모든 HTTP 트래픽 중 URL에 'important'라는 글자가 있는 패킷은 DSCP 값을 AF21로 마킹하고, WERD을 적용하고, 대역폭을 20Kbps로 할당하며, 전용 큐를 사용해 서비스하라.
4. 모든 HTTP 트래픽 중 URL에 'not-so'라는 글자가 있는 패킷은 DSCP 값을 AF23로 마킹하고, WERD을 적용하고, 대역폭을 8Kbps로 할당하며, 전용큐를 사용해 서비스하라.
5. 그 외에 모든 트래픽은 DSCP 값을 BE로 마킹하고, WERD를 적용하고, 대역폭을 20Kbps로 할당하며, 전용 큐를 WFQ로 이용해 서비스하라.
6. E0/0의 인바운드에 CB 마킹을 적용해 마킹하고 S0/0의 아웃바운드에 CBWFQ를 적용하라. 


☞ 연습문제 2의 해결 방법
연습문제 2의 설정 방법은 다음과 같다.

ip cef  
!  
class-map match-all dscp-ef   → Dscp-ef라는 이름의 Class-map을 설정(①)
  match ip dscp ef   → 범위를 정함(클래스를 나누는 모습)
class-map match-all dscp-af41  
  match ip dscp af41  
class-map match-all dscp-af21  
  match ip dscp af21  
class-map match-all dscp-af23  
  match ip dscp af23  
class-map match-all http-impo  → Http-impo라는 이름의 Class-map을 설정(①)
  match protocol http url "*important*"  → nbar를 이용해 url을 확인
class-map match-all http-not  
  match protocol http url "*not-so*"  
class-map match-all voip-rtp   → Voip-rtp라는 이름의 Class-map을 설정(①)
  match ip rtp 16384 16383   → 범위를 정함(클래스를 나누는 모습)
class-map match-all NetMeet   → NetMeet라는 이름의 Class-map을 설정(①)
  match access-group 101   → access-list를 이용해 클래스를 구분함
!  
!  
policy-map laundry-list   → Laundry-list라는 이름의 policy-map을 설정(②)
  class voip-rtp    → ①에서 만든 Class-map을 불러옴
   set ip dscp ef    → dscp 값은 ef로 설정
  class NetMeet  
   set ip dscp af41  
  class http-impo  
   set ip dscp af21  
  class http-not  
   set ip dscp af23  
  class class-default  
   set ip dscp default  
policy-map queue-on-dscp   → Queue-on-dscp라는 이름의 policy-map을 설정(②)
  class dscp-ef    → ①에서 만든 Class-map을 불러옴
   bandwidth 58    → 대역폭을 58Kbps로 할당
  class dscp-af41  
   bandwidth 22  
  class dscp-af21  
   bandwidth 20  
   random-detect dscp-based  → WRED를 설정함
  class dscp-af23  
   bandwidth 8  
   random-detect dscp-based  
  class class-default  
   fair-queue  
   random-detect dscp-based  
!  
interface Ethernet0/0  
  ip address 192.168.3.253 255.255.255.0  
  ip nbar protocol-discovery  
  half-duplex  
  service-policy input laundry-list  → ②에서 만든 laundry-list를 인터페이스에 적용(③)
!  
interface Serial0/0  
  no ip address  
  encapsulation frame-relay  
  load-interval 30  
  bandwidth 128  
  max-reserved-bandwidth 85  
  service-policy output queue-on-dscp   → ②에서 만든 queue-on-dscp를 인터페이스에 적용(③)
  clockrate 128000  
!  
interface Serial0/0.1 point-to-point  
  ip address 192.168.2.253 255.255.255.0  
  frame-relay interface-dlci 101  
!  
access-list 101 permit u에 host 192.168.3.100 range 16384 32767 192.168.1.0 0.0.0.255 range 16384 32767  
 
조금 복잡하기는 하지만 천천히 확인해보면 그 동안 배웠던 설정으로 돼있음을 알 수 있다. 이번 시간에 배운 설정 내용을 완벽하게 이해할 수 있다면 QoS에 대해 이미 상당한 실력이 싸여있음을 증명하는 것이다. 지금까지 4회에 걸친 강좌를 통해 QoS의 큰 골격에 대해서는 머리부터 발끝까지 살펴봤다. 다음 강좌부터는 세부적인 튜닝 부분과 왜 테일 드롭이 좋지 않은 것인지. 그리고 글로벌 싱크로나이제이션(global synchronization) 문제가 네트워크에 어떤 영향을 끼치는지에 대해 살펴보자.




출처 - http://www.ionthenet.co.kr

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 13:46
[QoS 강좌 3] 트래픽 쉐이핑과 폴리싱

트래픽 쉐이핑과 폴리싱은 Diffserv의 컨디셔너 부분에 위치하며, 트래픽 대역폭을 제어하는 대표 기술로 꼽힌다. 쉐이핑과 폴리싱은 모두 토큰 버킷(Bc) 매커니즘을 사용해 구현된다. 단지 차이가 있다면 쉐이핑은 버퍼링을 사용하고, 폴리싱은 버퍼링을 사용하지 않는다는 것이다. 이번 호에는 트래픽 쉐이핑과 폴리싱의 작동 메커니즘과 실무 적용 방법에 대해 예제를 통해 살펴본다.

김화식 | zion@onsetel.co.kr | 온세통신 시설운영팀 CCIE

s12840@freechal.com | NRC Network+ 팀 마스터


지난호에서 Diffserv 모델에 대한 개요와 분류자, 미터, 마커에 대해 배웠다. 복습하는 의미에서 다시 한번 확인해보면, 인바운드(inbound) 트래픽에 대해 분류자(classifier : 보통은 ACL(Access Control List)을 이용한다)를 이용해 클래스별로 분류하고, 마커(marker)를 이용해 마킹한 후, 미터(meter)를 이용해 트래픽이 미리 협의된 임계값(threshold)을 초과하는지 관찰하는 방법까지 알아봤다.
쉐이핑(shaping)과 폴리싱(policing)은 그 다음 모듈인 컨디셔너 부분에 위치하며, 임계값을 초과한 트래픽에 대해 어떻게 처리할 것인가를 결정해주는 역할을 한다. 얼마 전까지만해도 쉐이핑과 폴리싱은 ISP에서만 제한적으로 사용하고 있었으나, QoS가 점점 중요해지고 대역폭 조절에 관심이 많아지면서 엔터프라이즈에서도 적용하는 사례가 증가하고 있다.
실제로 쉐이핑과 폴리싱을 이용하면 간단한 설정만으로 P2P 트래픽을 전체 대역폭의 20% 이하로 제한한다거나, DoS 공격에 대비해 핑(ping) 패킷을 전체 대역폭의 2%로 제한하는 설정도 가능하다.

쉐이핑과 폴리싱의 기본 알고리즘 '토근 버킷'
토큰 버킷(Token Bucket)은 트래픽 쉐이핑과 트래픽 폴리싱에서 사용하는 기본 알고리즘으로, CAR(Committed Access Rate), 클래스-기반 폴리싱, GTS(Generic Traffic Shaping), 프레임 릴레이 트래픽 쉐이핑에서 사용한다. 우선 토큰 버킷에서 사용되는 변수에 대해 알아보자.

CIR = Committed Information Rate(CIR), in bits per second
Bc = Conformed Burst Size(Bc), in bits
Be = Excess Burst Size(Be), in bits
Tc = Measuring Time Interval(Tc)

(그림 1)을 보면 Bc(양동이에 비유)가 수도꼭지를 이용해 물을 받고 있다. 이때 수도꼭지를 끝까지 돌려서 최고 속도로 물을 받을 수도 있고, 조금만 틀어 비교적 천천히 물을 받을 수도 있다. 이때 물이 공급되는 속도는 CIR이며, 양동이의 크기는 Bc이고, 양동이에 물이 가득 채우는데 걸리는 시간은 Tc이다.



예를 들어 양동이의 크기가 5리터이고 물이 양동이를 가득 채우는데 걸리는 시간을 30초라고 하면, 물이 공급되는 속도는 CIR = 5리터/30초다. 30초마다 5리터의 물을 사용할 수 있으므로, 최대 1분 동안 10리터, 1시간 동안은 600리터의 물을 사용할 수 있다. 1시간 동안 600리터의 물을 사용하기 위해서는 30초마다 양동이(5리터)의 물을 소비해야 하는데, 양동이의 특성상 처음 30초가 지났을 때 물을 사용하지 않으면 그 다음부터는 물이 양동이를 넘쳐나게 되기 때문이다.
또 다른 예를 들어 보자. 양동이(5리터) 밑에 또 하나의 양동이(5리터)를 두고 넘치는 물을 받는다고 하면, 30초가 지나면서 넘쳐서 사용하지 못했던 물을 이제는 5리터까지는 사용할 수 있다. 다시 말하면 기존에는 1분이 지난 후에 사용할 수 있는 물의 양이 5리터였는데, 물이 넘치는 것을 양동이(5리터)를 하나 더 추가하면 총 10리터의 물을 사용할 수 있다. 하지만 1분이 지나면 물이 넘치는 현상은 똑같이 재현된다.
이번에는 추가하는 양동이의 크기를 600리터로 가정하고 생각해보자. 추가된 양동이(600리터)의 양이 크기 때문에 1시간 동안 한번도 사용하지 않았다고 해도 600리터의 물을 한번에 받을 수 있다. 물론 물이 떨어지는 속도는 같기 때문에 1시간 동안 최대로 사용할 수 있는 물의 양은 어느 경우에나 똑같이 600리터다.
위의 예에서 추가하는 양동이를 Be라고 생각하면 된다. Be를 추가함으로써 버려지는 물의 양을 최소화해 효율성을 높이고, 단위시간에 사용할 수 있는 물의 양을 증가시켜 성능을 높이는 효과를 볼 수 있는 것이다.
실제로 프레임 릴레이(Frame Relay) 서비스를 할 때 토큰 버킷 알고리즘을 이용하는데 수도꼭지에서 나오는 물을 토큰(Token)이라고 생각하면 된다. 위의 예에서 수도꼭지에서 물이 끊임없이 쏟아져 나오는 것처럼, 토큰은 일정한 속도(CIR)로 끊임없이 공급이 되며, Tc의 시간이 되면 토큰이 버킷(Bucket)에 Bc만큼 채워진다.
이때 채워진 토큰 수만큼 데이터를 전송해 준다. 만약 이때 ISP측에서 허용한 Be(Excess burst)를 설정해 서비스한다면, 양동이를 하나 추가해서 그 이전 Tc의 시간에 다 쓰지 않고 남은 토큰이 있을 경우, 다시 축적(credit building)돼 최대 한번의 Tc 시간동안 Bc + Be까지도 전송할 수 있다는 것을 의미한다.

토큰의 활용 예
다음과 같이 구체적인 예를 통해 다시 확인해 보자.

CIR = 64000bps
Bc = 8000비트
Be = 8000비트
Tc = 125 msec

처음 버킷은 Bc, Be 2개가 있고, 처음 Bc가 텅빈 상태에서 125ms(Tc)가 지나면 Bc에 토큰이 8000개가 채워진다. 이때를 Tc(0)라고 하고, 다음과 같이 전송할 데이터가 있다고 가정하자(토큰 한 개는 1비트로 생각한다).

① Tc(0) : 큐에 대기하고 있는 전송할 데이터(0)=6000, Bc(0)=8000, Be(0)=0
- Bc에서 6000을 꺼내 데이터를 전송함. Bc에는 토큰이 2000 남는다.

② Tc(1) : 데이터(1)=6000, Bc(1)=8000, Be(1)=2000
- Tc인 125ms 동안 새롭게 추가된 토큰과 전에 쓰고 남은 토큰을 합해서 10000의 토큰이 있다. 역시 Bc에서 6000을 꺼내 데이터를 전송하면, 이제 Bc에는 2000, Be에는 2000이 남는다.

③ Tc(2) : 데이터(2)=0, Bc(2)=8000, Be(2)=4000
- 새롭게 추가된 토큰을 더해 Bc는 8000, Be는 4000이 있음.

④ Tc(3) : 데이터(3)=16000, Bc(3)=8000, Be(3)=8000
- 새롭게 추가된 토큰을 더해 Bc는 8000, Be는 4000 + 8000 = 12000이지만, 4000의 토큰은 흘러 넘친다. 보낼 데이터만큼의 토큰이 있으므로 16000 모두 전송된다. 이때 이렇게 전송된 데이터 중에서 ISP쪽에서 허용된 Bc인 8000 이상의 데이터외의 나머지 Be 8000은 DE 비트를 마킹해 프레임 릴레이 망으로 전송한다. 망 내에서 혼잡(congestion) 발생시 우선적으로 드롭된다. 이제 Bc, Be에 남아 있는 토큰은 없다.

⑤ Tc(4) : 데이터(4)=10000, Bc(4)=8000, Be(4)=0
- 새롭게 추가된 토큰을 더해 Bc가 8000이 됐지만, 이 경우에는 토큰이 부족하다. 이때 쉐이핑일 경우는 버퍼에 2000을 저장했다가 다음 Tc에 전송을 하고, 폴리싱일 경우는 드롭시킨다.

트래픽 쉐이핑의 이해
쉐이핑은 트래픽의 속도와 대역폭을 제한하는 기술로, 버퍼링을 사용해 목표 속도 이상으로 들어오는 트래픽을 잠시 저장했다가 나중에 서비스하는 방법을 이용한다. 쉐이핑은 오늘날 거의 대부분의 중요한 QoS 이슈들을 해결하는데 사용된다. 특히 폴리싱으로는 해결할 수 없는 출력 블록킹(egress blocking)에 의한 지연이나, 패킷 손실 문제를 해결할 수 있다.
쉐이핑은 어느 정도 버스트 트래픽을 수용할 수 있다는 점과 폴리싱에 비해 패킷 손실률을 줄이고, 전체적인 쓰루풋을 향상시킬 수 있다는 것이 장점이다. 하지만 버퍼링으로 인해 추가적인 지연이 더해질 수 있으므로, 커다란 버퍼를 사용하는 경우, 실시간 애플리케이션 트래픽에 영향을 미칠 수 있다.



(그림 2)는 초과된 트래픽(exceed traffic)에 대해 쉐이핑과 폴리싱의 처리 방법이 어떻게 다른지를 보여주는 그림이다. 쉐이핑은 초과된 트래픽을 잠시 저장하기 위해 버퍼나 큐를 사용하기 때문에 주로 출력 쪽에서 구현하는 것이 일반적이다. 쉐이핑을 적용해야 하는 경우는 다음과 같다.

사례 1 : ISP에서 폴리싱을 적용했을 경우
프레임 릴레이 서비스를 ISP로부터 구매할 때 256Kbps의 CIR를 구매했다면, 초당 256Kbps까지는 전송 속도를 보장받는다는 것을 의미한다. 만약 이때 포트 속도 역시 256Kbps라면 트래픽 쉐이핑은 의미가 없다. 어차피 물리적으로 256Kbps 이상은 전송할 수 없기 때문이다. 하지만, 만약 포트 속도가 E1이라면 이때는 트래픽 쉐이핑이 필요하다(실제로 라우터의 시리얼 인터페이스의 디폴트 설정은 E1이다). 쉐이핑을 해주지 않으면 ISP측에서 256Kbps가 넘은 트래픽은 드롭시키거나, DE 비트를 마킹하는 등의 폴리싱을 할 경우, 드롭되는 트래픽이 생기는데 이것이 만약 음성이거나 TCP 트래픽이라면 문제가 된다. 그래서 ISP에서 폴리싱을 하기 전에 미리 허용된 범위에 맞게 조절해 보내기 위해 쉐이핑을 사용한다.

사례 2 : 출력(egress) 블록킹 현상을 예방하기 위한 경우



WAN 구간의 멀티 액세스 환경(ATM 또는 프레임 릴레이)에서 동시에 한곳으로 트래픽이 몰릴 경우 혼잡이 발생한다. (그림 3)은 프레임 릴레이 서비스를 이용해 본사와 24개 지사가 연결돼 있는 환경으로, 본사는 1.5Mbps로 구성돼 있고 각 지사들은 128Kbps로 구성돼 있다. 이때 평상시에는 문제가 없지만 각 지사에서 동시에 본사에 연결하는 경우, 본사쪽 트렁크 회선 용량이 부족해 혼잡이 발생할 수 있다. 이런 경우를 출력 블록킹(egress blocking)이라고 표현한다.

그럼 이제부터는 연습문제를 풀어보면서 트래픽 쉐이핑에 대해 좀 더 알아보자.

☞ 연습문제 1

(그림 4)에서 라우터3쪽은 프레임 릴레이 128Kbps로 연결돼 있고, 라우터1쪽은 프레임 릴레이 64Kbps로 구성돼 있다. 다음의 조건을 만족하도록 라우터3에 설정하라.

1. 모든 트래픽을 64kbps로 쉐이핑을 적용하라.
2. Tc는 디폴트값을 적용하라.
3. Be는 사용하지 말아라.
4. 서브인터페이스를 사용해 설정하라
5. 프레임 릴레이 트래픽 쉐이핑을 이용해 설정하라


▲ =====================================
(그림 4) 연습문제 1
클라이언트 1 1.1 스위치1 1.252 2.252 s0/0 1001 1002 라우터1
2.253 s0/0.1 Fa0/0 3.253 스위치2 라우터4 3001 3002 서버1
3.100 라우터3

1. 64Kbps로 쉐이핑하라
2. Tc는 디폴트 값을 적용하라
3. Be는 사용하지 말아라
4. 서브 인터페이스를 사용해라
5. FRTS를 이용해 설정하라
==========================================

☞ 해결
프레임 릴레이 트래픽 쉐이핑 설정 순서는 다음과 같다.

① 프레임 릴레이 트래픽 쉐이핑을 적용할 물리적인 인터페이스에서 'frame-relay traffic-shape' 명령어를 사용해 트래픽 쉐이핑을 적용할 것임을 선언한다.
② 'map-class' 명령어를 이용해 CIR, Bc, Be 값을 세부적으로 설정한다.
③ ②번에서 만든 map-class 이름을 적용하고자 하는 인터페이스에서 frame-relay class 명령어를 이용해 적용한다. 다음은 트래픽 릴레이 트래픽 쉐이핑 설정 과정이다.

interface Serial 0/0
no ip address
encapsulation frame-relay
no fair-queue
clockrate 128000
frame-relay traffic-shaping → ① 프레임 릴레이 트래픽 쉐이핑을 선언하는 명령어
!
interface Serial 0/0.1 point-to-point
ip address 192.168.2.253 255.255.255.0
frame-relay class shape-all-64 → ③ ②에서 만든 map-class를 적용하는 모습
frame-relay interface-dlce 101
!
map-class frame-relay shape-all-64 → ② shape-all-64라는 이름의 map-class를 만듬
frame-relay cir 64000 → CIR를 64000으로 설정
frame-relay bc 8000 → bc를 8000으로 설정

트래픽 폴리싱의 이해
폴리싱은 트래픽의 속도와 대역폭을 제한하는 기술이다. 폴리싱이 쉐이핑과 가장 크게 다른 점은 버퍼링을 사용하지 않고 목표 속도 이상으로 들어오는 트래픽을 드롭시킨다는 것이다. 폴리싱은 네트워크 용량 부족 문제를 해결해주며, 네트워크 자원을 최대한 활용할 수 있게 하는 트래픽 엔지니어링을 지원한다.
폴리싱은 주로 ISP에서 가입자별로 과금에 맞는 대역폭을 할당하는 용도로 많이 사용됐으나 현재는 일반기업에서도 QoS 용도로 많이 사용하고 있다. 폴리싱은 작동 과정에서 지연이 생기지 않으며, 버퍼가 필요하지 않고 큐잉용 메모리를 많이 점유하지도 않는다. 때문에 쉐이핑을 적용할 때 라우터에 부하를 적게 준다. 라우터 구현시 입/출력 양쪽에서 구현이 가능하지만 주로 입력쪽에서 구현을 한다. 그럼 연습문제를 풀어보면서 트래픽 폴리싱에 대해 보다 확실하게 알아보자.

=========================
▲ (그림 5) 연습문제 2
클라이언트1 1.1 스위치1 1.252 라우터1 s0/0 Fa0/0 라우터3
2.253 3.253 스위치2 3.254 라우터4 서버1
3.100 3001 3002
2.252 s0/0 1001 1002

1. 모든 트래픽을 1.5Mbps로 제한하라
2. HTTP 트래픽은 1Mbps로 제한하라
3. FTP 트래픽은 512Kbps로 제한하라
4. P2P 트래픽은 256Kbps로 제한하라
5. Bc, Be 값은 권고안으로 설정하라
6. CAR를 이용해 설정하라
=====================================

☞ 연습문제 2

(그림 5)에서 다음의 조건을 만족하도록 라우터3에 설정하라.

1. 모든 들어오는 트래픽은 1.5Mbps 이하가 되도록 폴리싱을 적용하라.
2. HTTP 트래픽은 1Mbps까지만 허용되도록 폴리싱을 적용하라.
3. FTP 트래픽은 512Kbps까지만 허용되도록 폴리싱을 적용하라.
4. P2P(TCP 4662)트래픽은 256Kbps만 허용되도록 폴리싱을 적용하라.
5. Bc, Be 값들에 대해서는 권고안으로 설정하라.
6. CAR를 이용해 적용하라.

☞ 해결
분류자(ACL)를 이용해 클래스별로 분류한 다음, 미터로 각 클래스별로 설정한 임계값을 관찰하다가 임계값을 넘는 트래픽에 대해서는 폴리싱을 적용한다. 다음은 CAR(Committed Access Rate) 설정 과정이다.

interface Serial 0/0
no ip address
encapsulation frame-relay
load-interval 30
no fair-queue
clockrate 2015232
rate-linit input 1500000 281250 562500 conform-action continue exceed-action drop → 모든 들어오는 트래픽을 1.5Mbps까지만 허용한다.
rate-linit input access-group 101 1000000 187500 375000 conform-action transmit exceed-action drop → HTTP 트래픽은 1Mbps까지만 허용한다.
rate-linit input access-group 102 512000 96000 192000 conform-action transmit exceed-action drop → FTP 트래픽은 512Kbps까지만 허용한다.
rate-linit input access-group 103 256000 48000 96000 conform-action transmit exceed-action drop → TCP 4662 트래픽은 256Kbps까지만 허용한다.
!
Access-list 101 permit tcp any eq www any → HTTP를 분류하는 액세스 리스트
Access-list 101 permit tcp any any eq www
!
Access-list 102 permit tcp any eq ftp any → FTP를 분류하는 액세스 리스트
Access-list 102 permit tcp any any eq ftp
Access-list 102 permit tcp any eq ftp-data any
Access-list 102 permit tcp any any eq ftp-data
!
Access-list 103 permit tcp any eq 4662 any → P2P를 분류하는 액세스 리스트
Access-list 103 permit tcp any any eq 4662


CAR 명령어에 대한 세부 분석은 다음과 같다.

rate-limit input 64000 12000 24000 conform-action transmit exceed-action drop

들어오는 모든 패킷에 대해 64Kbps까지는 허용하고, 초과하는 트래픽은 드롭시킨다.
각 상수값의 의미는 다음과 같다.

CIR = 64000비트
Bc = 12000바이트
Be = 12000바이트(24000 = Bc + Be 값)
Bc의 값은 CIR /8×1.5(Round Trip time) 단위 바이트

여기서 1.5를 곱하는 이유는 TCP 트래픽이 전체의 80%를 상위할 경우, ACK를 받기 위해 기다리는 시간을 계산해 더해주는 의미이다. (표)는 CAR에서 Bc 값에 대한 설정 변경에 따른 UDP와 TCP의 제한결과 차이를 테스트한 내용이다.

▲ 표 ===============================
CAR 설정시 Bc값에 따른 적용 결과

CIR 값 BC 값 BC+BE 값 UTP 트래픽 TCP 트래픽
15,000,000 7,500 15,000 15,108,000bps 395,280bps
15,000,000 100,000 200,000 15,108,000bps 3,192,000bps
15,000,000 200,000 400,000 15,108,000bps 5,872,000bps
15,000,000 2,812,500 5,625,000 15,108,000bps 14,800,000bps

=======================

(표)를 보면 TCP 트래픽은 Bc 값에 의해 적용 결과가 결정되고, CIR/8×1.5를 계산했을 때 제한하고자 했던 값과 가장 비슷하게 적용됨을 알 수 있다.
이번 시간에는 Differ 모델의 컨디셔너(conditioner) 모듈인 트래픽 쉐이핑과 폴리싱에 대하여 알아봤다. 이들을 이용해 실제로 간단한 설정만으로 원하는 대로 대역폭을 조절할 수 있음을 확인할 수 있었으며, 아주 대단한 것 같은 QoS 설정도 별로 어렵지 않음을 알았을 것이다. 다음 시간에는 큐잉 메커니즘에 대해 소개한다.

출처 - http://www.ionthenet.co.kr
Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 13:42
[QoS 강좌 2] DiffServ 모델의 이해와 적용법

자이온의 실전! QoS 강좌

연|재|순|서
1. 9가지 QoS 측정요소
2. DiffServ 모델
3. 트래픽 세이핑과 폴리싱
4. 큐잉 매커니즘
5. 혼잡 회피(Congestion Avoidance)
6. LE(Link Efficiency) 매커니즘
7. QoS 적용하기
8. QoS 향후 전망

DiffServ 모델의 이해와 적용법

이번호에는 DiffServ 모델에 대한 개요와 분류자, 미터, 마커에 대해 이론적인 접근과 더불어 실무에서 QoS를 설정할 때 분류자와 미터가 어떤식으로 구현되는지 살펴볼 것이다. 앞으로 DiffServ 모델의 모듈별로 QoS 설정을 추가해 엔드 투 엔드 QoS를 완성해 나가는 방향으로 강좌를 진행할 것이다.

김화식 | zion@onsetel.co.kr | 온세통신 시설운영팀 CCIE

s12840@freechal.com | NRC 네트워크+ 팀 마스터

기본적으로 인터넷은 네트워크 트래픽을 하나의 클래스(Class)로 취급해 동일한 정책을 적용하는 베스트 에포트(Best-effort) 방법을 채택하고 있다. 물론, 초기에 인터넷이 구현됐을 때는 네트워크 트래픽을 하나의 클래스로 처리해도 큰 문제가 되지 않았다. 하지만 현재의 인터넷 상황은 새로운 유형의 트래픽(화상전화, 방송, VoIP 등)이 생겨남에 따라 기존의 베스트 에포트 서비스만으로는 QoS(Quality of Service)를 제공하지 못하게 됐다.
이를 보완하기 위한 방법으로 다양한 QoS 프로토콜이나 표준이 만들어졌는데, 대표적인 QoS 관련 프로토콜과 표준에는 IntServ, DiffServ, RSVP, MPLS, IEEE 802.1p/Q 등이 있다. 이들 표준은 그 자체로서 QoS 제공 기능을 갖는 것이 아니며, 다양한 QoS 구현 기술과 이들을 적용하는 방식 혹은 정책들로 이뤄져 있다.
이번호에 소개할 DiffServ(Differentiated Service) 모델은 QoS를 보장하기 위한 방법 중 하나로, 인트서브(IntServ : Integrated Service) 모델이 확장성이 취약한 것을 극복하기 위해 ISP(Internet Service Provider)들에 의해 제안된 모델이다.
기존의 인트서브(IntServ)는 트래픽 흐름(flow)에 대해 미리 필요한 시간에, 필요한 만큼의 대역폭을 할당받는 방식으로, 그 흐름들에 대해 100% 보장된(guaranteed) 서비스와 컨트롤된 로드(controlled load) 서비스를 제공받았다. 이에 비해 DiffServ는 패킷들을 비슷한 성질을 가진 클래스로 구분해서 중요한 클래스에 대해서는 가중치를 둬 서비스를 제공하는 방법이다. DiffServ는 100% 보장된 서비스를 제공하지는 못하지만, 구현이 쉽고 확장성이 뛰어나기 때문에 현재 인터넷에서 가장 많이 채택하는 방식이다. 이제부터 DiffServ 모델에 대해 보다 자세히 알아보자.

중요한 클래스에 가중치 두는 DiffServ
(그림 1)을 보면 DiffServ가 어떤 방법으로 구현되는지 알 수 있다. 먼저 분류자(Classifier)로 들어오는 트래픽을 다양한 기준에 따라 여러 개의 클래스로 구분하는데, 여기서는 도착한 패킷들이 어떤 클래스 큐에 저장이 될지를 결정한다. 좀 더 구체적으로 이야기를 하면, 입력된 트래픽은 다양한 분류기준(extended ACL)에 의해 플로우 단위로 구분되며, 이와 동시에 플로우가 속하게 될 트래픽 클래스가 결정된다.



트래픽 클래스가 결정된다는 것은, 입력된 트래픽이 실제로 저장될 큐와 서비스(스케줄링)되는 방식이 결정된다는 것을 의미한다. 분류자를 통과한 패킷들은 각 트래픽 플로우에 할당된 미터(meter)에 의해 특성을 측정받는다. 측정된 결과는 사전에 약속한 QoS 트래픽 특성과 비교되며, 그 결과에 따라 마커(marker)에 의해 몇 가지 우선순위로 마킹(marking) 된다.
마킹된 패킷들은 컨디셔너(conditioner)를 거치면서 사전에 약속된 트래픽의 대역폭 특성에 맞도록 조절된다. 컨디셔너는 지연(delay)을 이용해 대역폭을 조절하는 세이핑(Shaping)과 드로퍼(deopper)를 이용해 대역폭을 조절하는 폴리싱(policing)으로 구성돼 있다.
트래픽 컨디셔너는 경우에 따라서 흐름제어(flow control)도 처리할 수 있다. 컨디셔너를 통과한 패킷들은 큐잉(queuing)을 거치며 분류자에서 결정된 자신의 클래스에 맞는 큐에 저장된다. 큐에 저장된 패킷들은 스케줄링 과정을 통해 출력 링크로 보내진다.

분류자의 중요한 역할
분류자는 DiffServ 모델의 처음 과정으로, 들어오는 패킷을 일정한 기준에 따라 여러 개의 클래스로 구분하는 기능을 한다. 하지만 여러 종류로 나눠 복잡하게 처리하려는 의도가 아니라, 여러 종류의 패킷을 제한된 몇 개의 클래스로 분류한다는 개념으로 이해해야 한다.
분류자의 목적은 동일하거나 유사한 특성을 갖는 패킷들을 함께 처리함으로써 QoS의 구조를 단순화하자는데 있다. 즉, 다양한 QoS 특성을 갖는 트래픽들을 각각 처리한다면, 수없이 많은 패킷 처리 기준이 있어야 된다. 이것은 현실적으로 불가능하며, 가능하다 하더라도 노드에 커다란 부하를 주는 원인이 된다. 따라서 제한된 클래스로 패킷을 나눠 처리하는 것이다.
실무에서는 적게는 2개에서, 많게는 8개까지의 클래스를 사용하고 있으며, 가장 일반적인 경우가 4개의 클래스를 사용하는 것이다. 큐잉에 관한 연구를 살펴보면, 큐나 클래스의 개수가 1에서 2로 증가할 때 복잡성에 비해 성능 향상 효과가 가장 크다. 2개에서 4개로 증가할 때도 만족할만한 수준이지만, 4개에서 8개 또는 그 이상으로 증가할 때는 복잡성은 배로 증가하지만 성능의 향상효과는 수% 이내로 증가한다. 때문에 클래스의 수를 무작정 늘리는 것이 좋은 것만은 아니다. 따라서 이번 연재에서도 3개 내지 4개의 클래스를 주로 사용할 것이다.
앞에서도 언급했지만 분류자는 DiffServ 모델에서 가장 중요한 부분이다. 그것은 분류자에서 패킷을 구분해주기 때문이다. 뒤에서 여러 QoS 구현 방법들에 대해 설명을 하겠지만, 그런 모든 방법들도 분류자에서 패킷을 클래스로 나눠줘야지 비로소 적용할 수 있다. 실제 업무에서는 분류자를 구현하기 위해서 ACL(Access-Control Lists)을 많이 사용한다.
예를 들어 ACL 101에 해당하는 패킷은 첫번째 큐(Queue)로 보내고, ACL 102에 해당하는 패킷은 두번째 큐로 보내고자 할 때, 큐잉 작업이 이뤄지기 위해서는 분류자 작업이 선행돼야 한다. 트래픽 세이핑이나 폴리싱도 마찬가지이다.
확장된 액세스 리스트를 사용하면 필드값을 하나 또는 그 이상을 조합해서 세부적인 분류도 가능하다. 클래스를 나누는데 쓰이는 또 다른 방법은 PBR(Policy-Based Routing)을 이용하는 것이다. 이 방법은 ACL을 이용하는 것보다 좀 더 유연한 명령으로, 'match'와 'set'을 이용해 분류자 적용 후, 마킹 모듈까지 적용할 수 있는 명령어다. 이는 (그림 2)와 같은 방식으로 구현될 수 있다.




미터와 마커의 이해
미터(Meter)는 장비로 입력돼 분류된 트래픽 플로우를 측정한다. 일반적으로 트래픽 플로우의 입력 속도를 이용해 대역폭을 측정하거나 버스트 정도를 측정하는데, 미터는 미리 약속된 트래픽 프로파일과 입력된 트래픽의 프로파일을 비교함으로써 초과여부를 결정한다. 그 결과에 따라 마커(Marker)는 적절한 마킹(Marking) 작업을 수행한다.
일반적으로 ▲미리 약속된 트래픽 프로파일을 만족하는 경우 ▲일정한 범위 내에서 초과하는 경우 ▲일정한 범위를 넘어서 초과하는 경우의 세가지로 구분한다. DiffServ 모델에서는 그린(Green), 옐로우(Yellow), 레드(Red)로 표시하지만, 시스코는 Conform, exceed, violate이라는 용어를 사용해 나타낸다.



(그림 3)은 DiffServ 모델에서 가장 많이 사용하고 있는 sr-TCM(single-rate Three-Color Marker)에 대한 동작 방식을 설명한 것으로, 듀얼 토큰 바스킷 구조를 사용하고 있다.
토큰이 떨어지는 속도로는 CIR(Committed Information Rate)를 사용하며, (그림 3)에서 입력된 패킷의 크기 P가 토큰 카운터 Tc보다 작으면 그린 패킷으로 마크하고, Tc보다 크지만 Te보다 적은 경우 옐로우 패킷으로 마크한다. Te보다도 큰 경우에는 레드 패킷으로 마크된다. 토큰 바스킷에 대한 추가 설명은 다음 시간에 소개할 트래픽 세이핑과 폴리싱 부분에서 자세하게 설명할 것이다.

마킹에 필요한 IP 우선권과 TOS 필드
그럼 이제부터 실제로 마킹하는데 사용되는 요소들에 대해 알아보자. IP 우선권(precedence)은 DiffServ 모델이 사용되기 이전에 QoS를 보장하기 위해 사용한 필드로, IP 헤더에 ToS(Type of Service) 필드의 상위 3비트를 사용해 표시한다. 숫자가 클수록 우선순위가 높음을 표시한다.
0의 값은 우선순위가 제일 낮은 BE(Best-Effort)를 뜻하며, 6과 7은 인터넷용과 네트워크용으로 예약돼 있어 실제로 우선권의 값 중에서 가장 우선순위가 높은 것은 5(Critical)이다.



(그림 4)는 IP 데이터그램(datagram)을 나타낸 것으로, ToS의 8비트 중에 상위 3비트가 IP 우선권(precedence)으로 표기되는 모습을 잘 나타낸다. 우선권 뒤의 4비트는 ToS 필드이며, 각 해당 비트마다 신뢰성, 처리량, 지연, 코스트 등을 나타낸다. 해당 필드에 마킹(1로 표기)되면 높은 신뢰성, 높은 처리량, 낮은 지연, 적은 코스트를 뜻하며, 해당 패킷의 중요도를 나타내는데 사용된다.

DiffServ 모델의 핵심 'DSCP 필드'
이름에서도 알 수 있듯이 DSCP(Differentiated Service Code Point) 필드는 DiffServ 모델의 핵심이라고 할 수 있다. DiffServ 모델이 제안되기 이전에 사용됐던 우선권을 포함하면서 확장한 개념이다. 이는 기존 IP 체계에 큰 변화없이 헤더값에서 우선권과 ToS 필드가 사용하던 비트를 대체하는 방법으로, 기존의 우선권이 트래픽 플로우에 대해 세부적인 컨트롤을 할 수 없었던 한계를 극복했다.



DiffServ 모델에서는 IP 헤더의 ToS 필드에서 상위 6비트를 이용해 DSCP 필드 값으로 사용, 패킷들을 최대 64개의 클래스로 구분했다. 그러나 64개의 DSCP 필드값 중에서 제일 마지막 6번째 비트값이 1인 필드는 실험용이거나 사설용으로 예약돼 있다. 때문에 실제로는 32개의 표준 PHB(Per-Hop Behavior)가 클래스로 사용될 수 있다
DSCP의 종류는 다음과 같이 4가지로 나눌 수 있다.

·디폴트 PHB(Best-effort)
·CS(Class Selector) PHB (IP Precedence)
·AF(Assured Forwarding) PHB
·EF(Expedited Forwarding) PHB

이중에서 디폴트 PHB(베스트 에포트)는 가장 낮은 우선순위를 뜻하며, CS(Class Selector) PHB는 클래스를 결정하는 상위 3비트만 표시해 기존의 우선권 값과 서로 호환해서 사용할 수 있다.
AF(Assured Forwarding) PHB는 4개의 클래스가 존재하며, 각 클래스에 대해 3개의 서로 다른 드롭 우선권을 갖게 된다. 드롭 우선권(drop precedence)이란 DSCP 코드값 중 클래스를 결정하는 상위 3비트를 제외한 4, 5번째 비트가 드롭될 가능성의 고/저를 표시하는 것으로, 프레임 릴레이의 DE 비트와 성격이 비슷하지만 더 세밀하게 설정할 수 있다.



EF(Expedited Forwarding) PHB는 DSCP 코드값 중에서 우선순위가 가장 높은 클래스라는 의미이다. EF는 2진수 값으로‘101110'으로 표현하며, DSCP 값을 인식못하는 장비(DiffServ 모델에 적용되지 않는 장비)에서도 IP 우선권(precedence) 값으로 인식(5 → Critical)돼 최고의 서비스를 보장받는다.
그 외에 마킹용으로 사용하는 다른 필드에는 ▲내부적으로만 사용하는 QoS 그룹 ▲프레임 릴레이 상에서 마킹해 혼잡이 생겼을 때 우선적으로 드롭되게 설정하는 DE(Discard Eligible) 비트 ▲ATM에서 사용하는 CLP(cell Loss Priority) 비트 ▲IEEE 802.1Q나 ISL 에서 구현하는 CoS 필드 ▲MPLS에서 QoS 마킹용으로 사용하는 실험적인(experimental) 비트 등이 있다.

실전! 분류자와 마킹 따라하기
지금까지 분류자와 마킹에 대해 자세히 알아봤다. 이제부터는 사례를 통해 이들이 실제 상황에서 어떻게 사용되는지 설명하도록 한다.



(그림 7)은 네트워크 상에 VoIP 트래픽과 일반 데이터 트래픽이 혼합돼 흐르고 있는 환경이다. 처음하는 실전 훈련이니 가장 쉽게 VoIP 트래픽과 일반 데이터 트래픽을 클래스로 나누고, DSCP 값을 이용해 마킹하는 실습을 해보자. 연습문제 1은 (그림 7)과 같은 환경에서 수행해야 하는 조건들이다.

☞ 연습문제 1
1. VoIP 트래픽은 DSCP 값을 EF(Experdited Forwarding) PHB로 마킹하라
2. 일반 데이터 트래픽은 DSCP 값을 디폴트(베스트-에포트) PHB로 마킹하라
3. CB(Class-Based) 마킹을 사용해 작성하라
4. 라우터 3에 설정하고, 설정한 내용을 확인하라

☞ 해결
연습문제 1에 대한 CB(Class-Based) 마킹 설정은 다음과 같다.

R3# conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#ip cef
R3(config)#class-map voip-rtp → 클래스 맵의 이름을 voip-rtp라고 정의
R3(config-cmap)#match ip rtp 16384 16383 → VoIP 트래픽을 구분하는 과정
R3(config-cmap)#policy-map voip-and-be → 폴리시 맵의 이름을 voip-and-be라고 정의
R3(config-pmap)#class voip-rtp → voip-rtp라는 클래스 맵을 적용
R3(config-pmap-c)#set ip DSCP EF → VoIP 트래픽에 대해 DSCP 값을 EF로 설정
R3(config-pmap-c)#class class-default → 나머지 트래픽들을 표시함
R3(config-pmap-c)#set ip dscp default → 나머지 트래픽들에 대해 DSCP 값을 디폴트로 설정
R3(config-pmap-c)#interface e 0/0
R3(config-if)#service-policy input voip-and-be → 해당 인터페이스에 폴리시 맵을 적용
R3(config-if)#end
R3#

CB(Class-Based) 마킹 설정 확인 내용은 다음과 같다.

R3#show running-config
Building configuretion…
!Portions removed to save space…
ip cef
!
class-map match-all voip-rtp
match ip rtp 16384 16383
!
policy-map voip-and-be
class voip-rtp
set ip dscp 46
class class-default
set ip dscp 0
!
interface Fastethernet0/0
ip address 192.168.3.253 255.255.255.0
service-policy input voip-and-be

생각보다 설정은 그리 어렵지 않다. 결국 QoS라는 것이 생각만큼 그렇게 거창한 것이 아니라는 것을 느꼈을 것이다. 이번에는 동일한 환경이지만 (그림 8)처럼 중급 정도의 설정을 할 것이다. 어렵게 생각하지 말고 차근히 따라하면 분류자와 마킹을 확실하게 익힐 수 있을 것이다.



☞ 연습문제 2
1. VoIP 트래픽은 우선권(precedence) 값을 5로 마킹하라
2. 서버 1에서 클라이언트 1로 가는 넷미팅 비디오와 음성 패킷은 우선권(precedence) 값을 4로 마킹하라
3. 모든 HTTP 패킷들은 우선권(precedence) 값을 2로 마킹하라
2. 일반 데이터 트래픽은 우선권(precedence) 값을 0으로 마킹하라
3. PBR(Policy-Based Routing)를 사용해 작성하라

☞ 해결
연습문제 2에 대한 답으로, PBR(Policy-Based Routing) 설정은 다음과 같다.

ip route-chache policy
!
ip access-list extended VoIP-ACL → Named ACL의 이름을 VoIP-ACL이라 정의
permit udp any range 16384 32768 any range 16384 32768 → VoIP 트래픽을 구분하는 과정
!
ip access-list extended NetMeet-ACL → Named ACL의 이름을 NetMeet-ACL이라 정의
permit udp host 192.168.1.100 range 16384 32768 192.168.3.0 0.0.0.255 range 16384 32768
!
ip access-list extended http-acl → Named ACL의 이름을 http-acl이라 정의
permit tcp any eq www any → 목적지 포트가 TCP 80인 패킷을 구분
permit tcp any any eq www → 소스 포트가 TCP 80인 패킷을 구분
!
interface fastethernet 0/0 → 해당 인터페이스에 폴리시 맵을 적용
ip policy route-map voip-routemap
!
rotue-map voip-routemap permit 10 → 라우트맵을 이용해 10번부터 순차적으로 적용됨
match ip-address NetMeet-ACL → 먼저 넷미팅 패킷을 구분(작은 범위 먼저 적용 원칙)
set ip precedence 4 → 넷미팅 패킷에 대해 precedence 값을 4로 마킹
!
rotue-map voip-routemap permit 20 → 라웃멥 10번을 지난 패킷이 20번에 적용된다
match ip-address VoIP-ACL → VoIP 패킷을 구분
set ip precedence 5 → VoIP 패킷에 대해 precedence 값을 5로 마킹
!
rotue-map voip-routemap permit 30
match ip-address http-acl → HTTP 패킷을 구분
set ip precedence 2 → HTTP 패킷에 대해 precedence 값을 2로 마킹
!
rotue-map voip-routemap permit 40
set ip precedence 0 → 나머지 패킷들에 대해 precedence 값을 0으로 마킹
!
end

PBR(Policy-Based Routing) 설정 확인은 다음과 같다.

R3#show ip policy
Interface Route map
Fastethernet0/0 voip-routemap

R3#show route-map
route-map voip-routemap, permit, sequence 10
Match clauses:
ip address (access-lists): NetMeet-ACL
Set clauses:
ip precedence flash-override
Policy routing matches: 3 packets, 222 bytes
route-map voip-routemap, permit, sequence 20
Match clauses:
ip address (access-lists): VoIP-ACL
Set clauses:
ip precedence Critical
Policy routing matches: 14501 packets, 1080266 bytes
route-map voip-routemap, permit, sequence 30
Match clauses:
ip address (access-lists): http-acl
Set clauses:
ip precedence immediate
Policy routing matches: 834 packets, 1007171 bytes
route-map voip-routemap, permit, sequence 40
Match clauses:
Set clauses:
ip precedence routine
Policy routing matches: 8132 packets, 11263313 bytes

이번 시간에는 DiffServ 모델에 대한 이론과 더불어 실제 환경에서 그것이 어떻게 적용되는지 다각도로 살펴봤다. 다음 시간에서는 네트워크 대역폭 조절에 막대한 영향을 끼치고 있으며, 현재 가장 이슈가 되고 있는 트래픽 세이핑과 폴리싱에 대해 알아보자.

출처 - http://www.ionthenet.co.kr

Posted by theYoungman
engineering/Network Eng.2006. 8. 10. 13:37

[자이온의 실전! QoS 강좌 1] 9가지 QoS 측정 요소의 이해

자이온의 실전! QoS 강좌 1

연재순서
1. 9가지 QoS 측정 요소 (2004년 2월호)
2. DiffServ 모델(2004년 3월호)
3. 트래픽 세이핑과 폴리싱(2004년 4월호)
4. 큐잉 매커니즘(2004년 5월호)
5. 혼잡 회피(Congestion Avoidance)(2004년 6월호)
6. LE(Link Efficiency) 매커니즘(2004년 7월호)
7. QoS 적용하기(2004년 8월호)
8. QoS 향후 전망(2004년 9월호)


9가지 QoS 측정 요소의 이해 ①

과거 네트워크 속도 저하와 같은 장애 문제는 대부분 대역폭과 장비의 증설로 해결했다. 하지만 인터넷 환경이 급변하면서 DOS 공격, 바이러스 등의 위협이 심해지고 VoIP, 화상전화 등 새로운 양방향 애플리케이션이 등장함에 따라 대역폭과 장비 증설 외에 QoS의 적용이 반드시 요구되고 있다. 총 8회에 걸쳐 진행될 이번 연재에서는 필자가 실무에서 직접 경험했던 QoS 사례를 중심으로 중요한 기술들을 소개한다. 그 첫회로 QoS의 9가지 측정 요소에 대해 자세히 알아보자.

김화식 | zion@onsetel.co.kr | 온세통신 시설운영팀 CCIE
s12840@freechal.com | NRC QVO 팀 마스터


네트워크 분야에 종사하고 있는 사람이라면 누구나 조금씩은 QoS(Quality of Service)라는 단어에 대해 두려움을 갖고 있을 것이다. '어떻게 해야 서비스의 질(Quality)을 향상시킬 수 있을까'라는 의문에서 시작된 QoS는 그 의미 자체가 막연하기 때문이다.
일반적으로 네트워크 관리자들이 QoS를 처음 접하게 되는 것은 CCNP 과정 중 하나인 BCRAN의 WAN 파트내 큐잉(Queuing) 부분에서일 것이다. 필자 역시 그랬다.
필자도 QoS는 큐잉만 잘 적용하면 끝이라고 생각했던 때가 있었다. 그러나 현업에서 컨설팅, 유지보수, 네트워크 운영 등의 업무에 직접 부딪히게 되면서 실제로 큐잉은 QoS의 전부가 아니고 한 부분에 불과하다는 것을 알게 됐다.

QoS의 중요성 증가
인터넷은 1969년 미국 국방성의 군사용으로 제작한 알파넷(ARPANET)으로 시작됐지만, QoS라는 개념이 도입된 시기는 그 후 20여 년이 지난 1990년대 초이다. QoS는 인터넷 표준화 기구인 IETF에서 인터서브(IntServ : Integrated Services) 모델을 제안하면서 시작됐다.
인터서브는 RSVP(Resource reSerVation Protocol)라는 자원 예약 프로토콜을 이용해 미리 필요한 시간에 필요한 만큼의 대역폭을 할당받는 방식으로, 보장된(guaranteed) 서비스와 컨트롤된 로드(controlled load) 서비스를 제공할 수 있다. 그러나 인터서브는 확장시 RSVP 시그널을 관리하기가 어렵기 때문에 현재는 일부 사설망에서 사용되거나, 디프서브(Differentiated Services) 모델과 혼용, 변형된 방법으로 사용되고 있다.
디프서브는 최근 들어 QoS의 근간을 이루고 있는 모델이다. CAR(Committed Access Rate), PBR(Policy-Based Routing), 트래픽 세이핑(traffic shaping), RED(Random Early Detection), NBAR(Network Based Application Recognition), 큐잉 등도 모두 디프서브를 구성하거나 일부분을 이용해 만든 객체이다. 디프서브와 구현 기술에 대해서는 다음 시간에 보다 자세히 알아보도록 하고, 이번 시간에는 QoS 측정 요소에 대해서만 집중적으로 살펴보도록 하자.
QoS 측정 요소들은 여러 가지 QoS 패러미터로 표시할 수 있는데, 트래픽의 QoS 특성을 나타내는데 사용되는 트래픽 패러미터를 QoS 패러미터라고 한다. 대표적인 QoS 패러미터로는 대역폭, 지연(delay), 지터(jitter), 패킷손실(packet loss)을 들 수 있다.

QoS 측정 요소 1 : 가용 대역폭
가용 대역폭(available bandwidth)은 bps(bit per second) 단위로 표시되며, 보통은 물리적인 링크 속도(link speed)와 같지만, 전송되는 구간의 대역폭이 각각 다른 경우에는 가장 낮은 구간의 대역폭에 의해 결정된다. (그림 1)을 보면 보다 쉽게 가용 대역폭을 이해할 수 있을 것이다. 서버와 클라이언트로 구성된 (그림 1)은 서로 다른 대역폭을 가진 4개의 네트워크로 구성돼 있다.



(그림 1)에서 클라이언트에서 서버까지 연결된 A, B, C, D 구간의 대역폭은 각각 10Mbps, 256Kbps, 512Kbps, 100Mbps이지만, 최대 가용 대역폭은 각 구간 중 가장 낮은 구간인 B(256Kbps)에 의해 결정된다. 왜냐하면 클라이언트에서 서버까지 10Mbps 속도로 데이터를 전송할 경우, A구간은 10Mbps 속도로 전송이 되지만, B구간을 지날 때 정체가 발생해 256Kbps의 속도밖에 전송이 되지 않기 때문이다. C구간과 D구간은 속도가 256Kbps 이상이기 때문에 256Kbps의 속도를 그대로 전송할 수 있다. 결론적으로 (그림 1)의 최대 가용 대역폭은 256Kbps이다.
물론 최대 가용 대역폭을 증가시키는 방법도 있다. 정확하게 표현하면 사실은 대역폭을 증가시키는 것은 아니다. 다만 자원을 효율적으로 분류하거나 할당해 대역폭이 증가된 것과 같은 효과를 내는 것이다. 여하튼 그런 방법으로는 ▲헤더 압축(header compress), 페이로드 압축(payload compress) 등을 사용해 더 많은 패킷을 전송하는 방법과 ▲큐잉을 사용해 중요한 패킷을 먼저 전송해 대역폭이 증가된 것 같은 효과를 낼 수 있는 방법이 있다. 두 가지 방법 모두 CPU의 부하와 지연을 증가시키는 등 또 다른 문제를 유발하기 때문에 신중하게 사용해야 한다.

QoS의 목적 하나 '지연을 줄여라'
지연(delay)은 보통 시간(ms) 단위로 표시하며, 패킷이 발신지에서 보내진 시간으로부터 수신지에 도착할 때까지 걸리는 시간을 뜻한다. 기본적으로 지연은 송수신 간의 거리와 중간 경로에 있는 라우터의 수에 비례해 증가된다. 네트워크 상에서 전송되는 모든 패킷들은 필연적으로 지연이 생기기 때문에 QoS의 목적은 지연을 없애는 것이 아니고 줄이는 것에 있다.
QoS에서 사용하는 지연은 종단간 지연(end-to-end delay)이며, 각 구간의 지연 시간을 합해서 계산한다. 지연은 크게 장비 구간에서의 지연과 전송구간에서의 지연으로 나눌 수 있다. 이를 다시 세분화하면 연속 지연(serialization delay), 전달 지연(propagation delay), 큐잉 지연(queuing delay), 포워딩 지연(forwarding delay), 세이핑 지연(shaping delay), 그리고 네트워크 지연으로 나눌 수 있다.

QoS 측정 요소 2 : 연속 지연
연속 지연(serialization delay)은 패킷을 링크상에서 시리얼화 하는데 걸리는 시간이다. 쉽게 말해 패킷을 라우터에서 전송로로 보내는데 걸리는 시간으로, 기차가 기차역을 빠져나가는데 걸리는 시간 정도로 생각하면 된다. 6량의 기차보다 12량의 기차가 역을 빠져나가는데 2배의 시간이 더 소요되듯이 연속 지연은 패킷의 길이에 비례하며, 링크의 대역폭에 반비례한다.
(그림 2)에서 사용자의 PC에서 서버 1로 125바이트의 패킷을 보낸다고 가정할 때, 실제 발생하는 연속 지연 값을 계산해 보자(단, 2계층 데이터 링크 헤더는 계산에서 제외한다). 처음(1구간)으로 125바이트로 구성된 패킷을 고속 이더넷(100Mbps) 링크에서 시리얼화 하는 데는 1000비트 / 1,000,000,000bps = 0.1ms가 걸린다(1000비트는 125바이트를 비트화한 것임).




스위치에서 R1(2구간)으로 전송할 때에도 0.1ms가 걸린다. 다음 3구간(R1에서 R2 사이)의 대역폭은 56Kbps이므로, 시리얼화 하는데 걸리는 시간은 1000비트 / 56,000bps = 17.85ms이다.
같은 125바이트라도 대역폭에 따라서 연속 지연이 0.1ms와 17.85ms로 크게 차이가 나는 것을 알 수 있다. 실제로 연속 지연은 높은 대역폭 구간에서는 그다지 문제가 없지만 낮은 대역폭 구간에서는 서비스의 질에 큰 영향을 준다.
(그림 2)의 다른 구간에 대해서도 계산해 보면 같은 125바이트의 패킷도 대역폭에 따라 56Kbps는 17.85ms, 128Kbps는 7.8ms, 512Kbps는 2ms, 1544Kbps는 0.65ms, 100Mbps는 0.01ms 등으로 각기 다른 연속 지연이 발생하는 것을 알 수 있다.

QoS 측정 요소 3 : 전달 지연
전달 지연(Propagation Delay)은 특정 매체로 이뤄진 링크를 통해 한 비트를 전달하는데 걸리는 시간이다. (그림 3)에서 보면 패킷이 R1을 출발해 R2까지 가는데 걸리는 시간으로, 기차가 기차역을 빠져 나가서 다음 역까지 도달하는데 걸리는 시간에 비유할 수 있다.



전달 지연의 특징은 동일한 물리적인 링크상에서 대역폭과 패킷의 길이와는 상관없이 동일한 지연 시간을 갖는다는 점이다. 일반적으로 네트워크 상에서의 전달 지연은 매우 적게 발생하기 때문에 큰 문제가 되지 않는다. 다만 물리적인 링크의 길이에 비례해 증가하기 때문에 긴 구간을 설계할 때는 고려하는 편이 안전하다.
진공 상태에서 빛의 전송 속도는 3.0×108m/s이지만 일반적으로 구리(copper)나 광(optical) 케이블 상에서의 전송 속도는 진공 상태의 약 70% 속도인 2.1×108m/s 이다.
(그림 3)에서 3구간(R1에서 R2사이)의 거리가 1000km이므로 전달 지연을 계산해 보면 1,000,000/(2.1×108) = 4.8ms이다. 각 구간별로 전달 지연과 연속 지연을 비교해 보면 패킷의 크기에 의해 연속 지연은 변하지만, 전달 지연은 동일한 것을 알 수 있다.

QoS 측정 요소 4 : 큐잉 지연
큐잉 지연(queuing delay)은 패킷이 전송되기 전에 라우터의 큐(하드웨어와 소프트웨어 큐 모두 포함)에 패킷이 대기하는 시간이다. 큐는 위치에 따라 들어오는 큐(input Queue)와 나가는 큐(output Queue)로 구분되지만, 들어오는 큐에서 걸리는 지연은 극히 적기 때문에 나가는 큐만 생각한다. 대부분의 사람들이 QoS를 생각할 때 제일 먼저 큐잉 지연을 떠올리는 것은 여러 가지 지연 중에 큐잉 지연이 차지하는 부분이 가장 크기 때문이다.
(그림 4)에서 사용자 PC에서 서버1로 1500바이트 패킷을 4개 보낸다고 가정할 때, 첫번째 패킷이 라우터의 큐를 떠나는데 걸리는 시간은 1500×8 / 56,000=214ms이다. 이는 1500바이트를 56Kbps의 대역폭 구간에 시리얼화 하는데 걸리는 시간이다. 즉, 두번째 패킷은 라우터의 큐에서 214ms를 대기하고 있다가, 전송되기 시작한다는 의미다. 세번째 패킷은 428ms를, 마지막 네번째 패킷은 642ms를 큐에서 대기하고 있는 것이다.



만약 100개의 1500바이트 패킷을 보낸다고 가정하면, 마지막 패킷의 큐잉 지연은 99×214ms를 하면 약 21초가 된다. 이 패킷이 TCP 패킷이라면 십중팔구는 재전송을 할 것이다. 실제로 대부분의 TCP 재전송은 혼잡(Congestion)이나 큐잉 지연 때문에 발생한다. 적정한 길이의 큐는 패킷 손실을 예방하지만, 너무 긴 큐는 장시간 지연의 원인이 된다.
큐잉 지연의 조절은 QoS 중에서 가장 중요한 핵심 중 하나로 이에 대해서는 5월 경에 다시 한번 자세하게 다룰 것이다

QoS 측정 요소 5 : 포워딩 지연
포워딩 지연은 패킷이 라우터나 스위치로 들어오는 인터페이스로 들어와서, 라우팅과 스위칭 프로세서에 의해 경로가 결정된 후, 나가는 인터페이스의 나가는 큐에 놓이기까지 걸리는 시간이다. 따라서 라우팅과 스위칭 프로세스에 따라 차이가 있으며, 일반적으로는 라우터보다는 스위치의 포워딩 지연이 적게 발생한다.
스위치는 축적전송(store-and-forward)보다는 컷쓰루(cut-through) 방식이 보다 적은 포워딩 지연을 발생시키며, 라우터의 경우에는 포워딩 지연을 줄이기 위해 CEF(Cisco Express Forwarding) 방법을 사용하기도 한다.

QoS 측정 요소 6 : 세이핑 지연
세이핑 지연은 트래픽 세이핑 프로세스에 의해 지연되는 시간을 나타내며, 트래픽 세이핑을 사용하면 지연은 길어지지만, 계약된 대역폭을 초과하는 패킷들이 버려지는(discard) 것을 예방한다. 이는 두 가지 형태로 나타날 수 있는데 ▲때로는 패킷들이 드롭(Drop)되지만 빨리 전송되는 경우 ▲패킷들이 드롭되지는 않지만 느리게 전송되는 경우가 그것이다. 이 중에서 후자의 경우가 더 좋은 상황을 연출한다.

QoS 측정 요소 7 : 네트워크 지연
네트워크 지연은 보통 네트워크 구성도를 그릴 때 구름(Cloud) 구간으로 표현하는 프레임 릴레이나 ATM 네트워크 구간 등의 지연을 나타낸다. 구름 구간은 ISP(Internet Service Provider)에서 제공하는 구간으로, 일반적으로 고객들이 어떻게 구성돼 있는지 잘 알지 못하기 때문에 정확한 네트워크 지연 값을 구하기는 힘들다.
(그림 5)에서 구름 구간의 네트워크 지연값을 구하기 위해서는 다음과 같은 3가지의 지연을 계산해서 더하는 방법을 사용한다.



·R2에서 구름내 장비인 스위치로 들어가는(Ingress) 부분의 연속 지연
·구름내 구간의 거리에 대한 전달 지연
·구름내 장비인 스위치에서 R3로 나가는(egress) 부분의 연속 지연

예를 들어 R2에서 R3로 1500바이트의 패킷을 보낸다고 가정하고, 위의 3부분을 계산해서 네트워크 지연을 구하면 다음과 같다.

연속 지연(ingrass R2) = 1500바이트×8 / 128,000bps = 94ms
전달 지연 = 1000km / 2.1×108=4.8ms
연속 지연(egress R3) = 1500바이트×8 / 1,544,000bps = 7.8ms

이들 세부분의 값을 합치면 네트워크 지연은 106.7ms이 된다. 네트워크 지연은 ISP에게 의존할 수밖에 없지만 최근에는 ISP 업체와 계약을 체결할 때 SLA(Service-Level Agreement)를 설정해 지연 한계에 대한 보장을 받는 방법을 사용하기도 한다.

QoS 측정 요소 8 : 지터
지터(Jitter)는 어떤 신호가 네트워크를 통해 전달되면서 원래의 신호로부터 왜곡되는 정도를 나타내는데 사용되는 값으로, 지연의 편차(variation)라고 할 수 있다. 네트워크 전송에서 패킷에 대한 어느 정도의 지연은 필연적으로 발생한다. 동일한 시간의 지연은 네트워크 서비스에서 큰 문제가 되지 않는다. VoIP에서도 일정한 범위내의 동일한 지연은 큰 문제를 일으키지 않는다. 하지만 지연 값이 각각 다르다면 VoIP 같은 양방향 애플리케이션 서비스를 제공하는데 큰 문제가 된다.
(그림 6)에서 201에서 301로 보낸 음성 데이터가 처음에는 20ms의 동일한(20, 20, 20) 지연을 갖고 전송이 됐으나, 구름 구간을 지나면서 지연의 변화(20, 30, 20)가 생겨, 결국 음성신호가 왜곡되고, 음질이 떨어지게 된다.



QoS 측정 요소 9 : 패킷 손실
패킷 손실(packet loss)은 패킷이 전달되는 과정에서 발생하는 패킷의 손실 정도를 나타낸다. 물론 하드웨어적인 불량으로도 패킷 손실은 발생할 수 있지만 일단 하드웨어적인 불량은 없다고 가정을 하자. 패킷 손실은 보통 혼잡(Congestion)에 의한 버퍼 오버플로우시 발생하거나, 흐름 제어 알고리즘(RED : Random Early Detection)에 의해 임의적으로 패킷을 버리는 현상에 의해 발생한다. 혼잡은 적정 수준 이상으로 큐에 패킷이 쌓여 있는 상태를 말하며, 혼잡의 원인에는 다음과 같은 것들을 들 수 있다.

·서비스할 수 있는 것보다 트래픽이 더 많이 도착한 경우
- TCP처럼 흐름 제어를 하는 트래픽 소스가 전송 속도를 증가 시키는 경우
- 라우팅 알고리즘 때문에 많은 트래픽이 한쪽으로 몰리는 경우
- 라우팅 패스에 오류가 발생해서 리라우팅 되는 경우
- 악의적으로 트래픽을 증가시키는 경우(바이러스, 해킹)

·서비스할 수 있는 수준내에서 도착하지만, 제대로 서비스를 못 해주는 경우
- 서비스 정책이 잘못됐거나 효율적이지 못할 때 발생

이번호에는 QoS를 측정하는데 필수 요소인 대역폭, 지연, 지터, 그리고 패킷 손실에 대해 알아봤다. 다음 시간에는 본격적인 QoS 이야기로 들어가서 그 첫 번째 관문인 디프서브 모델에 대해 자세히 알아보도록 한다.


출처 - http://www.ionthenet.co.kr

Posted by theYoungman
engineering/Network Eng.2006. 4. 7. 11:44
80년대에 한 대형 피자 체인점에서 “30분 내로 배달해드립니다”라는 광고를 한 적이 있다. 아마도 예상 시안 안에 피자를 받아본 경험들도 분명 있을 것이다. 피자는 25분, 27분, 혹은 가끔씩 31분에 배달되기도 하겠지만 그보다 더 오래 걸리지는 않을 것이라고 우리는 확신할 수 있다. 네트워크 QoS(Quality of Service)에도 몇 가지 예외만 제외하고는 같은 이론이 적용된다. 다른 점은 이 제품은 데이터이며, 속도가 가장 중요하고(분이 아니라 밀리 초로 계산되긴 하지만), 아무리 배달 기술이 좋다고 해도 제품의 품질을 보증할 수는 없다는 것이다.


불행히도 이더넷, IP 및 인터넷은 보증된 전달을 제공하거나 대역폭에 우선순위를 지정하는 것을 염두에 두고 나온 기술들이 아니다. 핑 응답 시간은 다양하며, 작업처리량도 일관성이 없고 네트워크는 가끔씩 너무 막혀서 세션이 가게 할 수조차 없을 때도 있다. 네트워크 자원들, 즉 사용 가능한 대역폭, 왠 이용, 최대 동시 세션, 라우터의 처리 능력 등은 언제나 제한적이다. 기업들은 대역폭 부족 때문이 아니라 과도한 웹 사용의 결과로 지사로의 VPN 연결이 참을 수 없이 느려지는 것을 목격할 수 있다. 학교들은 7월에 빨랐던 네트워크가 신입생들이 다이얼업이 없는 생활을 발견하게 되는 9월이 되면 딱할 정도로 느려지는 것을 경험하곤 한다.


QoS, 존재의 이유

>> 대기시간(latency)은 패킷이 한 곳에서 다른 곳으로 갈 때 걸리는 시간으로 대역폭 포화, 네트워크 장비의 자원(CPU나 램) 부족, 접속 거리나 종류 등에 따라 야기될 수 있다. QoS를 이행하면 이런 대기시간을 크게 줄일 수 있다.

>> 지터(jitter)는 대기시간에서의 변동을 뜻한다. 두 개의 노드가 같은 스위치에 있지 않으면 대기시간은 패킷마다 크게 달라질 수 있다. 네트워크 대역폭이 포화 상태가 되면 지터는 늘어난다. 파일 다운로드나 웹 브라우징과 같은 애플리케이션의 경우는 이것이 늘 큰 문제가 되는 것은 아니다. 하지만 스트리밍 비디오와 VoIP는 높은 지터로 인해 크게 고통을 받는다. QoS는 스트리밍 트래픽에 보다 높은 대역폭 우선순위를 제공함으로써 지터를 줄이는 데 도움이 될 수 있다. 또 한 가지 해결책으로 버퍼 크기를 늘리는 방법이 있다.

>> 랜덤 패킷 유실은 네트워크나 장비가 과포하 상태일 때 발생하며, 스트리밍 미디어 잘림 현상과 접속 리세트 및 유실, 그리고 다른 트랜잭션 문제를 야기한다. 더 나쁜 것은 유실된 패킷은 재전송이 되어야 하기 때문에 문제가 더 커진다는 사실이다. QoS 방안은 프로토콜이나 접속이 사용하는 대역폭 양을 제한할 수 있기 때문에 과포하를 방지, 혹은 제한해준다.

>> QoS를 이용해야 하는 마지막 이유는 대역폭 사용 제어다. FTP와 스트리밍 비디오와 같은 트래픽은 냅킨이 페페로니 피자 기름을 흡수하는 것처럼 대역폭을 빨아들일 수 있다. P2P 파일 공유는 대부분의 대학 캠퍼스에서 문제를 일으켰으며, 어떤 캠퍼스 네트워크는 P2P 트래픽만으로도 100% 포화상태가 되기도 했다. 기업 네트워크는 원격 제어 소프트웨어가 웹 서버의 응답성을 느리게 한다는 사실을 알게 될 것이다. 회사 이미지상 빠른 웹 서버 응답성이 중요할 경우에 이것은 문제가 된다.

대역폭을 제어할 수 있는 능력은 특히 할 수 있는 일이 많지가 않을 때 중요하다. QoS는 시트릭스(Citrix)나 네트워크 관리 작업, 혹은 데이터베이스 질의 등과 같은 기간 업무 애플리케이션들에게 우선순위를 주면서 나머지는 덜 중요한 활동을 위해 남겨둔다.

웹 브라우저가 네트워크에 끼칠 수 있는 손실을 결코 과소 평가해서는 안 된다. 대부분의 QoS 장비들이 프로토콜마다 최소 및 최대 속도를 지정할 수 있게 해주지만, 고급 제품들은 세션당 최소 및 최대 속도를 지정할 수 있게 해준다. 예를 들어 개별적인 모든 스트리밍 비디오 세션이 최소 100Kbps를 얻으면서 포함된 전체 스트리밍 비디오 세션은 1Mbps 이상을 사용할 수 없게 할 수도 있다. 특정 사용자에게 선호하는 상태를 주기 위해 QoS를 사용할 수도 있다.


레이어 4냐, 레이어 7이냐

QoS 이행을 고려할 때는 하이 레벨 점검을 할 수 있는 제품이 필요한지 여부를 결정해야 한다. QoS는 주로 레이어 OSI 모델의 레이어 4나 레이어 7에서 작동한다.

레이어 4에서는 포트 번호와 IP 어드레스만이 점검된다. 프로토콜이 자체 포트로 매칭되던 좋았던 시절에는 별 문제가 되지 않았지만 오늘날에는 대부분의 방화벽들이 조직 내 임의의 기계에서 포트 80을 통과하도록 트래픽을 허용하기 때문에, 사용자들은 스트리밍 비디오를 지켜보고, 웹 메일을 사용하며, P2P 서비스를 돌리고, 웹 페이지를 보고, SSH 접속을 터널링할 수 있다. 그리고 이 모든 것들이 포트 80을 통한다. 이런 수많은 활동들은 일반 HTTP나 암호화된 HTTPS를 사용할 수 있으며, 이것은 일부 콘텐츠 필터들을 혼란스럽게 할 것이다.

사용자가 자기 기계를 연결하거나 승인받지 않은 소프트웨어를 설치하려 하지 않는 폐쇄된 환경에 있을 경우에는 레이어 7 능력이 결정적이지 않을 수도 있다. 반면 대학 캠퍼스에서는 앞서 말한 하이 레벨 점검을 다시 생각해볼 필요조차 없다.

레이어 7 지원 QoS 장비를 선택하지 않으면 다른 멋진 기능들은 놓쳐버리게 될 수도 있다. 예를 들어 시타라의 QoS웍스(QoSWorks)는 HTTP 콘텐츠 유형을 기반으로 트래픽을 식별할 수 있다. 보다 빠른 HTML 텍스트 전송기를 허용하기 위해 이미지나 탑재된 멀티미디어 파일의 속도를 제한할 수 있다. 일부 레이어 7 장비들은 또한 HTTP 프로토콜을 사용하는 세션이 웹 페이지를 전달하거나 MP3를 다운로드하고 있는지 여부를 탐지할 수도 있다. 아마도 이런 두 가지 기능을 위해서는 별도의 정책을 두고 싶을 것이다.

레이어 4냐, 레이어 7이냐를 떠나서 QoS 모델을 선택할 때는 기본적인 것에 충실해야 복잡해지지 않을 수 있다. 간단하게 시작해 보자.


무조건 더 많이

네트워크 자원 부족 문제에 직면하게 되면 가장 쉬운 해결책은 과도하게 설비하는 것(overprovision)이다. 더 많은 대역폭이 필요한가? 두 번째 T1을 설치하라. 라우터가 패킷을 유실시키는가? 램을 업그레이드하라. QoS에 비하면 게으른 사람의 대답처럼 들릴지는 모르겠지만, 오버프로비저닝은 유효하며 가끔씩 필요한 방법이기도 하다. 예를 들어 캠코더 DV(Digital Video) 스트림은 802.11b에서 실시간으로 전송할 수가 없다.

소비자 품질의 DV는 25~36Mbps에서 돌아가는데 802.11b는 11Mbps로 운영되기 때문이다(실제로는 4~6Mbps밖에 되지 않는다). 128Kbps ISDN 회선을 갖고 있고 100개의 동시 VoIP 세션을 8Kbps에서 돌리고 싶다면 아무리 QoS를 완전하게 한다고 해도 해결이 되지 않는다.

나아가 라우터, 방화벽 및 기타 네트워크 인프라 장비에서 어떠한 QoS 방안을 시행할 경우에는 프로세싱 파워와 램이 소모되며, 이는 어쨌거나 더 강력한 장비를 사야 하게 만드는 것이다.

다만 전문 QOS 기술을 사용하는 것보다 설비에 더 많은 돈을 지출하지 않도록 조심해야 한다. 예를 들어 월 150달러가 드는 1.5Mbps DSL 접속이 있는 지사가 있다고 하자. 웹 트래픽이 너무 느려서 대역폭 부족에 대한 사용자들의 불만을 듣느니 차라리 듀얼 접속으로 업그레이드를 하려고 할 수 있다. 이럴 경우 먼저 트래픽을 분석해야 한다. 스트리밍 인터넷 라디오와 같은 사소한 것들이 범인일 수도 있기 때문이다. QoS를 이용해 스트리밍 오디오를 줄이거나 제거함으로써 이 지사는 실제로 연간 1천800달러를 절약할 수 있었다.

대역폭을 절약할 수 있는 또 한 가지 방법은 압축 기술을 이용하는 것이다. 그래픽은 자체 해상도나 컬러 심도를 줄일 수 있고 비디오는 MPEG나 DivX와 같은 효율적인 코덱을 이용해 압축될 수 있다. 그리고 오디오는 보다 낮은 비트로 인코딩되거나 스테레오를 모노로 바꿀 수 있다. 이런 로시(lossy) 압축 방안은 품질이 눈에 띌 만큼 떨어지지 않을 때까지만 취해질 수 있다.

여기에 대한 한 가지 대안으로 zip나 gzip, 혹은 알라딘 스터핏(Aladdin Stuffit)과 같은 로스리스(lossless) 방안을 사용할 수도 있다. 로스리스 압축은 품질을 떨어뜨리지는 않지만 파일 크기를 크게 줄이지도 못한다. 나아가 로스리스 압축은 JPEG나 MP3, 혹은 비디오 파일들처럼 이미 압축된 데이터에는 효율적이지 못하다.

또 한 가지 베스트 프랙티스로 웹 서버에서의 HTTP 압축 실행이 있다. 압축은 HTTP 1.0에서 정의되었지만 클라이언트 지원에 대해서는 옵션으로 남아있었다. 반면에 HTTP 1.1 클라이언트는 압축 지원에 요청된다. HTML은 효율적으로 압축을 했는데, 8GB의 텍스트를 한 장의 표준 CD에 담아본 적도 있다. 이 방법의 유일한 약점은 HTTP 압축이 CPU 오버헤드를 부과한다는 것이다.

익스팬드 네트웍스(Expand Networks), 패킷티어(Packeteer), 그리고 페리비트 네트웍스(Peribit Networks)는 모두 지사의 인터넷 라우터 뒤에 배치되어 이들을 통과해 흐르는 모든 트래픽을 자동으로 압축해주는 사이트간 압축 어플라이언스를 판매하고 있다. 물론 연결의 각 종단 지점에는 압축 어플라이언스가 있어야 하며, 어플라이언스들 사이로 보내지는 트래픽은 압축되지 않는다. 그러나 이런 장비들은 저렴하며 왠 회선을 극대화해줄 것이다.

이런 간단한 방법들이 모두 만족스럽지 못하다면 이제 좀더 공을 들일 시간이다.

QoS 확보 기술

인터넷 상에서 이동하는 데이터와 달리 랜 전용 트래픽은 다양한 서브넷들간에 QoS 정책을 받을 만하다. 트래픽은 클래스로 분리되며, 이런 클래스는 프로토콜, IP 범위나 MAC 어드레스, 그리고 플로우(flow) 등을 나타내는 것일 수 있다. 대부분의 시스템들은 완전한 하나의 TCP 세션을 하나의 플로우라고 한다. 웹 사용자가 TCP 3방향 핸드쉐이크(three-way handshake)와 HTTP 전송을 수행한 다음 끝으로 세션을 닫을 때 이 모든 트래픽은 동일한 플로우의 일부로 간주된다. QoS 장비는 하나의 클래스 전체에 정책을 적용시키기도 하고, 개별 플로우에 적용시키기도 하며, 혹은 두 가지를 다 하기도 한다.

QoS를 얻기 위해서는 ToS(Type of Service) 비트를 바꿔야 한다. ToS는 8비트로 구성돼 있으며 IPv4 헤더의 9번째 비트와 16번째 비트 사이에 위치한다. ToS 필드의 비트 0과 1, 그리고 2는 패킷의 상대적 우선순위를 0~7까지 숫자로 나타내는 데 사용될 것이다. 비트 3은 정상적이거나 낮은 지연을 가리키며, 비트 4는 정상적이거나 높은 작업처리량, 그리고 비트 5는 정상적이거나 높은 신뢰성을 가리킨다. RFC는 패킷이 이 세 가지 옵션들 중에서 두 개까지만 사용하도록 규정하고 있다. 비트 6과 7는 앞으로의 사용을 위해 예비된다.

이런 정보로 무엇을 할지에 대해서는 공식적인 지침서가 없다. 네트워크는 우선순위가 높은 트래픽을 위해 낮은 트래픽은 유실시키는 책임을 맡게 된다. 우선순위가 같은 트래픽은 더 차별화될 수 없으며, 네트워크 제어 트래픽(RIP나 ICMP 메시지 등)은 언제나 가장 높은 우선순위를 차지하기 때문에 사실상 유효한 것은 6 단계밖에 없는 셈이다.

시스코시스템즈에 따르면, 불행히도 비트 3~5는 네트워크 업체들간에 일관성있게 이행되지 않았다고 한다. 게다가 설상가상으로 RFC 1349는 비트 3~6을 10년이 지난 후 지연의 최소화, 작업처리량의 최대화, 신뢰성 최대화, 금전적 비용의 최소화, 혹은 정상적 서비스 등 5가지 분류로 다시 지정했다. 우리는 단 하나만 선택할 수 있었으며 이들 중 어떤 것도 대역폭 용량을 보장해주지는 못했다. IPv6는 ToS 옥테트(octet)를 버리고‘트래픽 클래스’ 옥테트를 선택했다.

ToS 비트를 사용하는 것은 종종 ‘컬러링(coloring)’으로 표현되는데, 오래되긴 했지만 아직도 많은 서비스 사업자들이 브론즈, 실버, 골드, 다이아몬드, 그리고 플래티넘 서비스 레벨이란 말을 사용하고 있다. ToS는 아직도 가끔씩 사용되긴 하지만 랜에서는 거의 사용되지 않는다.

인티그레이티드 서비스(Integrated Services), 즉 인트서브(IntServ)는 네트워크에 있는 모든 라우터가 인터서브를 지원하고 존중하는 한 사용 가능한 대역폭 수준을 보장함으로써 종단간 QoS를 제공할 수 있다.

QoS 레벨로는 두 가지가 제공되는데, 하나는 서비스 보증(guaranteed service)이고 하나는 부하 제어(controlled load)다. 서비스 보증 레벨은 일정량의 대역폭이 사용 가능하도록, 그리고 큐잉 패킷의 계정에서 추가 지연이 없도록 보장해 준다. 네트워크를 오버프로비저닝한다고 하더라도 인터서브는 역시 서비스 보증 레벨을 지킬 수 있도록 보장해줄 것이다.


ToS 비트 바꿔야

부하 제어는 부하가 가벼운 네트워크에서 전통적인 IP 트래픽처럼 작동한다. 즉 베스트 에포트(best-effort) 기반으로 일이 진행되며 어떠한 강력한 보증도 없다. 비 인터서브 트래픽은 나머지 것들로 남게 된다.

종단 호스트는 RSVP(Resource Reservation Protocol; RFC 2205)를 내보냄으로써 인트서브 QoS 세션을 초기화한다. RSVP는 네트워크에서 자원 예비를 요청하는 시그널링 프로토콜이다. 네트워크는 모든 연결이 요청을 만족시킬 수 있는지 여부에 따라 요청을 승인, 혹은 거절할 것이다. 승인될 경우 대역폭은 예비된다. 각각의 라우터에는 모든 인트서브 세션에 대한 상황 테이블이 있다. 원래의 송신자가 오류가 나거나 접속을 상실하게 되면 인트서브 세션은 타임아웃이 되고 예비는 취소된다.

인트서브에서 한 가지 문제는 전체 네트워크에서 상태를 유지해야 한다는 것이다. 이것은 라우터에게 제한된 CPU와 램 자원이라는 부담을 지운다.

그리고 종단 지점을 포함해 패킷의 경로에 있는 모든 장비들이 인트서브를 이해해야 한다. 실제로 인트서브는 소규모 네트워크에서 사용돼 왔지만 분산, 혹은 대형 네트워크에서는 인기를 끌지 못했는데, 그것은 바로 확장성에 대한 염려 때문이다.

디프서브(Differentiated Services; RFC 2475)는 인트서브와 ToS의 단점을 얼마간 해결했다. 디프서브는 보다 확장성이 있으며, 정확히 이행될 경우 다중 네트워크에서 작동할 수 있다. IPv4 패킷에 있는 처음 6개 ToS 비트나 IPv6 패킷에 있는 트래픽 클래스 옥테트를 DSCP(Differentiated Services Codepoint; RFC 2474)라고 하는데, DSCP는 자그마치 64개나 되는 클래스를 지원한다.

네트워크는 ‘디프서브 구름’이라고 일컬어지는 디프서브 라우터 집합을 형성할 것이다. 트래픽은 이 구름으로 들어갈 때 분류가 나뉘어진다. 사업자는 언제나 고객과 협상을 해서 서비스 수준 협정을 만들 것이다. 예를 들어, 한 회사에서 한 ISP의 브론즈, 실버, 혹은 골드 패키지에 가입할 수 있으며, 이 회사에서 하는 계약에 따라 디프서브 우선순위 세팅이 결정될 것이다.

디프서브의 가장 큰 이점은 이것이 경계선에서 작동한다는 것이다. 일단 데이터가 구름 속으로 들어가면 내부의 라우터는 QoS 상태 정보를 보유할 필요가 없으며, 따라서 내부 라우터가 라우팅에만 전념할 수 있게 된다.

하지만 디프서브는 여전히 예측 불가능하다. 개별적인 내부 라우터들은 ToS 필드에 대해 이상하게 반응하거나 경보를 낼 수도 있다. 어떠한 정해진 표준도 없으며, 한 사업자의 골드 기준이 다른 사업자의 브론즈 기준이 될 수도 있다. 따라서 최고의 서비스를 위해 돈을 지불한다고 생각하지만 ISP의 피어링 협정은 다른 얘기를 하고 있을 수도 있다. 디프서브는 포화도가 높은 기간 동안 패킷을 선택적으로 유실시킴으로써 작동하기 때문에 가장 낮은 클래스 회원들은 버스트 동안 몇 초간은 접속이 완전히 끊길 수도 있다.

디프서브는 인트서브보다 오버헤드가 낮고 확장성이 좋기 때문에 보다 큰 랜이나 왠에서 잘 작동할 수 있다. 디스퍼브의 등급 분류는 구름의 입구에서 이루어지므로, 종단 노드와 그 사이의 라우터들은 디프서브 비트를 이해하거나 설정할 필요가 없다.


트래픽 쉐이퍼

트래픽 쉐이퍼(traffic shaper)는 QoS의 정점이며, 가끔씩 두 용어가 서로 바뀌어 사용되기까지 한다. 이 범주에는 앨럿 커뮤니케이션즈(Allot Communications), 라이트스피드 시스템즈(Lightspeed Systems), 패킷티어(Packeteer) 및 시타라 네트웍스(Sitara Networks)의 제품들이 포함돼 있으며, 이들은 QoS와 심도 깊은 패킷 점검, 등급 분류 및 트래픽 보고 등을 수행한다. 이런 제품들은 디프서브와 ToS 세팅을 살펴봄으로써 데이터의 등급을 분류할 수 있지만 이런 기술에 의존하지는 않는다. 그리고 이런 장비는 독립형 어플라이언스로 작동하기 때문에, 네트워크 나머지 부분에서 구성 변경이나 상호운용성 문제를 경험할 필요가 없다.

이들 제품은 내부 랜 트래픽을 쉐이핑하는 데도 이용이 가능하긴 하지만 전통적으로 네트워크 에지에 놓인다. 대부분은 레이어 7에서 작동함으로써 ‘포트 80을 통해 모든 것을 돌리면 아무도 이것을 알려주지 못할 것’이라는 신드롬을 해결해준다. 이 문제는 원치 않는 프로토콜과 같은 포트에서 돌아가는 프로토콜(HTTP라고 하자)에 대한 정책을 설정하고 싶을 때 발생한다. 레이어 7 장비는 포트 80으로 가려는 트래픽이 HTTP나 P2P, 스트리밍 비디오, 혹은 HTML이나 JPG 전송기일 경우 알려줄 수 있다.

트래픽 쉐이퍼들은 보통 며칠동안 모니터 전용 모드로 설치된다. 때문에 네트워크를 가로질러 가는 트래픽이 어떤 것인지, 그리고 무엇이 가장 많은 대역폭을 차지하고 있는지를 확인할 수 있으며, 트래픽 쉐이퍼의 보고 툴은 아마도 이들의 가장 소중한 자산일 것이다.

정의와 사양이 업체마다 다르긴 하지만, 트래픽 쉐이퍼에는 몇 가지 공통된 기능들이 있다. 트래픽은 클래스(프로토콜이나 서브넷 등)나 플로, 혹은 둘 다를 기반으로 쉐이핑된다. 그리고 버스트뿐만 아니라 최소 및 최대 대역폭의 설정도 가능하다.

버스트는 별도의 대역폭이 사용 가능할 경우에만 허용된다. 예를 들어 FTP 10Mbps를 정상적일 때는 FTP 10Mbps를 할당하고, 대역폭이 사용 가능할 때는 15Mbps까지 버스트를 할당할 수 있다. 하이엔드 쉐이퍼에는 ‘모든 VoIP 세션용으로 8Kbps를 허용하지만 VoIP가 1Mbps만 사용하도록 하라. VoIP가 1Mbps를 사용중이면 새로운 VoIP 세션은 하나도 허용하지 말라’와 같은, 다소 진보된 명령어들을 줄 수도 있다.

큐잉이냐 창이냐

트래픽 쉐이퍼들은 패킷을 큐잉하거나 TCP 창 크기를 조작함으로써 작동한다. 큐잉을 사용하는 업체들은 대기열로 인해 TCP가 자동으로 스스로 작아지기 때문에 TRS(TCP Rate Shaping)는 불필요하고 자연스럽지 못하며 IETF에서 규정한 것도 아니라고 주장하고 있다.

TRS는 또한 UDP(User Datagram Protocol) 트래픽을 처리하지도 못한다. 이것은 하지만 사소한 일인데, 그 이유는 TRS를 사용하는 트래픽 쉐이핑 업체는 어느 곳이든 제 2의 큐잉 기반 알고리즘을 이행해 UDP를 처리할 것이기 때문이다. 앨럿과 라이트스피드는 모두 큐잉 트래픽 쉐이퍼를 만들고 있다.

TRS는 TCP 제어 데이터와 창 크기를 조작함으로써 작동하며, TCP 세션을 훨씬 더 느린 회선에 있는 호스트와 커뮤니케이션을 하는 것처럼 믿게 만든다. 모뎀 사용자가 T3에 있는 서버에 접속할 경우 이와 유사한 쉐이핑이 당연히 발생할 것이다.

TRS 업체들은 큐잉이 대기시간을 추가하고, 더 많은 패킷 유실을 가져오며, 수신 트래픽을 느리게 하는 것 만큼 좋지가 않다고 주장하고 있다. 패킷티어와 시타라는 모두 TRS를 사용하는 업체들이다.

큐잉 업체들이 다룰 수 있는 주요 기술들로는 다음과 같은 네 가지가 있다:

>> PQ(Priority Queuing)는 ToS와 유사한 방식이다. 우선순위가 높은 대기열이 낮은 대기열에 앞서 송신하며, 이는 즉 우선순위가 가장 낮은 대기열은 굶어죽을 수도 있다는 얘기다.

>> CBQ(Class-Based Queuing)는 PQ에서의 기아 문제를 어느 정도 해결했다. 클래스는 최소한의 대역폭을 갖도록 구성될 수 있으며, 가능할 경우 다른 클래스에서 대역폭을 빌려올 수도 있다.

>> WFQ(Weighted Fair Queuing)은 우선순위 레벨을 기준으로 대기열 크기를 늘리거나 줄여준다. 여기서 대역폭 이용도는 참작되지 않는다.

>> HWFQ(Hierarchical Weighted Fair Queuing)은 실시간 트래픽을 기반으로 다양한 트래픽 상황 하에서 최악의 경우 패킷 지연을 평가하며, 대기열 평가에 이 데이터를 사용한다.

큐잉 대 속도 쉐이핑의 논쟁은 수년 동안 계속돼 온 것이지만, 사실 관리 인터페이스, 보고 품질, 그리고 성능은 기반 기술보다도 SUB의 문제라는 게 우리 생각이다.


단기적 이행도 유용

QoS 이행이 꼭 어렵거나 지나치게 시간 소모적인 것은 아니지만 너무 힘들게 하다보면 그렇게 될 수도 있다. 절대적으로 필요한 애플리케이션들을 선택하고, 이들이 충분한 네트워크 자원을 언제나 확보하고 있는지를 확인하라. 아니면 그냥 최악의 범죄자들을 제한하라.

이 글의 결론은 성능 부족을 바로 더 많은 대역폭에의 필요와 연관짓지 말라는 것이다. 무료로 라우터에서 QoS를 지원함으로써 만족스러운 결과를 얻을 수 있을 때 굳이 기가비트 이더넷으로 이동할 이유가 없다. QoS는 최소한 다음 구매 사이클 때까지 네트워크가 가동되도록 유지하기 위해 단기적으로 사용될 수도 있다.




===== 랜과 왠에서의 QoS =====

궁극적으로 진정한 QoS는 네트워크의 경계선만큼만 확장될 수 있기 때문에 사실상 인터넷 라우터에서 중단된다. ISP와 인터넷 백본 사업자들은 QoS 방안을 존중할 필요가 없기 때문에 사실 이들이 QoS를 간단히 무시해버리는 것도 충분히 예상할 수 있는 일이다.

그렇다면 QoS를 이행해야 할까, 아니면 그냥 대역폭을 더 사는 게 나을까.

‘더 많은 대역폭을 사는 게 좋다’는 논거는 간단하다. 즉 대역폭은 저렴하고 QoS는 복잡하다는 것이다. 용량이 충분하다면 QoS는 의미가 없다. 인터넷은 용량 면에서 계속 성장하고 있으며, 기술적인 진보는 네트워킹 속도를 지속적으로 향상시키고 있다.

이 주장은 왠 쪽 보다는 랜 쪽에서 더 잘 적용된다. 기가비트 이더넷은 가격이 적당하며 대부분의 시스템들은 이것을 포화 상태로 만들기 힘들기 때문에 10기가비트 이더넷은 말할 것도 없다. 하지만 왠 속도는 그렇듯 적당한 가격에서 향상되지 않았으며, 인터넷 접속이 최소한 하루 몇 시간 동안 포화 상태에 있는 것을 쉽게 볼 수 있다.

QoS 기능은 이제 포티넷(FortiNet)의 포티게이트(FordiGate)와 같은 다용도 보안 제품과 VPN 게이트웨이 및 라우터 등 많은 인프라 제품에서 무료로 제공되고 있다.

무제한 공급 모델에서 가장 간과하기 쉬운 문제는 여분의 대역폭이 있을 경우 누군가 이것을 사용하게 될 수 있다는 것이다. 이것은 마치 교통 시스템과 같다. 1930년대 뉴욕시에서는 기존 구간에서의 정체를 완화하기 위해 두 개의 다리를 만들었다. 다리가 완성되고 난 후 늘어난 수용량에도 불구하고 정체는 이 프로젝트가 시작되기 전이나 다를 게 없었다.

공유, 음악 교류 및 P2P의 급증으로 인해 대역폭은 더 이상 무한대라는 말이 어울릴 수가 없게 되었다. 웹페이지도 또한 점차 부풀어가고 있다.

콘텐츠 필터로 중요하지 않은 다운로드들을 차단할 수도 있다(사용자가 콘텐츠 필터가 쉽게 암호화된 HTTPS 트래픽을 차단할 수 없다는 사실을 알 만큼 현명하지 못하다는 전제하에). 하지만 수용 가능한 사용 정책을 따르는 트래픽이라 하더라도 파괴력을 행사할 수 있다. 즉 100명의 수신자에게 전송되는 5MB 첨부 파일도 얼마간의 손상을 입힐 수 있다. 웹 서버에 접속하는 사용자들은 DSL 사용자들에게서 모든 대역폭을 앗아가 버릴 것이다. QoS는 모든 사용자가 사이트에서 동등한 경험을 하도록 보장해줄 수 있다.

일부 조직에서는 웹 로그 파일에 대해 웹사이트 분석 툴을 실행하고 있다. 이런 파일들은 여러 기가비트로 구성될 수 있기 때문에 웹 서버에서 FTP로 이들을 다운로딩하는 데 너무 많은 대역폭을 써서 정작 중요한 SQL 룩업에는 거의 대역폭이 남지 않을 수도 있다.

그리고 VoIP가 있다. 독자들은 VoIP 파일로트가 많은 IT 관리자들의 아젠다란 얘기를 한다. 당신도 마찬가지라면 QoS가 필요할 것이다. 대역폭 포화 기간이 아무리 짧다고 하더라도(몇 초밖에 되지 않더라도) 전화 통화에서는 단절이 일어날 수 있다. VoIP 호출이 POTS 호출만큼이나 상태가 좋다는 보증이 없이는 경영진이 VoIP 배치를 승인하도록 만들기가 힘들 것이다.

=================================================================

Executive Summary

Quality of Service

완전한 세상이라면 QoS는 인터넷에 처음부터 구축되었을 것이며, 그랬더라면 일관성 없는 대역폭 이용, 지터 대기시간, 패킷 유실, 그리고 탐욕스러운 애플리케이션들로 인해 걱정할 필요도 없었을 것이다.

하지만 세상은 완전하지 않으며, 따라서 VoIP(Voice over IP)와 같은 스트리밍 미디어에 대해서는 정량의 대역폭뿐만 아니라 낮고 일정한 대기시간을 보장해야 한다. FTP나 웹 트래픽과 같은 애플리케이션들은 대기시간에 민감하지 않을지 모르지만, 이들은 미친 듯이 대역폭을 먹어치울 수 있다. 과포화된 네트워크는 패킷 유실과 비효율적인 데이터 전송을 가져오고 사용자를 아우성치게 만든다.

QoS는 몇 가지 방법으로 확보될 수 있다. 압축을 지원하고 더 많은 대역폭을 구입하는 게 가장 간단한 방법이지만, 지연만은 피해갈 수 없을 것이다. 사용자 파이프를 막히게 하지 못하게 할 수 있는 보다 효과적인 방법은 ToS(Type of Service), 인티그레이티드 서비스(Integrated Services), 디퍼런시에이티드 서비스(Differentiated Services), 큐잉, 혹은 TCP 속도 쉐이핑(TCP rate-shaping) 등을 이용하는 것이다. 이들 중에서 인터넷을 가로질러 전송되는 데이터를 제어하는 데는 뒤의 두 가지만이 효과적이다. 나머지는 내부 랜 QoS나 서비스 협정을 맺은 파트너들간에 사용하기에 가장 좋다.

부족할 때는 언제든 더 많은 대역폭만 사면된다는 식의 생각을 해서는 안 된다. 몇 가지 간단한 QoS 정책을 이행함으로써 기간 업무 프로토콜을 존중하면서 대역폭에 목말라하는 애플리케이션을 달랠 수 있다. 그리고 QoS 능력은 네트워크 인프라의 많은 조각들에서 지원되고 있기 때문에, QoS 시행 비용은 최소화될 수 있을 것이다.
Posted by theYoungman