Quality of Service (QoS)¶
QoS controls which traffic gets priority when a link is congested — it doesn't add bandwidth, it decides who waits when there isn't enough to go around. Relevant any time voice, video, or streaming traffic shares a network with bulk data (file transfers, backups) that doesn't care about latency.
Why It Matters¶
A saturated uplink with no QoS treats a large file copy and a live audio feed identically — both get queued and dropped on the same terms. QoS lets you say "voice and video packets go first, everything else waits," so a background download doesn't cause audible dropouts in a live feed.
Classification & Marking¶
Traffic is tagged with a priority value so every device along the path can make the same prioritization decision without re-inspecting the traffic itself:
- CoS (Class of Service) — Layer 2, 3-bit value in the 802.1Q tag, only meaningful on trunk links
- DSCP (Differentiated Services Code Point) — Layer 3, 6-bit value in the IP header, survives routing (unlike CoS) — the more commonly used marking today
Common DSCP values: EF (Expedited Forwarding — voice), AF41 (video), default/0 (best-effort, everything unmarked). For the values Dante hardware actually marks (and the queue-map catch for its PTP clocking), see Dante & sACN on the Network.
Basic Configuration¶
Enable QoS globally first (required on many Catalyst platforms before any policy takes effect):
Cisco IOS — global configuration mode (conf t):
mls qos
Warning: the moment mls qos is enabled, every port defaults to untrusted and the switch rewrites incoming DSCP/CoS to 0 until trust is configured. Apply mls qos trust dscp to every port carrying markings you care about (Dante devices, VoIP phones, links to other switches) in the same config session — enabling QoS alone on a live network strips markings instead of protecting them.
Then trust markings on the uplink and enable the strict-priority egress queue:
Cisco IOS — global configuration mode (conf t):
interface Gi0/48
mls qos trust dscp
priority-queue out
priority-queue out turns egress queue 1 into a strict-priority (expedite) queue that is serviced until empty before the other queues. With the default queue maps, DSCP 40–47 (which includes EF) and CoS 5 already map to queue 1, so marked voice traffic goes first with no further mapping. Optionally weight the remaining queues with srr-queue bandwidth share <w1> <w2> <w3> <w4> (the first weight is ignored while the expedite queue is enabled).
Note: on 3560/2960-family switches (including the 3560-CX on 15.2E), class-map/policy-map is ingress-only and class actions are limited to trust, set, and police — service-policy output, priority percent, and fair-queue are router MQC features and are rejected on these switches.
Trusting or Re-Marking at the Edge¶
Whether to trust markings from a connected device or re-mark them yourself depends on whether you control that device:
Cisco IOS — global configuration mode (conf t):
! Trust markings from a known device (e.g. a VoIP phone)
interface Gi0/1
mls qos trust dscp
Don't blindly trust markings on ports facing untrusted devices/guests — anything can mark its own traffic as high-priority if nothing stops it, defeating the point of QoS entirely.
Verification¶
Cisco IOS — privileged EXEC:
! Confirm QoS state and trust setting on an interface
show mls qos interface Gi0/48
! Confirm the expedite queue is enabled and see SRR weights
show mls qos interface Gi0/48 queueing
! Per-DSCP/CoS packet counts, per-queue enqueue/drop counts, and per-policer counts
show mls qos interface Gi0/48 statistics
! List defined classification criteria
show class-map
Related¶
- Dante & sACN on the Network — Dante/sACN DSCP markings and queue mapping
- Security Hardening — ACLs, which classification can also key off of
- Performance Troubleshooting