مقدمه

QoS یا Quality of Service مجموعه‌ای از تکنیک‌ها برای مدیریت و کنترل ترافیک شبکه است. با QoS می‌توان:

  • پهنای باند را محدود کرد (Policing)

  • پهنای باند را تضمین کرد (Bandwidth Allocation)

  • ترافیک را اولویت‌بندی کرد (Priority Queuing)

  • ترافیک را صاف کرد (Traffic Shaping)

مفهوم QoS

QoS به شما امکان می‌دهد که:

  1. ترافیک‌های مختلف را شناسایی کنید (با class-map)

  2. سیاست‌های مدیریتی را تعریف کنید (با policy-map)

  3. این سیاست‌ها را روی interface ها اعمال کنید

چرا QoS نیاز است؟

بدون QoS:

  • تمام ترافیک‌ها با اولویت یکسان forward می‌شوند

  • یک کاربر می‌تواند تمام bandwidth را مصرف کند

  • ترافیک حیاتی (VoIP, Video) ممکن است drop شود

با QoS:

  • ✅ ترافیک حیاتی تضمین bandwidth دارد

  • ✅ ترافیک کم‌اهمیت محدود می‌شود

  • ✅ در زمان ازدحام، اولویت‌بندی انجام می‌شود

  • ✅ استفاده بهینه از منابع شبکه

اجزای QoS در Soodar Router

[class-map] → [policy-map] → [service-policy]
   (شناسایی)      (سیاست)       (اعمال)
  1. class-map: تعریف می‌کند کدام ترافیک‌ها را می‌خواهیم مدیریت کنیم

  2. policy-map: تعریف می‌کند چه سیاستی روی آن ترافیک اعمال شود

  3. service-policy: سیاست را روی interface اعمال می‌کند


مفاهیم اصلی QoS

1. Traffic Policing (محدودسازی)

تعریف: محدود کردن حداکثر bandwidth عملکرد: ترافیک اضافی فوراً Drop می‌شود کاربرد: محدود کردن کاربران یا سرویس‌های خاص

مثال: محدود کردن download به 2Mbps

2. Traffic Shaping (صاف‌سازی)

تعریف: کنترل نرخ ارسال داده عملکرد: ترافیک اضافی در صف نگهداری می‌شود کاربرد: صاف کردن burst های ترافیک

تفاوت با Policing: Shaping ترافیک را drop نمی‌کند، بلکه به تاخیر می‌اندازد

3. Priority Queuing (اولویت‌بندی)

تعریف: تخصیص اولویت بالا به ترافیک خاص عملکرد: ترافیک priority همیشه اول forward می‌شود کاربرد: VoIP, Video Conferencing, Real-time Traffic

4. Bandwidth Allocation (تخصیص پهنای باند)

تعریف: تضمین حداقل bandwidth در زمان ازدحام عملکرد: از WFQ (Weighted Fair Queuing) استفاده می‌کند کاربرد: تضمین bandwidth برای سرویس‌های مهم

مقایسه مکانیزم‌های QoS

مکانیزم

Guaranteed BW

Maximum BW

Exceed Action

Priority

Policing

0

User Defined

Drop or Mark

No

Shaping

0

User Defined

Queue

No

Priority

User Defined

User Defined

Drop

Yes

Bandwidth

User Defined

Infinite

Queue

No

نکته مهم

  • Policing: ترافیک اضافی را Drop می‌کند (سریع اما aggressive)

  • Shaping: ترافیک اضافی را Queue می‌کند (کندتر اما smooth)

  • Priority: برای Real-time traffic (VoIP, Video)

  • Bandwidth: برای تضمین حداقل bandwidth در ازدحام


سناریو 1: Traffic Policing (محدودسازی پهنای باند کاربر)

هدف

محدود کردن ترافیک از یک IP خاص به حداکثر 2Mbps

توپولوژی

[Client]           [n2 Router]       [Server]
2.1.1.10 ----ge1---- (QoS) ----ge2---- 1.1.1.10
              QoS Policy اینجا اعمال می‌شود

