EdgeRouter - 서비스 품질 (Quality of Service, QoS)

download at 2017-02-14T01:54:01Z origin

Overview

서비스 품질 (QoS)는 리우터로 하여금 서로 다른 트래픽 타입에 대하여 다른 수준의 서비스를 제공할 수 있는 기능입니다. 기본적으로 일부 트래픽에 더 나은 처리(높은 수준의 우선순위, 더 많은 대역폭 등)를 할 수 있도록 합니다.

고수준에서 서로 다른 트래픽 정책을 사용하므로 서비스 품질을 다르게 할 수 있습니다. 또 트래픽을 특정 라우터로 보내어 품질을 다르게 제공 할 수 있습니다. 간략하게 설명하면, 트래픽 정책은 1개 이상의 룰로 정의됩니다. 각 룰은 다음의 양식을 따릅니다:

Type of traffic > How the router should treat it

예를 들어, 간단한 룰 R1의 예제는 다음과 같습니다:

R1: FTP traffic > Limit the bandwidth to 1 Mbps

트래픽 정책을 1개 이상의 룰로 정의할 수 있습니다. 예를 들어 트래픽 정책 P1은 2개의 룰 R1, R2를 가지고 있으며 다음과 같이 표시됩니다:

P1:
    R1: FTP traffic > Limit the bandwith to 1 Mbps
    R2: SSH traffic > Make latency lower

트래픽 적책이 효과를 발휘하려면, 특정 네트워크 인터페이스에 특정 패킷 방향을 지정하여야 합니다. 아래는 그 예제를 참조하세요:

Traffic going out on interface "eth1" > Use traffic policy P1

다음은 다양한 트래픽 정책 타입을 상세하게 서술합니다.

Traffic Policies

많은 트래픽 정책 타입이 존재합니다. 각각 정책은 사용해야 할 곳과 한계가 존재합니다. 몇몇 정책은 EdgeOS CLI에서 실행할 수 있습니다.

  • 마지막 트래픽 버림 (FIFO)
  • 랜덤 사전 탐지
  • 비율 컨트롤
  • 공정한 대기열
  • Shaper
  • 리미터

마지막 트래픽 버림 (FIFO)

마지막 트래픽 버림 (drop-tail) 정책은 패킷을 큐에 계쏙 보관합니다. 패킷이 전송되면 큐에 추가하고 라우터는 큐에 저장되어 있는 트래픽 패킷을 선입선출 Firs In First Out (FIFO) 방식으로 처리합니다. 큐는 미리 정의된 길이 제한이 존재하며 큐가 꽉 찰경우, 추가 패킷은 처리할 수 없습니다. 이것을 "트래픽 버림, tail drop"이라고 합니다. Tail drop은 너무 많은 트래픽이 큐에 추가되었을 때 발생합니다. 라우터는 패킷을 빠르게 처리할 만한 충분한 자원이 없음을 의미합니다.

drop-tail 정책은 다음 한계점을 가집니다:

  • 트래픽 타입을 구분할 수 없습니다.
  • 큐 길이만을 파라미터로 받습니다.
  • 인터페이스의 out 방향 트래픽만 제어 할 수 있습니다.

예를 들어, 다음 CLI 명령어를 통해서 drop-tail 정책을 policy1 으로 명명하고 eth1의 out 방향 트래픽에 적용할 수 있습니다:

set traffic-policy drop-tail policy1 queue-limit 100
set traffic-policy drop-tail policy1 description "limit queue 100"
set interfaces ethernet eth0 traffic-policy out policy1

랜덤 사전 탐지

랜덤 사전 탐지 (Random Early Detection, RED) 정책은 위의 정책과 다르게 패킷을 사전에 큐의 길이가 증가하기 이전에 버립니다. 이 정책의 이점은 TCP 트래픽에 점진적으로 패킷을 버리게 하여 TCP 종단에서 네트워크 혼잡을 감지 할 수 있도록 하거나 트래픽을 감소하여 더 좋은 성능을 획득 할 수 있습니다. 이 정책은 큐의 길이를 넘어서는 모든 트래픽을 버리는 위의 정책과 반대되는 정책이라고 할 수 있습니다.

위의 drop-tail 정책과 같이 RED 정책은 인터페이스의 out 방향에만 적용이 가능합니다. 3개의 RED 주요 파라미터는 다음과 같습니다:

  • Minimum queue length: RED 정책이 시작할 때 확률적으로 패킷을 버리기 시작하는 큐의 길이
  • Maximum queue length: 큐의 길이가 최소 큐 길이와 최대 큐 길이 사이에 있을 때 RED 정책은 패킷을 버리는 확률을 0에서 최대 확률로 점진적으로 증가합니다.
  • Maximum drop probability: RED 정책에서 패킷의 길이가 증가할 때 최대 큐 길이에 도달하기 이전까지 패킷을 버리는 확률

추가적으로, 각 IP에 RED 파라미터를 다르게 적용 할 수 있습니다. 아래는 RED 정책을 CLI 명령어를 사용하여 적용한 예제입니다:

