This assignment aims to enhance students' understanding of the network protocol hierarchy and flow control and error control techniques by implementing a sliding window protocol in a simulated communication network system. The programming language will be Java.
The simulated communication system consists of the following two major components:
1. Network Simulator This component simulates the physical transmission media which connects two communicating virtual machines. The component may be set to operate in one of the four different quality levels of service: o Level 0: an error-free transmission media.
o Level 1: a transmission media which may lose frames.
o Level 2: a transmission media which may damage frames (i.e., generating checksum-errors).
o Level 3: a transmission media which may lose and damage frames.
2. Virtual Machine This component simulates a communicating virtual machine. Internally, it is divided into two sub-components:
(1) Sliding Window Protocol This component implements the sliding window protocol (i.e., the data link layer). In this simulated system, this component cannot work alone, and must interact with the Sliding Window Environment component (to be described next) in order to fetch/deliver a sequence of packets from/to the upper network layer, and to fetch/deliver a sequence of frames from/to the lower physical layer.
(2) Sliding Window Environment This component provides the environment in which the sliding window protocol component is working. Basically, this component implements the following major interfaces: o The interface between the data link layer and the network layer. This interface consists of three procedures:
1. to_network_layer(), to deliver a packet to the network layer.
2. from_network_layer(), to fetch a packet from the network layer.
3. enable_network_layer(int creditnr), to grant the number of creditnr credits to the network layer so that the network layer can generate the number of creditnr new packets.
In addition, this component implements the capability of automatically sending/receiving a sequence of packets to/from the data link layer.
o The interface between the data link layer and the physical layer. This interface consists of two procedures:
1. to_physical_layer(), to deliver a frame to the physical layer.
2. from_physical_layer(), to fetch a frame from the physical layer.
In addition, this component is responsible for interacting with the Network Simulator to transmit/receive frames to/from the underlying transmission media.
o The interface between the data link layer and the underlying event queue. This interface consists of the following procedures:
1. wait_for_event(): to wait for the arrival of an event.
2. generate_acktimeout_event(): to generate an acknowledgement timeout event.
3. generate_timeout_event(int seqnr): to generate a timeout event for an outstanding frame with the sequence number seqnr. Note: When a timeout event is being handled by the sliding window protocol, the protocol variable oldest_frame will be automatically set to the sequence number corresponding to the current timeout event.
It should be pointed out that the Network Simulator component is running in one process, and the Virtual Machine component (including both the Sliding Window Protocol and the Sliding Window Environment) is running in another process. To simulate the communication between two virtual machines, two Virtual Machine processes must be executed.