3node

مسئله

Client در 2.1.1.10 از Server در 1.1.1.10 فایل دانلود می‌کند و تمام bandwidth را مصرف می‌کند.

راه‌حل

استفاده از Traffic Policing برای محدود کردن به 2Mbps

پیکربندی

مرحله 1: ایجاد class-map (شناسایی ترافیک)

n2(config)# class-map cmap-limit-user
n2(config-cmap)# match source-address 2.1.1.10/32
n2(config-cmap)# match destination-address 1.1.1.10/32
n2(config-cmap)# exit
n2(config)#

class-map چیست؟

class-map ترافیک هدف را شناسایی می‌کند. می‌توانید match بر اساس:

  • Source/Destination IP

  • Protocol (HTTP, FTP, SSH, etc.)

  • Access-List

  • Port Number

  • DSCP/ToS

مرحله 2: ایجاد policy-map (تعریف سیاست)

n2(config)# policy-map pmap-limit-user
n2(config-pmap)# class cmap-limit-user
n2(config-pmap-c)# police 2M conform-action transmit exceed-action drop
n2(config-pmap-c)# exit
n2(config-pmap)# exit
n2(config)#

توضیح دستور police:

  • 2M: حداکثر 2 Mbps

  • conform-action transmit: ترافیک زیر 2M را Forward کن

  • exceed-action drop: ترافیک بیش از 2M را Drop کن

مرحله 3: اعمال Policy روی Interface

n2(config)# interface ge2
n2(config-if)# service-policy pmap-limit-user in
n2(config-if)# exit
n2(config)# write
n2(config)# exit
n2#

Direction: IN vs OUT

  • in: Policy روی ترافیک ورودی به interface اعمال می‌شود

  • out: Policy روی ترافیک خروجی از interface اعمال می‌شود

در این مثال، ترافیک از 2.1.1.10 وارد ge2 می‌شود، پس از in استفاده می‌کنیم.

بررسی و تست

بررسی Policy

n2# show policy-map pmap-limit-user
Policy Map pmap-limit-user
  Class cmap-limit-user
    Police CIR 2097152 (bps) CB 524288 (byte) EB 734003 (byte)
    Conform Action: Transmit
    Exceed Action: Drop
n2#

بررسی Interface

n2# show policy-map interface ge1
Interface ge1
  Service-policy input: pmap-limit-user
    Class-map: cmap-limit-user (match-all)
      Match: source-address 2.1.1.10/32
      Match: destination-address 1.1.1.10/32
      Police:
        2097152 bps, 524288 limit
        Conform: 12345 packets, 6789012 bytes; action: transmit
        Exceed: 456 packets, 234567 bytes; action: drop
n2#

تست با FTP Download

روی Server (1.1.1.10):

server$ sudo systemctl start vsftpd

روی Client (2.1.1.10):

client$ ftp 1.1.1.10
Connected to 1.1.1.10.
ftp> get largefile.bin
...
Transfer rate: 2.0 Mbps
# محدود شده به 2 Mbps ✅

Match-All vs Match-Any

در class-map می‌توانید رفتار matching را تعیین کنید:

Match-All (پیش‌فرض)

n2(config)# class-map match-all cmap-strict
n2(config-cmap)# match source-address 2.1.1.10/32
n2(config-cmap)# match destination-address 1.1.1.10/32
n2(config-cmap)# exit

تمام شرایط باید برقرار باشد:

  • Source باید 2.1.1.10 و

  • Destination باید 1.1.1.10 باشد

Match-Any

n2(config)# class-map match-any cmap-flexible
n2(config-cmap)# match source-address 2.1.1.10/32
n2(config-cmap)# match source-address 2.1.1.20/32
n2(config-cmap)# exit

هر یک از شرایط کافی است:

  • Source = 2.1.1.10 یا

  • Source = 2.1.1.20


سناریو 2: Traffic Shaping (صاف‌سازی ترافیک)

هدف

محدود کردن ترافیک HTTP به 10Mbps بدون drop کردن ناگهانی

