In this assignment, you are required to emulate the operation of a link layer and network layer protocols in a small computer network. Your program should behave like a single node in the network. You will start several instances of your program so that they can send packets to each other as if there are links between them. Running as an independent node, your program should implement a simple version of Go-Back-N Protocol (Link Layer) and the Distance-Vector Routing Algorithm (Network Layer), in order to provide reliable transmissions and efficient routing.
Each section of the assignment will walk you through a different portion on the way to this end goal. Section 2 will have you implement the Go-Back-N protocol whereas Section 3 will have you implement a Distance Vector Routing Algorithm. By the time you get to Section 4, which is to combine these two algorithms, you should have the vast majority of the hard work done and can focus on these two algorithms work in tandem. The assignment is split into these sections not only to make it easier, but also to give you the most opportunity for partial credits.
Accomplishing only Sections 2 and 3 will get you 80 of the 100 points available. Please follow the instructions step by step, and submit the programs for whichever sections you attempt/accomplish.
This assignment is meant to be done on your own; do not collaborate with others as this is cheating!
Please start early, and read the entire homework before you start!
In this section, there are only two nodes. The sender sends packets to the receiver through the UDP protocol. You have to implement the Go-Back-N (GBN) protocol on top of UDP on both nodes to guarantee that all packets can be successfully delivered to the higher layers in the correct order. To emulate an unreliable channel, the receiver or the sender needs to drop an incoming data packet or an ACK, respectively, with a certain probability.