A distributed system is driven by separate components that are executed in parallel, and protocols for such systems form a major aspect of system design in todays world of wireless and mobile networking. Process algebras are languages for the description of elementary parallel systems and are used to study the behavioural properties of distributed systems, but they often lack the ability to handle data. This textbook guides students through algebraic specification and verification of distributed systems, and some of the most prominent formal verification techniques. The author employs µCRL as the vehicle, a language developed to combine process algebra and abstract data types. Chapters 2 and 3 explain the basics of abstract data types and process algebra, and guide the reader through the syntax and semantics of µCRL; Chap. 4 examines abstraction from internal behaviour; Chap. 5 covers specifications of standard protocols; Chap. 6 shows how to transform protocol specifications into labelled transition systems; Chap. 7 explains algorithms on labelled transition systems; and Chap. 8 presents symbolic verification techniques; finally, the Appendix gives a brief overview of the µCRL toolset. The book evolved from introductory courses on protocol verification taught to undergraduate and graduate students of computer science, and the text is supported throughout with examples and exercises; full solutions are provided in an appendix, while exercise sheets, lab exercises, example specifications and lecturer slides will be available on the author's website. Researchers in the field can use the book as a broad overview of the state of the art in algebraic specification and verification of distributed systems on the basis of a modern verification tool.