تفاوت Shaping و Policing

ویژگی

Policing

Shaping

ترافیک اضافی

Drop می‌شود

Queue می‌شود

سرعت

سریع

کندتر

Smooth

خیر

بله

CPU Usage

کم

بیشتر

کاربرد Shaping

مناسب برای:

  • ✅ ترافیک TCP (که retransmit می‌کند)

  • ✅ زمانی که می‌خواهید burst ها را صاف کنید

  • ✅ زمانی که ISP شما از شما shaping می‌خواهد

پیکربندی

مرحله 1: class-map برای Web Traffic

n2(config)# class-map match-any cmap-web-traffic
n2(config-cmap)# match protocol http
n2(config-cmap)# match protocol https
n2(config-cmap)# exit
n2(config)#

مرحله 2: policy-map با Shaping

n2(config)# policy-map pmap-shape-web
n2(config-pmap)# class cmap-web-traffic
n2(config-pmap-c)# shape average 10M
n2(config-pmap-c)# exit
n2(config-pmap)# exit
n2(config)#

shape average 10M: میانگین نرخ ارسال را به 10Mbps محدود کن

مرحله 3: اعمال روی Interface

n2(config)# interface ge2
n2(config-if)# service-policy pmap-shape-http out
n2(config-if)# exit
n2(config)# write

نکته

Shaping معمولاً روی direction OUT اعمال می‌شود چون شما کنترل بیشتری روی ترافیک خروجی دارید.

تست

n2# show policy-map interface ge2
Interface ge2
  Service-policy output: pmap-shape-web
    Class-map: cmap-web-traffic
      Match: protocol http
      Match: protocol https
      Shaping:
        Target/Average Byte Sustained  Excess  Interval  Increment
        Rate   Limit   (ms)   (ms)    (bytes)  (ms)      (bytes)
        10000000/10000000  50000   200   200   6250000    800     6250000
        
      Output Packets: 12345
      Output Bytes: 67890123
n2#

سناریو 3: Priority Queuing (اولویت‌بندی برای VoIP)

هدف

تضمین اینکه ترافیک VoIP همیشه اولویت دارد و تاخیر کم دارد

مسئله

در شبکه شما هم VoIP و هم File Transfer وجود دارد. زمانی که File Transfer فعال است، کیفیت VoIP افت می‌کند (صدا قطع می‌شود، delay بالا، jitter).

راه‌حل

استفاده از Priority Queuing برای VoIP

توپولوژی

[VoIP Phone] ----+
                 |
[File Server]----+----> [n2 Router] ----> [Internet]
                        Priority Queue

پیکربندی

مرحله 1: class-map برای VoIP

n2(config)# access-list 100 permit udp any any range 16384 32767
n2(config)# class-map cmap-voip
n2(config-cmap)# match access-list 100
n2(config-cmap)# exit
n2(config)#

نکته

VoIP (RTP) معمولاً از UDP port range 16384-32767 استفاده می‌کند. از Access-List برای match کردن استفاده می‌کنیم.

مرحله 2: class-map برای سایر ترافیک

n2(config)# class-map cmap-data
n2(config-cmap)# match any
n2(config-cmap)# exit
n2(config)#

مرحله 3: policy-map با Priority

n2(config)# policy-map pmap-voip-priority
n2(config-pmap)# class cmap-voip
n2(config-pmap-c)# priority 1M
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-data
n2(config-pmap-c)# bandwidth 5M
n2(config-pmap-c)# exit
n2(config-pmap)# exit
n2(config)#

توضیح:

  • VoIP: priority 1M = همیشه اولویت دارد، تا 1Mbps تضمین شده

  • Data: bandwidth 5M = حداقل 5Mbps در زمان ازدحام

مرحله 4: اعمال روی Interface

n2(config)# interface ge0
n2(config-if)# service-policy pmap-voip-priority out
n2(config-if)# exit
n2(config)# write

تست

بررسی Priority Queue

