Πίσω στο blog

English  ·  Ελληνικά

Cisco / IOS  ·  Tutorial  ·  Ιουλιος 2026

Cisco IOS
QoS για VoIP

Η φωνή είναι μικροσκοπική αλλά ανελέητη: 100 kbps RTP που γίνονται σκουπίδια τη στιγμή που περιμένουν πίσω από το upload αρχείου κάποιου. Το QoS δίνει σε αυτά τα πακέτα γρήγορη λωρίδα — σήμανέ τα στο τηλέφωνο, εμπιστεύσου τη σήμανση, και βάλε τη φωνή σε μια strict-priority ουρά ώστε οι κλήσεις να μένουν κρυστάλλινα καθαρές ακόμα και όταν το link είναι γεμάτο.

Cisco IOS QoS VoIP DSCP LLQ MQC CCNP

CLASSIFY → QUEUE → SCHEDULE (εξω απο το WAN) voice RTP · EF signaling · CS3 web / bulk · default PRIORITY (LLQ) — εξυπηρετειται πρωτο signaling — bandwidth 5% default — τα υπολοιπα link WAN (κορεσμένο) Το QoS έχει σημασία μόνο όταν το link είναι ΓΕΜΑΤΟ — τότε ο scheduler αποφασίζει ποιος περιμένει. Η φωνή ποτέ.

Μια κλήση VoIP είναι περίπου 80–100 kbps από μικρά πακέτα UDP/RTP, και δεν έχει καμία ανοχή σε καθυστέρηση ή απώλεια: 150 ms latency ή 1% απώλεια και οι καλούντες αρχίζουν να μιλάνε ο ένας πάνω στον άλλο. Ο δολοφόνος δεν είναι η bandwidth — μια κλήση είναι μικροσκοπική — είναι η καθυστέρηση ουράς. Όταν το link γεμίζει (κάποιος κάνει upload στο cloud, ξεκινάει ένα backup), τα πακέτα φωνής κάθονται στην ίδια ουρά FIFO πίσω από μεγάλα πακέτα δεδομένων, και η κλήση κομπιάζει. Το QoS είναι η διόρθωση: αναγνώρισε τη φωνή, και άφησέ την να προσπεράσει την ουρά.

Τρεις κινήσεις το κάνουν αυτό. Ταξινόμηση & σήμανση — σημάδεψε τα πακέτα φωνής με DSCP EF (Expedited Forwarding) ώστε κάθε συσκευή να τα αναγνωρίζει. Εμπιστεύσου το όριο — άφησε το τηλέφωνο IP να σημαδεύει, και το switch να εμπιστεύεται αυτή τη σήμανση αντί να την ξανα-ελέγχει. Βάλε ουρά με priority — μια Low-Latency Queue (LLQ) που εξυπηρετεί τη φωνή αυστηρά πρώτη, με έναν policer ώστε να μην μπορεί να λιμοκτονήσει τα υπόλοιπα. Όλο αυτό χτίζεται με το ίδιο Modular QoS CLI (MQC) — class-maps και policy-maps — που γνώρισες στο post του firewall. Αυτό καθρεφτίζει το writeup μας για QoS σε MikroTik· οι έννοιες είναι ίδιες.

Προαπαιτουμενα

01

Σημανση — Μιλα DSCP

Η κεφαλίδα IP κάθε πακέτου έχει ένα πεδίο DSCP. Η κίνηση bearer φωνής παίρνει EF, το signaling κλήσης παίρνει CS3. Σήμανε μία φορά, κοντά στην άκρη, και κάθε συσκευή downstream μπορεί να ενεργήσει πάνω σε αυτό χωρίς να ξανα-ελέγξει.

ΚινησηDSCPΓιατι
Bearer φωνής (RTP)EF (46)Ο ίδιος ο ήχος — strict priority, χαμηλότερο latency.
Signaling κλήσης (SIP/SCCP)CS3 (24)Στήνει/κλείνει κλήσεις — σημαντικό αλλά όχι κρίσιμο σε latency.
Όλα τα υπόλοιπαDefault (0)Best effort — web, email, μεταφορές αρχείων.
💡 Σημανε στην Ακρη, Ενεργησε στον Πυρηνα

