A layered architecture
Dividing a problem into several sub-problems and then solve each sub-problem is a very successful strategy. When implementing services this becomes very evident; we will explore how to build a communication stack as a layered architecture. The stack will implement flow control, reliable and ordered message passing etc.
This is also an example of using finite state machines in modelling a solution to a problem.
Before going through the assignment you should have good understanding of the OSI model for network communication. You should also repeat finite state automata theory from the course in discrete mathematics.
Follow the instructions in the assignment and implement the communication service.