n2# show policy-map interface ge0
Interface ge0
  Service-policy output: pmap-voip-priority
  
    Class-map: cmap-voip (match-all)
      Priority: 1000000 bps, burst 25000 bytes
      Packets: 45678
      Bytes: 5678901
      Packets dropped: 0
      
    Class-map: cmap-data (match-all)
      Bandwidth: 5000000 bps
      Packets: 123456
      Bytes: 98765432
      Packets dropped: 234
n2#

تست Ping Latency

قبل از QoS:

voip-phone# ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=123.4 ms  ❌ خیلی زیاد!

بعد از QoS با Priority:

voip-phone# ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=12.3 ms  ✅ عالی!

Priority با درصد

به جای مقدار ثابت، می‌توانید از درصد استفاده کنید:

n2(config)# policy-map pmap-voip-percent
n2(config-pmap)# class cmap-voip
n2(config-pmap-c)# priority percent 10
n2(config-pmap-c)# exit
n2(config-pmap)# exit

این 10% از bandwidth interface را به VoIP اختصاص می‌دهد.

هشدار

از Priority فقط برای ترافیک Real-time (VoIP, Video) استفاده کنید! استفاده بیش از حد باعث می‌شود سایر ترافیک‌ها starve شوند.

توصیه: Priority را به کمتر از 33% از bandwidth محدود کنید.


سناریو 4: Bandwidth Allocation (تضمین پهنای باند)

هدف

تضمین حداقل bandwidth برای سرویس‌های مختلف در زمان ازدحام

مسئله

شما 3 سرویس دارید که در زمان ازدحام باید bandwidth تضمینی داشته باشند:

  • Video Streaming: حداقل 10Mbps

  • Web Browsing: حداقل 5Mbps

  • File Transfer: هرچه بماند

تفاوت Bandwidth و Priority

ویژگی

Priority

Bandwidth

تضمین در غیر ازدحام

بله

خیر (unlimited)

تضمین در ازدحام

بله

بله

Strict Priority

بله

خیر (WFQ)

Starvation Risk

بله

خیر

پیکربندی

مرحله 1: class-map ها

n2(config)# access-list 101 permit tcp any any eq 1935
n2(config)# access-list 101 permit tcp any any eq 554
n2(config)# access-list 101 permit udp any any eq 554
n2(config)# class-map cmap-video
n2(config-cmap)# match access-list 101
n2(config-cmap)# exit
n2(config)#

توضیح

  • Port 1935: RTMP (Streaming)

  • Port 554: RTSP (Real-Time Streaming Protocol) چون پروتکل‌های rtsp و youtube در Soodar وجود ندارند، از port های استاندارد استفاده می‌کنیم.

n2(config)# class-map cmap-web
n2(config-cmap)# match protocol http
n2(config-cmap)# match protocol https
n2(config-cmap)# exit
n2(config)#
n2(config)# class-map cmap-ftp
n2(config-cmap)# match protocol ftp
n2(config-cmap)# exit
n2(config)#

مرحله 2: policy-map با Bandwidth Allocation

n2(config)# policy-map pmap-bandwidth-allocation
n2(config-pmap)# class cmap-video
n2(config-pmap-c)# bandwidth 10M
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-web
n2(config-pmap-c)# bandwidth 5M
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-ftp
n2(config-pmap-c)# bandwidth 2M
n2(config-pmap-c)# exit
n2(config-pmap)# exit
n2(config)#

مرحله 3: اعمال روی Interface

n2(config)# interface ge0
n2(config-if)# service-policy pmap-bandwidth-allocation out
n2(config-if)# exit
n2(config)# write

چگونه کار می‌کند؟

حالت 2: با ازدحام (Link پر)

Video: دریافت می‌کند 10Mbps ✅ (تضمین شده)
Web:   دریافت می‌کند 5Mbps  ✅ (تضمین شده)
FTP:   دریافت می‌کند 2Mbps  ✅ (تضمین شده)

Bandwidth با درصد

