Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
CS 462 – Sliding Window Protocols
Introduction
This can be divided into two phases:
1. Reliable communication between two processes, e.g., A and B, with error-handling using the
Internet Checksum or the CRC checksum algorithm.
2. Sliding window protocols, e.g., Go-Back-N (GBN), and Selective Repeat (SR).
The project must be implemented with the C++/C language. You may use the ACE or Boost framework or
any available networking APIs.
Remember that we are doing this in software and that you should introduce situational errors to test the
correctness of your implementation. This means that you must have the ability to force packets to be out
of sequence, lost, damaged, and/or simulate lost acknowledgement packets. Situational errors can be
randomly generated or user-specified (described later).
As you progress, you will notice that other minor details not mentioned in this document may be
required. This is to simulate a real-world environment where a customer initially provides as much
information as possible for you to get started. As you start your design, you have questions. You contact the
customer to get more information. It is therefore expected that you visit my office for questions.
Design Issues
There are two types of Internet sockets, stream sockets and datagram sockets. Most of you have used the
stream sockets in your Operating Systems class. Stream sockets are reliable sockets, i.e., frames received
are always in the order they are sent. Since this project requires the implementation of data link protocols,
you must use datagram sockets. Datagram sockets are also known as connectionless sockets. As a
consequence, packets sent may be received out of order when datagram sockets are used.
Provide a design document to describe your implementation. Describe and justify your design decisions.
Your design must have the ability to do an ftp any (one) client to any (one) server. As extra credit, having
your program do multiple clients to multiple servers is encouraged, Examples of this are: single client to
multiple servers, multiple clients to one server, multiple clients to multiple servers simultaneously.
In designing your program, you should discuss the pros and cons of the following design issues:
1. The protocol to be used.
2. The size of your packet.
3. Frame format, i.e., type of header information you want to keep.
4. Sequence numbers (do not use infinite sequence numbers)
5. Error detection (use the CRC algorithm). Is this a reasonable algorithm to use?
6. The size of your sliding window.
7. The time-out interval (static or dynamically determined).
8. How to implement timeouts.
As we proceed to cover each of the appropriate topics throughout the semester, more information will
be given regarding details of the implementation.
You will be asked to demo your project. Hence, it is important to capture as much information as possible
of your run.
Use the md5 hash utility to check the integrity of the files you have transferred over, i.e., the file at the
source must have the same md5 hash value as the one at the destination. To use the md5 hash on our
linux machines.
$ md5sum random.txt
6b3d28a099f3bd67b57410759ffb439f random.xt
GUI/Input
Design a simple (text-based or graphical) UI for your program. The user should be prompted to select
the protocol to be demonstrated, i.e., Stop and Wait, Go-Back-N, or Selective Repeat.
The user should subsequently be prompted for parameter values for the selected protocol simulation.
For example, the user should be prompted for either default values (determined by the designer) or user-
defined values to be entered. The following, at a minimum, must be prompted for:
(a) Type of protocol: GBN or SR.
(b) Size of packet
(c) Timeout interval (user-specified or ping-calculated)
(d) Size of sliding window
(e) Range of sequence numbers
(d) Situational Errors (none, randomly generated, or user-specified, i.e., drop packets 2, 4, 5, lose
acks 11, etc.)
Your output should provide enough information for me when you demo your project. There should be
a separate area where all the necessary information is logged and printed on the screen.
The user should be able to specify a server host for the file transfers. At a minimum, you should be able
to transfer one file.