English · Ελληνικά
Η φωνή είναι μικροσκοπική αλλά ανελέητη: 100 kbps RTP που γίνονται σκουπίδια τη στιγμή που περιμένουν πίσω από το upload αρχείου κάποιου. Το QoS δίνει σε αυτά τα πακέτα γρήγορη λωρίδα — σήμανέ τα στο τηλέφωνο, εμπιστεύσου τη σήμανση, και βάλε τη φωνή σε μια strict-priority ουρά ώστε οι κλήσεις να μένουν κρυστάλλινα καθαρές ακόμα και όταν το link είναι γεμάτο.
Μια κλήση 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
Η κεφαλίδα 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 στο μηδέν.
# Ενεργοποίησε το 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 όταν δεν μπορείς να εμπιστευτείς την πηγή.
# Προτιμώμενο: ταίριασε το 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
Αυτή είναι η καρδιά του QoS φωνής. Μια Low-Latency Queue εξυπηρετεί τη φωνή πριν από όλα τα υπόλοιπα, κάθε φορά — αλλά με ένα όριο bandwidth (ενσωματωμένος policer) ώστε μια πλημμύρα φωνής να μην μπορεί να λιμοκτονήσει το link. Όλα τα υπόλοιπα μοιράζονται ό,τι μένει με βάρος.
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
Η ουρά priority είναι αυστηρή — θα λιμοκτονήσει ευχαρίστως τα υπόλοιπα αν την αφήσεις. Ο εμπειρικός κανόνας είναι να βάλεις όριο στη φωνή όχι περισσότερο από το ένα τρίτο του link (20–33%), μετρημένο στον πραγματικό αριθμό κλήσεών σου: περίπου 100 kbps ανά κλήση G.711 συν overhead. Η υπερπρομήθεια της class priority σημαίνει ότι μια έκρηξη φωνής (ή οτιδήποτε λάθος-σημαδεμένο ως EF) μπορεί να πνίξει δεδομένα και ακόμα και keepalives δρομολόγησης. Ο policer ενσωματωμένος στο priority προστατεύει το υπόλοιπο του link — αλλά μόνο αν το ρυθμίσεις λογικά.
Το 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 ρίχνει οτιδήποτε (δεν πρέπει ποτέ).
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
Το post μας για QoS σε MikroTik λύνει το πανομοιότυπο πρόβλημα με queue trees και mangle marks. Οι τιμές DSCP είναι universal· μόνο η μηχανή queuing διαφέρει.
| MikroTik / RouterOS | Cisco IOS |
|---|---|
| mangle mark-packet by port/DSCP | class-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 |
Συμπερασματα
priority εξυπηρετεί τη φωνή αυστηρά πρώτη, με ενσωματωμένο policer ώστε να μην μπορεί να λιμοκτονήσει το link. Βάλε όριο ~20–33%, μετρημένο στον πραγματικό αριθμό κλήσεων.shape average στον πραγματικό συμβατικό σου ρυθμό.show policy-map interface — η φωνή "exceed drops: 0" ενώ τα δεδομένα ρίχνονται κατά τη συμφόρηση είναι το QoS να δουλεύει ακριβώς όπως σχεδιάστηκε.Η φωνή και ένας guest που κατεβάζει μια ταινία δεν μοιράζονται καλά ένα link χωρίς βοήθεια. Σχεδιάζω QoS με σωστή σήμανση, όρια εμπιστοσύνης στην άκρη, και priority queuing συντονισμένο στον πραγματικό όγκο κλήσεών σου — όχι ένα γενικό template.
Κλεισε μια Discovery Call →