n2(config)# policy-map pmap-bandwidth-percent
n2(config-pmap)# class cmap-video
n2(config-pmap-c)# bandwidth percent 50
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-web
n2(config-pmap-c)# bandwidth percent 30
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-ftp
n2(config-pmap-c)# bandwidth percent 20
n2(config-pmap-c)# exit
n2(config-pmap)# exit

50% + 30% + 20% = 100% ✅

نکته

Bandwidth allocation فقط در زمان ازدحام فعال می‌شود. زمانی که link خالی است، هر سرویس می‌تواند بیشتر از مقدار تضمینی استفاده کند.


سناریو 5: ترکیب Priority + Bandwidth + Policing

هدف

پیکربندی یک QoS Policy کامل با چندین کلاس و مکانیزم‌های مختلف

نیازمندی‌های شبکه

  1. VoIP (RTP): Priority با حداکثر 2Mbps

  2. Video Streaming: تضمین 10Mbps در ازدحام

  3. Web Browsing: تضمین 5Mbps در ازدحام

  4. File Download: محدود به 3Mbps (Policing)

  5. سایر ترافیک: هرچه بماند

پیکربندی کامل

n2(config)# access-list 100 permit udp any any range 16384 32767
n2(config)# class-map cmap-voip
n2(config-cmap)# match access-list 100
n2(config-cmap)# exit
n2(config)#
n2(config)# access-list 101 permit tcp any any eq 1935
n2(config)# access-list 101 permit tcp any any eq 554
n2(config)# access-list 101 permit udp any any eq 554
n2(config)# class-map cmap-video
n2(config-cmap)# match access-list 101
n2(config-cmap)# exit
n2(config)#
n2(config)# class-map cmap-web
n2(config-cmap)# match protocol http
n2(config-cmap)# match protocol https
n2(config-cmap)# exit
n2(config)#
n2(config)# class-map cmap-download
n2(config-cmap)# match protocol ftp-data
n2(config-cmap)# exit
n2(config)#
n2(config)# class-map cmap-default
n2(config-cmap)# match any
n2(config-cmap)# exit
n2(config)#
n2(config)# policy-map pmap-complete-qos
n2(config-pmap)# class cmap-voip
n2(config-pmap-c)# priority 2M
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-video
n2(config-pmap-c)# bandwidth 10M
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-web
n2(config-pmap-c)# bandwidth 5M
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-download
n2(config-pmap-c)# police 3M conform-action transmit exceed-action drop
n2(config-pmap-c)# exit
n2(config-pmap)# class cmap-default
n2(config-pmap-c)# bandwidth 1M
n2(config-pmap-c)# exit
n2(config-pmap)# exit
n2(config)#
n2(config)# interface ge0
n2(config-if)# service-policy pmap-complete-qos out
n2(config-if)# exit
n2(config)# write

تست Policy کامل

n2# show policy-map interface ge0
Interface ge0
  Service-policy output: pmap-complete-qos

    Class-map: cmap-voip
      Priority: 2000000 bps
      Packets: 12345, Bytes: 1234567
      Dropped: 0
      
    Class-map: cmap-video
      Bandwidth: 10000000 bps
      Packets: 45678, Bytes: 45678901
      Dropped: 123
      
    Class-map: cmap-web
      Bandwidth: 5000000 bps
      Packets: 78901, Bytes: 78901234
      Dropped: 456
      
    Class-map: cmap-download
      Police: 3000000 bps
      Conform: 23456 packets
      Exceed: 789 packets (dropped)
      
    Class-map: cmap-default
      Bandwidth: 1000000 bps
      Packets: 9876, Bytes: 9876543
      Dropped: 234
n2#

Matching در class-map

Match بر اساس Protocol

n2(config)# class-map cmap-protocols
n2(config-cmap)# match protocol http
n2(config-cmap)# match protocol ftp
n2(config-cmap)# match protocol ssh
n2(config-cmap)# match protocol icmp
n2(config-cmap)# exit

پروتکل‌های پشتیبانی شده در Soodar:

  • http, https

  • ftp, ftp-data

  • ssh, telnet

  • dns, dhcp

  • icmp, tcp, udp

  • rdp, rsvp

