Salta ai contenuti. | Salta alla navigazione

Strumenti personali


Academic year and teacher
If you can't find the course description that you're looking for in the above list, please see the following instructions >>
Versione italiana
Academic year
Didactic period
Primo Semestre

Training objectives

The aim of the course is to provide students with a clear vision of the architecture of the Internet and models and technologies for developing Web services. At the end of the course students will be able to develop distributed applications following the Client/Server model, using Unix and Java network programming tools.

Main subjects:

- Client/Server model;
- architecture of the most important Internet protocols and services;
- network programming models (socket, RPC, etc.);
- most relevant security issues in computer networks.

Students will learn to:

- identify design requirements for Internet protocols and services;
- realize distributed Client/Server applications using sockets in Unix/C and Java.


The course requires in-depth knowledge of the C and Java programming languages and of the Unix operating system. So it is assumed (but not "formally" required) that students have passed the exams of Computer Science (both “A” and “B” modules) and Operating Systems.

Course programme

The course includes 60 hours of teaching between lessons and exercises. More specifically, the course will consist of 45 hours of classroom lectures and 15 hours of exercises in the laboratory.

The topics covered during the course are:

- Introduction to computer networks and distributed systems
- Inter Process Communication for distributed applications
- The Client/Server model
- Naming and binding
- Sockets in Java and Unix - development of Client/Server applications
- Testing and debugging tools for distributed applications
- Managing heterogeneity in distributed systems
- Architectural models for Server applications
- Remote Procedure Call (RPC)
- Internet services (telnet, FTP, e-mail, etc.)
- Web systems, services, languages, and protocols
- Internet security
- Beyond the Client/Server model

Didactic methods

The course is organized as follows:
- classroom lectures on all subjects of the course;
- practical exercises in the Computer Laboratory of the Department of Engineering, in which students will learn how to design and develop simple distributed applications following the Client / Server model using Sockets in the Unix / C and Java programming environments.

Students will also have free access to the Computer Laboratory for further individual exercises.

Learning assessment procedures

The exam is divided in two tests, a practical and a theoretical one, that may be taken in different sessions. Passing the exam is proof that the student has acquired the knowledge and skills identified as learning objectives of this course.

In the practical test, students will be required to design a distributed Client / Server application using both the Unix Socket Socket Java. This test will be taken in the Computed Laboratory of the Department of Engineering. If you are not satisfied with the result of a practical test, you can retake it in any subsequent session and decide whether to hand over the elaborate at the end of the test (thus automatically invalidating the score achieved with the previous practical test elaborate) or not (thus keeping the score achieved with the previous practical test elaborate).

After passing the practical test, students have to take the theoretical one. This test will lead to an increase in the final score of up to 3 points with respect to the score achieved with the practical test. If you are not satisfied with the result of the theoretical test, you may retake it without losing the score obtained in the practical test.

The teacher will schedule 6 practical test sessions each (solar) year, to be held in January, February, June, July, September, and December. Theoretical tests will be roughly scheduled twice a month. Not to interfere with classes, during teaching periods theoretical test sessions will be reserved to “fuori corso” students only.

Reference texts

There is no single textbook that contains all the material presented in this course. The teacher then proposes a list of books, divided between books of a more introductory / general nature and books covering in more detail some specific topics of the course.

The textbook which provides the widest coverage of most of the topics of the course, and follows the same (top-down) approach, is the Kurose-Ross:

J. Kurose, K. Ross, "Computer Networking: A Top-Down Approach”, 7th Edition, Pearson, 2016.

The Kurose-Ross is widely regarded as the reference textbook in the field and provides a bit more theoretical and definitely broader discussion of topics than other textbooks.

The Forouzan-Mosharraf textbook represents a valid alternative to the Kurose-Ross textbook:

B. Forouzan, F. Mosharraf, "Computer Networks - A top-down approach", McGraw Hill, 2012.

The Forouzan-Mosharraf textbook adopts a more "hands on" approach, with many diagrams that greatly facilitate the understanding of the inner working of protocols and algorithms, and also provides a partial coverage of Sockets in the C / Unix and Java programming environments.

Another textbook with an extensive coverage of the topics of the course, but with a different (bottom-up) approach is:

A.S. Tanenbaum, D. Wetherall, "Computer Networks", 5th edition, Pearson, 2011.

The Tanenbaum-Wetherall is a great reference to study in-depth some specific issues, but its bottom-up approach makes that textbook decidedly less suitable for the purpose of this course compared to the Kurose-Ross and the Forouzan-Mosharraf.

Other textbooks with more detailed discussion of specific topics (shown in parentheses):

E. Harold, "Java Network Programming", 4th Edition, O'Reilly, 2013 (Socket Java)
M. Kerrisk, "The Linux Programming Interface", No Starch Press, 2010 (Unix)
W.R. Stevens et al., "Advanced Programming in the UNIX Environment", 3rd Edition, Addison-Wesley, 2013 (Unix)
W.R. Stevens et al., "Unix Network Programming - Vol.1", 3rd Edition, Addison-Wesley, 2003 (Socket Unix)
W.R. Stevens et al., "TCP/IP Illustrated: the protocols - Vol.1", 2nd Edition, Addison-Wesley, 2012 (TCP/IP)
W. Stallings, L. Brown, "Computer Security: Principles and Practice", 2nd Edition, Prentice Hall, 2011 (Security)
J. Forshaw, "Attacking Network Protocols", No Starch Press, 2017 (Security and protocol analysis)
C. Sanders, "Practical Packet Analysis", 3rd Edition, No Starch Press, 2017 (Protocol analysis and debugging)
R. Seacord, "Effective C", No Starch Press, 2020 (Modern C)

A copy of the slides used during the lectures is available on the Teaching material page of the course Web site.