For some time now, the design of architectures for providing dependable Quality of Service (QoS) on multimedia networks has been a busy topic in academia and industry. In this work we look at practical aspects of Quality of Service, and in particular at resource reservation for the Internet. Initially, our focus was on ATM, which looked like the most promising QoS technology at the time. We proposed, implemented, and demonstrated Arequipa, a mechanism that uses ATM to provide QoS for TCP/IP, and which only requires end-to-end connectivity, but no changes in the ATM network. While ATM still has its place, the Differentiated Services architecture, which returns to the paradigm of packet-oriented processing in the network, is nowadays a more likely candidate for providing a basis for supporting dependable Quality of Service in the Internet. We therefore concentrated on Differentiated Services when looking for solutions to overcome some of the problems we found in the reservation models in Arequipa and the underlying ATM. Our work culminates in the development of SRP, the ``Scalable resource Reservation Protocol``, a highly scalable yet conceptually simple reservation protocol for TCP/IP. SRP achieves scalability by aggregating flows in the network, and by controlling flow admission by making simple per-packet decisions, which are based on estimates of the bandwidth available for reservation. We give a detailed description of the SRP architecture, including examples of estimation algorithms and an introduction to a novel approach for scalable policing. We describe how we integrated SRP in the ns simulator, and show simulation results. Finally, we have implemented SRP on top of Differentiated Services on Linux, and again we describe the implementation and give measurement results. We also discuss some of the infrastructure-building activities that have resulted from our work, namely the ATM on Linux project, documentation of Linux traffic control, and the Diffserv on Linux project.