Ο χρυσός κανόνας του QoS: ταξινόμησε και σήμανε όσο πιο κοντά στην πηγή γίνεται, μετά εμπιστεύσου εκείνη τη σήμανση παντού αλλού. Το ξανα-ταξινόμημα σε στυλ deep-packet σε κάθε hop είναι ακριβό και εύθραυστο· ένα συνεπές σετ DSCP που μπαίνει μία φορά στην άκρη πρόσβασης αφήνει κάθε switch και router downstream να πάρει μια φτηνή, ακαριαία απόφαση. Αυτό δουλεύει μόνο αν ελέγχεις επίσης ποιος επιτρέπεται να βάζει σημάνσεις — που είναι το όριο εμπιστοσύνης, αμέσως μετά.

02

Το Οριο Εμπιστοσυνης

Ένα τηλέφωνο IP Cisco σημαδεύει το δικό του RTP ως EF — αλλά ένα συνδεδεμένο PC θα μπορούσε να σημαδέψει το παιχνίδι ή το torrent του EF επίσης και να κλέψει τη λωρίδα προτεραιότητας. Το switch αποφασίζει ποιες σημάνσεις να πιστέψει. Εμπιστεύσου το τηλέφωνο· ξανασήμανε το PC στο μηδέν.

IOS (access switch) — εμπιστεψου το τηλεφωνο, μην εμπιστευεσαι το PC απο πισω
# Ενεργοποίησε το QoS global (κλειστό by default σε πολλά Catalyst)
SW1(config)# mls qos

SW1(config)# interface GigabitEthernet0/5
SW1(config-if)# switchport access vlan 10       # VLAN δεδομένων (το PC)
SW1(config-if)# switchport voice vlan 110       # VLAN φωνής (το τηλέφωνο)

# Εμπιστεύσου το DSCP που βάζει το τηλέφωνο — αλλά μόνο μέσω του τηλεφώνου (επιβεβαιωμένο με CDP):
SW1(config-if)# mls qos trust device cisco-phone
SW1(config-if)# mls qos trust dscp
# Το PC κρέμεται από τη θύρα switch του τηλεφώνου· το τηλέφωνο ΞΑΝΑΣΗΜΑΔΕΥΕΙ την κίνηση
# του PC σε DSCP 0, οπότε ένα PC δεν μπορεί να πλαστογραφήσει EF και να προσπεράσει την ουρά φωνής.
⚠ Παγιδα — Μια Μη Εμπιστη Θυρα Σβηνει τις Σημανσεις σου

Με το mls qos ενεργό global, οι θύρες by default είναι untrusted — ξαναγράφουν το εισερχόμενο DSCP σε 0. Οπότε η ενεργοποίηση του QoS χωρίς να ρυθμίσεις trust μπορεί να κάνει τη φωνή χειρότερη: το τηλέφωνο σημαδεύει EF, το switch το σβήνει σε 0, και το LLQ downstream δεν ταιριάζει ποτέ. Είτε επέκτεινε το όριο εμπιστοσύνης σωστά (εμπιστεύσου το τηλέφωνο στην άκρη) είτε ξανασήμανε τη φωνή ρητά μόνος σου με μια πολιτική. Επαλήθευσε με show mls qos interface gi0/5 — σου λέει την κατάσταση εμπιστοσύνης και αν επιβιώνουν οι σημάνσεις.

03

Ταξινομηση — Ταιριασε τη Φωνη

Στον router που θα κάνει ουρά, όρισε classes που ταιριάζουν τις τιμές DSCP που έχει ήδη βάλει η άκρη. Το ταίριασμα μιας έμπιστης σήμανσης είναι φθηνό· το ταίριασμα με ACL/port είναι το fallback όταν δεν μπορείς να εμπιστευτείς την πηγή.

IOS (WAN router) — classes για φωνη και signaling
# Προτιμώμενο: ταίριασε το DSCP που έχει ήδη σημαδέψει η άκρη
R1(config)# class-map match-all VOICE
R1(config-cmap)# match dscp ef
R1(config-cmap)# exit
R1(config)# class-map match-any SIGNALING
R1(config-cmap)# match dscp cs3
R1(config-cmap)# match dscp af31
R1(config-cmap)# exit

# Fallback αν πρέπει να ταξινομήσεις με port αντί να εμπιστευτείς μια σήμανση:
#   match ip rtp 16384 16383   ← το τυπικό εύρος θυρών UDP για RTP

04

LLQ — Η Ουρα Αυστηρης Προτεραιοτητας