نکته مهم

برای پروتکل‌هایی که در لیست بالا نیستند (مثل RTP، RTSP، YouTube)، باید از Access-List برای match کردن استفاده کنید.

Match بر اساس IP Address

n2(config)# class-map cmap-by-ip
n2(config-cmap)# match source-address 192.168.1.0/24
n2(config-cmap)# match destination-address 10.0.0.0/8
n2(config-cmap)# exit

Match بر اساس Access-List

n2(config)# access-list 110 permit tcp any any eq 8080
n2(config)# access-list 110 permit udp any any range 5000 6000
n2(config)# class-map cmap-by-acl
n2(config-cmap)# match access-list 110
n2(config-cmap)# exit

Match بر اساس DSCP/ToS

n2(config)# class-map cmap-by-dscp
n2(config-cmap)# match ip dscp ef
n2(config-cmap)# match ip dscp af41
n2(config-cmap)# exit

DSCP values:

  • ef (Expedited Forwarding): 46 - برای VoIP

  • af41 (Assured Forwarding): 34 - برای Video

  • cs0 - cs7 (Class Selector): 0, 8, 16, 24, 32, 40, 48, 56

Match Any (default class)

n2(config)# class-map cmap-all
n2(config-cmap)# match any
n2(config-cmap)# exit

عیب‌یابی QoS

مشکل 1: QoS کار نمی‌کند

بررسی 1: آیا Policy روی Interface اعمال شده؟

n2# show running-config interface ge0
interface ge0
 ip address 192.168.1.1/24
 service-policy pmap-complete-qos out  ← باید این خط باشد
!
n2#

بررسی 2: آیا ترافیک در class-map match می‌شود؟

n2# show policy-map interface ge0
Interface ge0
  Service-policy output: pmap-complete-qos
    Class-map: cmap-web
      Packets: 0, Bytes: 0  ← صفر = ترافیک match نمی‌شود! ❌
n2#

اگر Packets صفر است، یعنی ترافیک شما در class-map match نمی‌شود.

راه‌حل: class-map را بررسی کنید:

n2# show class-map cmap-web
Class Map match-all cmap-web (id 2)
  Match protocol http
  Match protocol https

بررسی 3: آیا Direction صحیح است؟

  • in: ترافیک ورودی به interface

  • out: ترافیک خروجی از interface

[Client] ---IN---> [Interface ge0] ---OUT---> [Server]

برای محدود کردن download client → استفاده از out روی interface سمت client

مشکل 2: Priority Queue تمام Bandwidth را مصرف می‌کند

n2# show policy-map interface ge0
Class-map: cmap-voip
  Priority: 50000000 bps  ← 50Mbps خیلی زیاد! ❌
  Packets: 123456789

علت: مقدار Priority خیلی زیاد تنظیم شده

راه‌حل: Priority را به کمتر از 33% interface bandwidth محدود کنید:

n2(config)# policy-map pmap-voip-priority
n2(config-pmap)# class cmap-voip
n2(config-pmap-c)# priority 10M  ← کاهش به 10M
n2(config-pmap-c)# exit

مشکل 3: Dropped Packets زیاد

n2# show policy-map interface ge0
Class-map: cmap-download
  Police: 3000000 bps
  Conform: 12345 packets
  Exceed: 98765 packets (dropped)  ← خیلی زیاد! ❌

علت: Policing خیلی محدود است یا ترافیک burst دارد

راه‌حل 1: Policing را کمی افزایش دهید

n2(config-pmap-c)# police 5M conform-action transmit exceed-action drop

راه‌حل 2: به جای Policing از Shaping استفاده کنید

n2(config-pmap-c)# no police 3M
n2(config-pmap-c)# shape average 5M

مشکل 4: Bandwidth Allocation کار نمی‌کند

n2# show policy-map interface ge0
Class-map: cmap-video
  Bandwidth: 10000000 bps
  Packets: 12345
  Dropped: 0  ← هیچ Packet drop نشده

