This course first aims to introduce the student to the concepts, techniques and skills that are employed to design and implement a networking system or application working in a distributed manner; This means a number of processors connected by a computer network share the execution of the tasks of such an application, whereby each processor is responsible of a part of the application, and the different processors coordinate to achieve the application goals. This practical part depends on examples built with a widely-used development environment. Afterwards, given that the student has recognized the importance and the scope of the distributed networking applications through the practical part, he learns about the most important theoretical issues in such applications with regard to the traditional single-processor ones. These theoretical issues basically are synchronization, event ordering, election algorithms, mutual exclusion and distributed transactions, in addition to other relevant theoretical concepts.