Αυτή είναι η καρδιά του QoS φωνής. Μια Low-Latency Queue εξυπηρετεί τη φωνή πριν από όλα τα υπόλοιπα, κάθε φορά — αλλά με ένα όριο bandwidth (ενσωματωμένος policer) ώστε μια πλημμύρα φωνής να μην μπορεί να λιμοκτονήσει το link. Όλα τα υπόλοιπα μοιράζονται ό,τι μένει με βάρος.

IOS — το policy-map: priority για φωνη, bandwidth για τα υπολοιπα
R1(config)# policy-map WAN-QOS
R1(config-pmap)# class VOICE
R1(config-pmap-c)# priority percent 20     # LLQ: strict priority, με όριο 20%
R1(config-pmap-c)# exit
R1(config-pmap)# class SIGNALING
R1(config-pmap-c)# bandwidth percent 5      # εγγυημένο 5%, όχι strict-priority
R1(config-pmap-c)# exit
R1(config-pmap)# class class-default
R1(config-pmap-c)# fair-queue            # όλοι οι υπόλοιποι μοιράζονται δίκαια
R1(config-pmap-c)# random-detect dscp-based # WRED: πέτα νωρίς, απόφυγε το TCP sync
R1(config-pmap-c)# end

# Πρόσδεσέ το OUTBOUND στο interface WAN — το QoS ενεργεί σε συμφόρηση egress
R1(config)# interface GigabitEthernet0/0
R1(config-if)# service-policy output WAN-QOS
R1(config-if)# end
⚠ Παγιδα — Μη Δωσεις στη Φωνη Περισσοτερο απο ~33% του Link

Η ουρά priority είναι αυστηρή — θα λιμοκτονήσει ευχαρίστως τα υπόλοιπα αν την αφήσεις. Ο εμπειρικός κανόνας είναι να βάλεις όριο στη φωνή όχι περισσότερο από το ένα τρίτο του link (20–33%), μετρημένο στον πραγματικό αριθμό κλήσεών σου: περίπου 100 kbps ανά κλήση G.711 συν overhead. Η υπερπρομήθεια της class priority σημαίνει ότι μια έκρηξη φωνής (ή οτιδήποτε λάθος-σημαδεμένο ως EF) μπορεί να πνίξει δεδομένα και ακόμα και keepalives δρομολόγησης. Ο policer ενσωματωμένος στο priority προστατεύει το υπόλοιπο του link — αλλά μόνο αν το ρυθμίσεις λογικά.

💡 Σε Αργα Links, Καν' το Shape Πρωτα

Το QoS ενεργοποιείται μόνο όταν γεμίσει η ουρά του interface. Σε ένα WAN κάτω από το line-rate (μια υπηρεσία 50/10 Mbps πάνω σε handoff GigE), το φυσικό interface του router δεν φαίνεται ποτέ «γεμάτο», οπότε η ουρά δεν σχηματίζεται ποτέ και η πολιτική σου δεν ενεργοποιείται ποτέ — ο ISP ρίχνει τα πακέτα σου αντ' αυτού, χωρίς QoS. Η διόρθωση είναι ένας γονικός shaper: shape average στον πραγματικό συμβατικό ρυθμό σου σε μια εξωτερική πολιτική, με το WAN-QOS φωλιασμένο μέσα της. Αυτή η ιεραρχική πολιτική (parent-shape, child-queue) είναι το πώς γίνεται το QoS σχεδόν σε κάθε πραγματικό κύκλωμα internet — αξίζει δική της εμβάθυνση.

05

Επαληθευσε υπο Φορτιο Ασφαλες να το Τρεξεις

Το QoS είναι αόρατο μέχρι να είναι απασχολημένο το link. Η μία εντολή που μετράει δείχνει μετρητές πακέτων ανά class, drops, και — κρίσιμο — αν η ουρά priority ρίχνει οτιδήποτε (δεν πρέπει ποτέ).

IOS — διαβασε τους μετρητες πολιτικης κατα τη συμφορηση
R1# show policy-map interface GigabitEthernet0/0
 Class-map: VOICE (match-all)
   2841000 packets
   Priority: 20% (2000 kbps), burst 50000, b/w exceed drops: 0
                                              ↑ ΠΡΕΠΕΙ να είναι 0 — η φωνή ποτέ δεν ρίχνεται

 Class-map: SIGNALING (match-any)
   14200 packets   bandwidth 5% (500 kbps)

 Class-map: class-default
   8100000 packets
   queue limit 64 packets
   (drops) 24710                        ← τα δεδομένα ρίχνονται υπό φόρτο: ΑΝΑΜΕΝΟΜΕΝΟ & εντάξει

