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. 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 are available on the author's website.