QoS aims to provide different priority levels to different applications and data flows. It guarantees certain performance levels regarding reliability, delay, jitter and bandwidth. QoS techniques include packet scheduling, admission control, resource reservation, DiffServ, MPLS, FIFO, priority and weighted fair queuing, and traffic shaping using leaky bucket and token bucket algorithms. QoS routing selects paths to meet flow requirements while maximizing resource utilization. It can be hop-by-hop, source-based, or hierarchical.