علت: Bandwidth allocation فقط در زمان ازدحام فعال می‌شود!

بررسی: Interface پر است؟

n2# show interface ge0
ge0 is up, line protocol is up
  ...
  5 minute input rate 98765432 bits/sec  ← نزدیک به bandwidth interface
  5 minute output rate 95432198 bits/sec  ← ازدحام وجود دارد ✅

اگر interface خالی است، bandwidth allocation فعال نمی‌شود.


Debugging QoS

فعال‌سازی QoS Debug

n2# debug qos event
QoS event debugging is on
n2#

خروجی نمونه:

n2# debug qos event
*Oct 10 12:34:56.789: QoS: Policy pmap-complete-qos attached to ge0 output
*Oct 10 12:34:57.123: QoS: Class cmap-voip matched, action: priority 2M
*Oct 10 12:34:58.456: QoS: Class cmap-download, police exceed, packet dropped
n2#

غیرفعال کردن Debug

n2# no debug qos event
n2# no debug all

دستورات مفید QoS

نمایش پیکربندی

دستور

توضیح

show class-map

نمایش تمام class-map ها

show class-map <name>

نمایش یک class-map خاص

show policy-map

نمایش تمام policy-map ها

show policy-map <name>

نمایش یک policy-map خاص

show policy-map interface <if>

نمایش statistics QoS روی interface

show running-config | include class-map

نمایش پیکربندی class-map

show running-config | include policy-map

نمایش پیکربندی policy-map

پیکربندی class-map

دستور

توضیح

class-map <name>

ایجاد class-map

class-map match-all <name>

Match تمام شرایط (AND)

class-map match-any <name>

Match هر شرط (OR)

match protocol <proto>

Match بر اساس protocol

match source-address <ip/mask>

Match بر اساس source IP

match destination-address <ip/mask>

Match بر اساس destination IP

match access-list <acl>

Match بر اساس ACL

match any

Match همه ترافیک

پیکربندی policy-map

دستور

توضیح

policy-map <name>

ایجاد policy-map

class <class-name>

اضافه کردن class به policy

police <rate> conform-action <act> exceed-action <act>

Traffic policing

shape average <rate>

Traffic shaping

priority <rate>

Priority queuing با مقدار ثابت

priority percent <percent>

Priority queuing با درصد

bandwidth <rate>

Bandwidth allocation با مقدار ثابت

bandwidth percent <percent>

Bandwidth allocation با درصد

اعمال Policy

دستور

توضیح

service-policy <name> in

اعمال policy روی ترافیک ورودی

service-policy <name> out

اعمال policy روی ترافیک خروجی

no service-policy <name> in

حذف policy از ورودی

no service-policy <name> out

حذف policy از خروجی

حذف

دستور

توضیح

no class-map <name>

حذف class-map

no policy-map <name>

حذف policy-map


بهترین شیوه‌ها (Best Practices)

1. نام‌گذاری معنادار

✅ class-map cmap-voip-rtp
✅ class-map cmap-web-browsing
✅ policy-map pmap-wan-qos
❌ class-map class1
❌ policy-map pmap

2. استفاده از Match-All برای دقت بیشتر

n2(config)# class-map match-all cmap-specific
n2(config-cmap)# match source-address 192.168.1.0/24
n2(config-cmap)# match protocol http
n2(config-cmap)# exit
# فقط HTTP از 192.168.1.0/24

3. محدود کردن Priority Queue

n2(config-pmap-c)# priority 2M  ← کمتر از 33% interface BW

Priority بیش از حد = Starvation سایر ترافیک‌ها ❌

4. استفاده از Class-Default

همیشه یک class برای ترافیک‌های match نشده داشته باشید:

n2(config)# class-map cmap-default
n2(config-cmap)# match any
n2(config-cmap)# exit
n2(config)# policy-map pmap-qos
n2(config-pmap)# ...
n2(config-pmap)# class cmap-default
n2(config-pmap-c)# bandwidth 1M
n2(config-pmap-c)# exit

5. تست QoS قبل از Production