# Όλο το νόημα σε μία οθόνη: η φωνή "exceed drops: 0" ενώ τα δεδομένα ρίχνονται
# κατά τη συμφόρηση. Αυτό είναι το QoS να δουλεύει — περιμένει η σωστή κίνηση.
ΕντοληΑπανταει
show policy-map interface g0/0Μετρητές και drops ανά class — η εντολή που μετράει. Τα drops φωνής πρέπει να είναι 0.
show mls qos interface g0/5Κατάσταση εμπιστοσύνης στο switch — επιβιώνουν οι σημάνσεις του τηλεφώνου;
show policy-map WAN-QOSΗ ρυθμισμένη πολιτική, όπως ερμηνεύτηκε.
show class-mapΤι ταιριάζει κάθε class.

06

MikroTik ↔ Cisco — Ιδιες Προτεραιοτητες

Το post μας για QoS σε MikroTik λύνει το πανομοιότυπο πρόβλημα με queue trees και mangle marks. Οι τιμές DSCP είναι universal· μόνο η μηχανή queuing διαφέρει.

MikroTik / RouterOSCisco IOS
mangle mark-packet by port/DSCPclass-map match dscp / match ip rtp
Set DSCP σε mangle (change-dscp)set dscp ef σε policy-map
Queue tree, priority=1 για φωνήLLQ priority percent 20
max-limit στην ουρά φωνήςΟ policer ενσωματωμένος στο priority
Γονική ουρά = ταχύτητα linkΓονικό shape average (HQoS)
bridge port trust για σημάνσεις τηλεφώνουmls qos trust device cisco-phone

Συμπερασματα

  1. Η φωνή αποτυγχάνει από καθυστέρηση, όχι από bandwidth. Μια κλήση είναι μικροσκοπική· ο εχθρός είναι η καθυστέρηση ουράς όταν γεμίζει το link. Το QoS έχει σημασία μόνο κατά τη συμφόρηση — αποφασίζει ποιος περιμένει, και η φωνή ποτέ δεν πρέπει.
  2. Σήμανε μία φορά στην άκρη, ενέργησε παντού. Bearer φωνής = DSCP EF, signaling = CS3. Συνεπείς σημάνσεις αφήνουν κάθε συσκευή downstream να πάρει μια φτηνή, ακαριαία απόφαση.
  3. Το όριο εμπιστοσύνης είναι η ασφάλεια του QoS. Εμπιστεύσου τις σημάνσεις του τηλεφώνου, ξανασήμανε το PC σε 0 — αλλιώς ένα torrent σημαδεμένο EF κλέβει τη λωρίδα φωνής. Μια μη έμπιστη θύρα σβήνει σιωπηλά τις σημάνσεις σε 0.
  4. Το LLQ είναι η καρδιά του. Το priority εξυπηρετεί τη φωνή αυστηρά πρώτη, με ενσωματωμένο policer ώστε να μην μπορεί να λιμοκτονήσει το link. Βάλε όριο ~20–33%, μετρημένο στον πραγματικό αριθμό κλήσεων.
  5. Πρόσδεσε την πολιτική outbound, στο συμφορημένο interface (WAN). Το QoS ενεργεί στο egress· το inbound shaping είναι διαφορετικό, πιο δύσκολο πρόβλημα.
  6. Σε κυκλώματα κάτω από το line-rate, κάν' το shape πρώτα. Αν το φυσικό interface δεν φαίνεται ποτέ γεμάτο, φώλιασε την πολιτική queuing μέσα σε ένα γονικό shape average στον πραγματικό συμβατικό σου ρυθμό.
  7. Επαλήθευσε υπό φόρτο με μία εντολή. Το show policy-map interface — η φωνή "exceed drops: 0" ενώ τα δεδομένα ρίχνονται κατά τη συμφόρηση είναι το QoS να δουλεύει ακριβώς όπως σχεδιάστηκε.

Το VoIP κοβεται οταν πιανεται δουλεια στο γραφειο στην Κρητη;

Η φωνή και ένας guest που κατεβάζει μια ταινία δεν μοιράζονται καλά ένα link χωρίς βοήθεια. Σχεδιάζω QoS με σωστή σήμανση, όρια εμπιστοσύνης στην άκρη, και priority queuing συντονισμένο στον πραγματικό όγκο κλήσεών σου — όχι ένα γενικό template.

Κλεισε μια Discovery Call →