set traffic-policy random-detect random1 precedence 0 mark-probability 50
set traffic-policy random-detect random1 precedence 0 maximum-threshold 50
set traffic-policy random-detect random1 precedence 0 minimum-threshold 20
set interfaces ethernet eth0 traffic-policy out random1
commit

이 예제에서는 최대 확률을 우선순위가 0일 때 2%로 지정하였습니다.

비율 컨트롤

비율 컨트롤 (rate-control) 정책은 트래픽 전송을 미리 정의된 비율만큼 보장합니다. out 방향에 적용이 가능하며, 메인 파라미터는 전송 트래픽의 최대 비율입니다. 예를 들어 다음 CLI 명령어를 통해서 비율 컨트롤 정책을 생성하고 최대 1Mbps 만큼 eth0 인터페이스에서 전송할 수 있도록 보장합니다.

set traffic-policy rate-control rate1 bandwidth 1mbit
set interfaces ethernet eth0 traffic-policy out rate1
commit

공정한 대기열

공정한 대기열 (fair queue) 정책은 확률론적 공정 대기열 기법을 사용하여 TCP 커넥션과 같이 특정한 트래픽을 다른 버킷에 분류하여 라우터가 각 버킷마다 서비스를 제공 할 수 있도록 트래픽을 분리합니다. 분리 작업은 시작지/도착지 IP 주소와 시작지 포트를 해싱하여 분류합니다. 확률적으로 라우터가 각 트래픽에 공평한 서비스를 제공할 수 있습니다.

공정한 대기열 정책은 out 방향에 적용 가능합니다. 공정함이라는 단어는 확률론 적입니다. 몇몇 경우에는 다수가 같은 버킷에 입력될 우려가 있으므로 불공정 을 초래할 수 있습니다. 불공정을 최소화하기 위해서는 hash interval 파라미터를 조정하여 해싱 알고리즘을 고정된 시간 기간동안마다 변경하도록 해야합니다. 아래는 그 예제 설정입니다:

set traffic-policy fair-queue fair1 hash-interval 10
set interfaces ethernet eth0 traffic-policy out fair1
commit

Shaper

더 복잡한 정책은 shaper 정책입니다. 계층 토큰 버킷 기법을 사용하여 각 네트워크 링크의 트래픽 클래스마다 서로 다른 대역폭을 제공합니다. 간단한 예제는 아래와 같습니다.

set traffic­policy shaper shaper1 bandwidth 100mbit
set traffic­policy shaper shaper1 default bandwidth 60mbit
set traffic­policy shaper shaper1 class 2 bandwidth 20mbit
set traffic­policy shaper shaper1 class 2 match client2 ip source address 10.0.1.2/32
set traffic­policy shaper shaper1 class 3 bandwidth 20mbit
set traffic­policy shaper shaper1 class 3 match client3 ip source address 10.0.1.3/32
set interfaces ethernet eth0 traffic­policy out shaper1
commit

이 예제는 shaper 정책을 shaper1 로 정의하고 eth0의 100Mbps 대역폭으로 제한하여 out 방향에 대하여 적용하였습니다. 2개의 트래픽 클래스가 정의되었으며 IP 주소가 10.0.1.2에서 시작한 트래픽과 10.0.1.3에서 시작한 트래픽 두 가지로 정의하였습니다. 두가지 클래스 각각 20Mbps 대역폭을 보장합니다. 다른 트래픽은 default 클래스로 분류되어 60 Mbps 대역폭을 보장받습니다. 예를 들면, eth0은 20 Mbps의 10.0.1.2, 20 Mbps의 10.0.1.3를 통합하여 보장하고 다른 트래픽에는 80 Mbps를 사용하고 있다가 앞 2개의 주소에서 자신의 대역폭을 모두 사용하면 다른 트래픽은 최대 60 Mbps 만큼만 사용이 가능하게 됩니다.

리미터

리미터, limiter 정책은 진입 정책 관리 를 수행합니다. 그러므로 트래픽의 in 방향에 적용할 수 있습니다. 트래픽을 다양한 클래스로 나누어 적용할 수 있으며 각각 다른 대역폭을 정의할 수 있습니다. 예를 들어, 다음 정책은 ICMP 트래픽에 1 Mbps, 다른 트래픽에는 10 Mbps를 제한하는 예제입니다.

set traffic­policy limiter limit1 class 1 bandwidth 1mbit
set traffic­policy limiter limit1 class 1 match match1 ip protocol icmp
set traffic­policy limiter limit1 default bandwidth 10mbit
set interfaces ethernet eth0 traffic­policy in limit1
commit

Note: *리미터 정책은 라우터가 목적지인 트래픽에 대하여 적용하기 위해 고안되었습니다. 정책의 행위가 라우터 바깥으로 나가는 트래픽에 대하여는 정확하게 적용하기 어렵습니다. 바깥으로 나가는 트래픽에 대하여는 인풋 인터페이스 를 생성해서 다른 아웃바운드 정책이 적용 가능하도록 하여 설정해볼 수 있습니다.*