# استفاده از iperf برای تست
server$ iperf3 -s
client$ iperf3 -c server-ip -b 10M -t 60

6. مانیتورینگ مداوم

n2# show policy-map interface ge0
# بررسی Dropped packets
# بررسی Match counts

7. استفاده از نام‌های واضح

از نام‌های معنادار برای class-map و policy-map استفاده کنید تا پیکربندی قابل فهم‌تر باشد.


مثال پیکربندی کامل

شبکه سازمانی با QoS کامل

# ========== Access-Lists ==========
n2(config)# access-list 100 permit udp any any range 16384 32767

n2(config)# access-list 101 permit tcp any any eq 1935
n2(config)# access-list 101 permit tcp any any eq 554
n2(config)# access-list 101 permit udp any any eq 554

# ========== class-map ها ==========
n2(config)# class-map cmap-voip
n2(config-cmap)# match access-list 100
n2(config-cmap)# exit

n2(config)# class-map cmap-video
n2(config-cmap)# match access-list 101
n2(config-cmap)# exit

n2(config)# class-map match-any cmap-web
n2(config-cmap)# match protocol http
n2(config-cmap)# match protocol https
n2(config-cmap)# exit

n2(config)# class-map match-all cmap-bulk
n2(config-cmap)# match protocol ftp-data
n2(config-cmap)# exit

n2(config)# class-map cmap-default
n2(config-cmap)# match any
n2(config-cmap)# exit

# ========== policy-map ==========
n2(config)# policy-map pmap-enterprise-qos
n2(config-pmap)# 
n2(config-pmap)# class cmap-voip
n2(config-pmap-c)# priority 2M
n2(config-pmap-c)# exit
n2(config-pmap)# 
n2(config-pmap)# class cmap-video
n2(config-pmap-c)# bandwidth 15M
n2(config-pmap-c)# exit
n2(config-pmap)# 
n2(config-pmap)# class cmap-web
n2(config-pmap-c)# bandwidth 10M
n2(config-pmap-c)# exit
n2(config-pmap)# 
n2(config-pmap)# class cmap-bulk
n2(config-pmap-c)# police 5M conform-action transmit exceed-action drop
n2(config-pmap-c)# exit
n2(config-pmap)# 
n2(config-pmap)# class cmap-default
n2(config-pmap-c)# bandwidth 1M
n2(config-pmap-c)# exit
n2(config-pmap)# exit

# ========== اعمال روی Interface ==========
n2(config)# interface ge0
n2(config-if)# service-policy pmap-enterprise-qos out
n2(config-if)# exit
n2(config)# write
Building configuration...
[OK]

بررسی نهایی

n2# show policy-map pmap-enterprise-qos
Policy Map pmap-enterprise-qos
  Class cmap-voip
    Priority: 2000000 bps, burst 50000 bytes
  Class cmap-video
    Bandwidth: 15000000 bps
  Class cmap-web
    Bandwidth: 10000000 bps
  Class cmap-bulk
    Police CIR 5000000 (bps) CB 1250000 (byte) EB 1750000 (byte)
    Conform Action: Transmit
    Exceed Action: Drop
  Class cmap-default
    Bandwidth: 1000000 bps
n2#

خلاصه

QoS ابزار قدرتمندی برای مدیریت ترافیک شبکه است. با استفاده صحیح از class-map، policy-map، و انواع مکانیزم‌ها می‌توانید:

✅ اولویت‌بندی کنید: VoIP و Video همیشه کیفیت خوب دارند ✅ تضمین کنید: سرویس‌های مهم bandwidth لازم را دارند ✅ محدود کنید: کاربران خاص نمی‌توانند تمام bandwidth را مصرف کنند ✅ کنترل کنید: ترافیک burst smooth می‌شود

نکات کلیدی:

  • از Priority فقط برای Real-time traffic استفاده کنید

  • Bandwidth allocation در ازدحام فعال می‌شود

  • Policing = Drop, Shaping = Queue

  • همیشه class-default داشته باشید

  • QoS را تست و مانیتور کنید