1. Homepage
  2. Programming
  3. COMP3331 Computer Networks and Applications Assignment: Simple Transport Protocol (STP)

COMP3331 Computer Networks and Applications Assignment: Simple Transport Protocol (STP)

Engage in a Conversation
UNSWCOMP3331COMP9331Computer Networks and ApplicationsSTPSimple Transport ProtocolPythonUDP

COMP3331/9331 Computer Networks and Applications
CourseNana.COM

Assignment for Term 1, 2024 CourseNana.COM

Version 1.0
Due: 11:59am (noon) Thursday, 18 April 2024 (Week 10) CourseNana.COM

Version 1.0 released on 7th March 2024. CourseNana.COM

2. Goal and learning objectives CourseNana.COM

For this assignment, you are to implement a reliable transport protocol over the UDP protocol. We will refer to the reliable transport protocol that you will be implementing in this assignment as Simple Transport Protocol (STP). STP will include most (but not all) of the features that are described in Sections 3.5.4 - 3.5.6 of the text Computer Networking by Kurose and Ross (7th or 8th ed.) or equivalent parts from the Week 4/5 lecture notes. Examples of these features include timeout, ACK, sequence numbers, sliding window, etc. Note that these features are commonly found in many transport protocols. Therefore, this assignment will give you an opportunity to implement some of these basic features of a transport protocol. In addition, you may have wondered why the designer of the TCP/IP protocol stack includes such a feature-less transport protocol as UDP. You will find in this assignment that you can design your own transport protocol and run it over UDP. This is the case for some multimedia delivery services on the Internet, where they have implemented their own proprietary transport protocol over UDP. QUIC, a newly proposed transport protocol also runs over UDP and implements additional functionalities such as reliability. CourseNana.COM

Recall that UDP provides point-to-point, unreliable datagram service between a pair of hosts. In this programming assignment, you will develop a more structured protocol, STP, which ensures reliable, end-to-end delivery of data in the face of packet loss. STP provides a byte-stream abstraction like TCP and sends pipelined data segments using a sliding window. However, STP does not implement receiver back to the sender. To support reliability in a protocol like STP, state must be maintained at both endpoints. Thus, as in TCP, connection set-up and connection teardown phases will be an integral part of the protocol. STP should implement a sliding window protocol wherein multiple segments can be sent by the sender in a pipelined manner. Like TCP, STP will include some elements of both Go-Back-N (GBN) and Selective Repeat (SR). You will use your STP protocol to transfer a text file (examples provided on the assignment webpage) from the sender to the receiver. CourseNana.COM

The sender program must also emulate the behaviour of an unreliable communication channel between the sender and receiver. Even though UDP segments can get lost, the likelihood of such losses is virtually zero in our test environment, where the sender and receiver will be executed on the same machine. Further, to properly test the implementation of your sender program, we would like to control the unreliable behaviour of the underlying channel. The sender program should CourseNana.COM

emulate loss of STP segments in both directions – (i) DATA, SYN, and FIN segments in the forward direction and (ii) ACK segments in the reverse direction. You may assume that the underlying channel will never reorder or corrupt STP segments (in both directions). CourseNana.COM

Note that it is mandatory that you implement STP over UDP. Do not use TCP sockets. You will not receive any marks for this assignment if you use TCP sockets. CourseNana.COM

2.1 Learning Objectives CourseNana.COM

On completing this assignment, you will gain sufficient expertise in the following skills: CourseNana.COM

  1. Detailed understanding of how reliable transport protocols such as TCP function. CourseNana.COM

  2. Socket programming for UDP transport protocol. CourseNana.COM

  3. Protocol and message design. CourseNana.COM

3. Assignment Specification CourseNana.COM

STP should be implemented as two separate programs: sender and receiver. You should implement unidirectional transfer of data from the sender to the receiver. As illustrated in Figure 1, data segments will flow from sender to receiver while ACK segments will flow from receiver to sender. The sender and receiver programs will be run from different terminals on the same machine, so you can use localhost, i.e., 127.0.0.1 as the IP address for the sender and receiver in your program. Let us reiterate this, STP must be implemented on top of UDP. Do not use TCP sockets. If you use TCP, you will not receive any marks for your assignment. CourseNana.COM

You will find it useful to review Sections 3.5.4 - 3.5.6 of the text (or the relevant parts from the Week 5 lecture notes). It may also be useful to review the basic concepts of reliable data transfer from Section 3.4 (or relevant parts from the Week 4 lecture notes). Section 3.5 of the textbook which covers the bulk of the discussion on TCP is available to download on the assignment page. CourseNana.COM

Data Ack CourseNana.COM

Receiver CourseNana.COM

UDP Socket1 CourseNana.COM

sender_port specified as argument CourseNana.COM

Figure 1: This depicts the assignment setup. A file is to be transferred from the Sen
machine. Data segments will flow from the sender to receiver, while ACK segments will flow from the receiver to sender.
CourseNana.COM

UDP Socket 2 CourseNana.COM

receiver_port specified as argument CourseNana.COM

der to the Receiver, both running on the same CourseNana.COM

3.1 File Names CourseNana.COM

The main code for the sender should be contained in the following files: sender.c, or Sender.java, or sender.py. You may create additional files such as header files or other class files and name them as you wish. CourseNana.COM

The sender should accept the following seven arguments: CourseNana.COM

  1. sender_port: the UDP port number to be used by the sender to send STP segments to the receiver. The sender will receive ACK segments from the receiver through this same port. We recommend using a random port number between 49152 to 65535 (dynamic port number range) for the sender and receiver ports. CourseNana.COM

  2. receiver_port: the UDP port number on which receiver is expecting to receive STP segments from the sender. The receiver should send ACK segments to the sender through this same port. We recommend using a random port number in the same range noted above. CourseNana.COM

  3. txt_file_to_send: the name of the text file that must be transferred from sender to receiver using your reliable transport protocol. You may assume that the file included in the argument will be available in the current working directory of the sender with the “read” access permissions set (execute “chmod +r txt_file_to_send” at the terminal in the directory containing the file, where txt_file_to_send is set to the actual name of the file). CourseNana.COM

  4. max_win: the maximum window size in bytes for the sender window. This should be an unsigned integer. Effectively, this is the maximum number of data bytes that the sender can transmit in a pipelined manner and for which ACKs are outstanding. max_win must be greater than or equal to 1000 bytes (MSS) and does not include STP headers. When max_win is set to 1000 bytes, STP will effectively behave as a stop-and-wait protocol, wherein the sender transmits one data segment at any given time and waits for the corresponding ACK segment. While testing, we will ensure that max_win is a multiple of 1000 bytes (e.g., 5000 bytes). CourseNana.COM

  5. rto: the value of the retransmission timer in milliseconds. This should be an unsigned integer. CourseNana.COM

  6. flp: forward loss probability, which is the probability that any segment in the forward direction (DATA, FIN, SYN) is lost. This should be a float value between 0 and 1 (inclusive). If flp is 0.1, then the sender will drop approximately 10% of the segments that it intends to send to the receiver. CourseNana.COM

  7. rlp: reverse loss probability, which is the probability of a segment in the reverse direction (i.e., ACKs) being lost. This should be a float value between 0 and 1 (inclusive). If rlp is 0.05, then the sender will drop approximately 5% of the ACK segments received. CourseNana.COM

The sender should be initiated as follows:
If you use Java:
java Sender sender_port receiver_port txt_file_to_send max_win rto flp rlp CourseNana.COM

If you use C: CourseNana.COM

./sender sender_port receiver_port txt_file_to_send max_win rto flp rlp CourseNana.COM

If you use Python: CourseNana.COM

python3 sender.py sender_port receiver_port txt_file_to_send max_win rto flp rlp CourseNana.COM

During testing, we will ensure that the 7 arguments provided are in the correct format. We will not test for erroneous arguments, missing arguments, etc. That said, it is good programming practice to check for such input errors. CourseNana.COM

The main code for the receiver should be contained in the following files: receiver.c, or Receiver.java, or receiver.py. You may create additional files such as header files or other class files and name them as you wish. CourseNana.COM

The receiver should accept the following four arguments: CourseNana.COM

  1. receiver_port: the UDP port number to be used by the receiver to receive STP segments from the sender. This argument should match the second argument for the sender. CourseNana.COM

  2. sender_port: the UDP port number to be used by the sender to send STP segments to the receiver. This argument should match the first argument for the sender. CourseNana.COM

  3. txt_file_received: the name of the text file into which the data sent by the sender should be stored (this is the file that is being transferred from sender to receiver). You may assume that the receiver program will have permission to create files in its working directory (execute “chmod +w .” at the terminal to allow the creation of files in the working directory), and that a file with this name does not exist in the working directory or may be overwritten. CourseNana.COM

  4. max_win: the receive window size. This argument should match the fourth argument for the sender. It is provided to the receiver to ensure that the receiver can initialise a buffer sufficient to hold all the data that the sender can transmit in a pipelined manner. CourseNana.COM

The receiver should be initiated as follows:
If you use Java:
java Receiver receiver_port sender_port txt_file_received max_win CourseNana.COM

If you use C: CourseNana.COM

./receiver receiver_port sender_port txt_file_received max_win CourseNana.COM

If you use Python: CourseNana.COM

python3 receiver.py receiver_port sender_port txt_file_received max_win CourseNana.COM

During testing, we will ensure that the 4 arguments provided are in the correct format. We will not test for erroneous arguments, missing arguments, etc. That said, it is good programming practice to check for such input errors. CourseNana.COM

The receiver must be initiated before initiating the sender. The two programs will be executed on the same machine. Pay attention to the order of the port numbers to be specified in the arguments for the two programs as they are in reverse order (sender port is first for the sender while receiver port is first for the receiver). If you receive an error that one or both port numbers are in use, then choose different values from the dynamic port number range (49152 to 65535) and try again. CourseNana.COM

The sender and receiver should exit after the file transfer is complete and the required information, as stated in the subsequent sections of this document, is written to the sender and receiver log files. CourseNana.COM

3.2 Segment Format CourseNana.COM

STP segments must have 2 *two*-byte fields: "type" and "seqno" headers. Each of these store unsigned integer values in network byte order, i.e., big-endian. CourseNana.COM

type (2 bytes) CourseNana.COM

seqno (2 bytes) CourseNana.COM

Data (0 to MSS bytes) CourseNana.COM

The "type" field takes on 4 possible values. DATA = 0, ACK = 1, SYN = 2, FIN = 3. CourseNana.COM

Unlike TCP, in which multiple types can be set simultaneously, STP segments must be of exactly one of the types specified above. CourseNana.COM

The "seqno" field indicates the sequence number of the segment. This field is used in all segments. For DATA segments, the sequence number increases by the size (in bytes) of each segment (excluding headers). For ACK segments, the sequence number acts as a cumulative acknowledgment, and indicates the number of the next byte expected by the receiver. For SYN segments, the sequence number is the initial sequence number (ISN), which should be a randomly chosen integer from 0 to 2^16 - 1, which is the maximum sequence number. The sequence number of the first DATA segment of the connection should thus be ISN+1. For FIN segments, the sequence number is one larger than the sequence number of the last byte of the last data segment of the connection. The Maximum Segment Size (MSS) (excluding headers) for STP segment is 1000 bytes. A DATA segment can thus be up to 1004 bytes long. The last DATA segment for the file being transferred may contain less than 1000 bytes as the file size may not be a multiple of 1000 bytes. All segments excluding DATA segments should only contain the headers and must thus be exactly 4 bytes long. CourseNana.COM

The logic for determining the sequence number and ack number in STP is like TCP. However, STP does not use a separate ack number header field. Rather, the “seqno” field contains the ack number for the ACK segments. CourseNana.COM

3.3 State Diagram CourseNana.COM

The asymmetry between sender and receiver leads to somewhat different state diagrams for the two endpoints. The state diagram for STP is shown below, which depicts the normal behaviour for both end points. CourseNana.COM

The receiver can be in four possible states: CLOSED, LISTEN, ESTABLISHED and TIME_WAIT. Initially, it is in the CLOSED state. Upon issuing a passive open, it enters the LISTEN state. Note that the receiver is the passive host in our protocol and is initiated first, while the sender is initiated next and actively opens the connection. While in the LISTEN state, the receiver waits for a SYN segment to arrive on the correct port number. When it does, it responds with an ACK, and moves to the ESTABLISHED state. Should a duplicate SYN arrive while the receiver is in the ESTABLISHED state, it reissues the ACK and remains in the ESTABLISHED state. The ACKs sent by the receiver are cumulative (like TCP). After the sender has reliably transmitted all data CourseNana.COM

(and received acknowledgments), it will send a FIN segment to the receiver. Upon receipt of the FIN, the receiver moves to the TIME_WAIT state. As in TCP, it remains in TIME_WAIT for two maximum segment lifetimes (MSLs) before re-entering the CLOSED state. This is to ensure that the receiver can respond to potentially retransmitted FIN segments from the sender. You may assume that the MSL is 1 seconds. In other words, the receiver should remain in TIME_WAIT for 2 seconds and then transition to CLOSED. CourseNana.COM

The sender can be in five possible states: CLOSED, SYN_SENT, ESTABLISHED, CLOSING and FIN_WAIT. Like the receiver, the sender starts in the CLOSED state. It then issues an active open by sending a SYN segment (to the receiver's port), thus entering the SYN_SENT state. This SYN transmission also includes the initial sequence number (ISN) of the conversation. The ISN should be chosen at random from the valid range of possible sequence numbers (0 to 2^16 – 1). If a corresponding ACK is not received within if the timer expires. Once all DATA segments have been transmitted the sender enters the CLOSING state. At this point, the sender must still ensure that any buffered data arrives at the receiver reliably. Upon verification of successful transmission, the sender sends a FIN segment with the appropriate sequence number (1 greater than the sequence number of the last data byte) and enters the FIN_WAIT state. Once the FIN segment is acknowledged, the sender re-enters the CLOSED state. If an ACK is not received before the timer (rto msec) expires, the sender should retransmit the FIN segment. CourseNana.COM

Strictly speaking, you don’t have to implement the CLOSED state at the start for the sender. Your sender program when executed can immediately send the SYN segment and enter the SYN_SENT state. Also, when the sender is in the FIN_WAIT state and receives the ACK for the FIN segment, the program can simply exit. This is because the sender only transmits a single file in one execution and quits following the reliable file transfer. CourseNana.COM

Unlike TCP which follows a three-way handshake (SYN, SYN/ACK, ACK) for connection setup and independent connection closures (FIN, ACK) in each direction, STP follows a two-way connection setup (SYN, ACK) and one directional connection closure (FIN, ACK) process. The setup and closure are always initiated by the sender. CourseNana.COM

If one end point detects behaviour that is unexpected, it should simply print a message to the terminal indicating that the connection is being reset, and then terminate. For example, if the receiver receives a DATA segment while it is in the LISTEN state (where it is expecting a SYN segment). The state transition diagram on the previous page does not capture such erroneous scenarios. You are free to specify the format of the message that is printed. Note that, we will NOT be rigorously testing your code for such unexpected behaviour. CourseNana.COM

3.4 List of features to be implemented by the sender. CourseNana.COM

You are required to implement the following features in the sender (and equivalent functionality in the receiver). CourseNana.COM

1. The sender should first open a UDP socket on sender_port and initiate a two-way handshake (SYN, ACK) for the connection establishment. The sender sends a SYN segment, and the receiver responds with an ACK. This is different to the three-way handshake implemented by TCP. If the ACK is not received before a timeout (rto msec), the sender should retransmit the SYN. CourseNana.COM

2.The sender must choose a random initial sequence number (ISN) between 0 and 216 – 1. CourseNana.COM

Remember to perform sequence number arithmetic modulo 216. The sequence numbers should cycle back to zero after reaching 216 – 1. CourseNana.COM

3.A one-directional (forward) connection termination (FIN, ACK). The sender will initiate the connection close once the entire file has been reliably transmitted by sending the FIN segment and the receiver will respond with an ACK. This is different to the bi-directional close implemented by TCP. If the ACK is not received before a timeout (rto msec), the sender should retransmit the FIN. The sender should terminate after connection closure. CourseNana.COM

4.STP implements a sliding window protocol like TCP, whereby multiple segments can be transmitted by the sender in a pipelined manner. The sender should maintain a buffer to store all unacknowledged segments. The total amount of data that the sender can transmit in a pipelined manner and for which acknowledgments are pending is limited by max_win. Similar to TCP, as the sender receives ACK segments, the left edge of the window can slide forward, and the sender can transmit the next DATA segments (if there is pending data to be sent). CourseNana.COM

5. Each STP segment transmitted by the sender (including DATA, SYN, FIN) must be encapsulated in a UDP segment and transmitted through the UDP socket. CourseNana.COM

6. The sender must maintain a single timer for retransmission of data segments (Section 3.5.4 of the text). The value of the timeout will be supplied as a command-line argument to the sender program (rto msec). This timer is for the oldest unacknowledged data segment. In the event of a timeout, only the oldest unacknowledged data segment should be retransmitted (like TCP). The sender should not retransmit all unacknowledged segments. Remember that you are NOT implementing Go-Back-N. CourseNana.COM

7. The sender should implement all the features mentioned in Section 3.5.4 of the text, except for doubling the timeout interval. You are expected to implement the functionality of the simplified TCP sender (Figure 3.33 of the text) and fast retransmit (i.e., the sender should retransmit the oldest unacknowledged data segment on three duplicate ACKs) (pages 247-248). CourseNana.COM

8.The use of the “seqno” field was outlined in Section 3.2. For DATA segments, the sequence number increases by the size (in bytes) of each segment (excluding headers). For ACK segments, the sequence number acts as a cumulative acknowledgment, and indicates the number of the next byte expected by the receiver. The logic is thus like TCP, except that STP does not use a separate ACK header field. The ACK segments use the seqno header field to indicate the ACK numbers. CourseNana.COM

9. The sender will receive each ACK segment from the receiver through the same socket which the sender uses to transmit data. The ACK segment will be encapsulated in a UDP segment. The sender must first extract the ACK segment from the UDP segment and then process it as per the operation of the STP protocol. ACK segments have the same format as DATA segments but do not contain any data. CourseNana.COM

10. The sender program should emulate the behaviour of an unreliable communication channel between the sender and receiver. UDP segments can occasionally experience loss in a network, but the likelihood is very low when the sender and receiver are executed on the same machine. Moreover, to properly test the implementation of your sender, SYN, or FIN segment created by the sender being dropped. In other words, each such segment created by the sender will be dropped with a probability flp. If the segment is not dropped, then it will be transmitted through the socket to the receiver. (ii) rlp: determines the probability of an ACK segment in the reverse direction from the sender being dropped. In other words, each ACK segment arriving at the sender socket will be dropped with a probability rlp. If the segment is not dropped, then it will be processed as per the STP protocol. CourseNana.COM

Note about Random Number Generation CourseNana.COM

You will need to generate random numbers to establish an initial sequence number (ISN) and implement segment loss. If you have not learnt about the principles behind random number generators, you need to know that random numbers are in fact generated by a deterministic formula by a computer program. Therefore, strictly speaking, random number generators are called pseudo- random number generators because the numbers are not truly random. The deterministic formula for random number generation in Python, Java and C use an input parameter called a seed. If a fixed seed is used, then the same sequence of random numbers will be produced, each time the program is executed. This will thus likely generate the same ISN and the same sequence of segment loss in each execution of the sender. While this may be useful for debugging purposes, it is not a realistic representation of an unreliable channel. Thus, you must ensure that you do not use a fixed seed in your submitted program. A simple way to use a different seed for each execution is to base the seed on the system time. CourseNana.COM

The following code fragments in Python, Java and C generate random numbers between 0 and 1 with a different seed in each execution. CourseNana.COM

  • In Python, you initialise a random number generator by using random.seed(). By default, the random number generator uses the current system time. After that you can generate a random floating point number between (0,1) by using random.random(). CourseNana.COM

  • In Java, you initialise a random number generator by using Random random = new Random(). This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor. After that, you can generate a random floating point number between (0,1) by using float x = random.nextFloat(). CourseNana.COM

  • In C, you initialise a random number generator by using srand(time(NULL)). After that, you can generate a random floating point number between (0,1) by using float x = rand()/((float)(RAND_MAX)+1). Note that, RAND_MAX is the maximum value returned by the rand() function. CourseNana.COM

11. The sender should maintain a log file named sender_log.txt where it records the information about each segment that it sends and receives. Information about dropped segments should also be included. You may assume that the sender program will have permission to create files in its current working directory. If the file already exists, then it should be overwritten. Start each entry on a new line. The format should be as follows: CourseNana.COM

<snd|rcv|drp> <time> <type-of-segment> <seq-number> <number-of-bytes>

There must be no whitespace within each field, and all fields must be whitespace separated. You may choose how to separate each field, e.g. with padding or a fixed number of spaces/tabs, but the log file must be easily human readable. CourseNana.COM

The first field is from the perspective of the sender endpoint, i.e., the sender will snd DATA, FIN, and SYN segments, if they are not dropped, and rcv ACK segments, if they are not dropped. Any dropped segments will be marked as drp. The time should be in milliseconds and relative to when the first SYN segment was sent (even if it was dropped), thus the first entry will be a SYN segment at time 0. The type of segment can be ACK, DATA, SYN or FIN. The number of bytes should be zero for all segments other than DATA segments, where it is the number of bytes of actual payload data (i.e., without headers). CourseNana.COM

The log must be recorded in chronological order. CourseNana.COM

For example, the following shows the log file for a sender that transmits 3000 bytes of data and the rto is 100 msec. The ISN chosen is 4521 and max_win is 3000 bytes. Notice that the third DATA segment is dropped and is hence retransmitted after a timeout interval of 100 msec. The interval is quite precise in this example log, but minor variations due to system latency are expected and acceptable. CourseNana.COM

snd  0.00
rcv  10.34
snd  10.45
snd  10.55
drp  10.67
rcv  36.76
rcv  37.87
snd  137.87
rcv  167.23
snd  168.11
rcv  203.34
SYN  4521 0
ACK  4522 0
DATA 4522 1000
DATA 5522 1000
DATA 6522 1000
ACK  5522 0
ACK  6522 0
DATA 6522 1000
ACK  7522 0
FIN  7522 0
ACK  7523 0

Once the entire file has been reliably transmitted and the connection is closed, the sender should also print the following statistics at the end of the log file (i.e., sender_log.txt). Please note that these statistics are specific to the sender while it is in an ESTABLISHED or CLOSING state, i.e., transmitting DATA segments, and receiving the corresponding (and potentially cumulative) ACK segments. We are not including summary statistics related to SYN or FIN segments and their acknowledgement. Also note, the amount of data sent and acknowledged is strictly payload data. CourseNana.COM

  1. Amount of (original) Data Sent (in bytes) – regardless of whether the data is dropped but does not include retransmitted data. CourseNana.COM

  2. Amount of (original) Data Acknowledged (in bytes) – based only on acknowledgements that are not dropped. CourseNana.COM

  3. Number of (original) Data Segments Sent – regardless of whether the segment is dropped but does not include retransmitted segments. CourseNana.COM

  4. Number of Retransmitted Data Segments. CourseNana.COM

  5. Number of Duplicate Acknowledgements Received. CourseNana.COM

  6. Number of Data Segments Dropped. CourseNana.COM

  7. Number of Acknowledgements Dropped. CourseNana.COM

For the example scenario, the sender log would be appended with: CourseNana.COM

You must follow the above format, but you may choose how to separate each statistical description with its value, e.g. with padding or a fixed number of spaces/tabs, provided the summary statistics are easily human readable. CourseNana.COM

3.5 Specific details about the receiver CourseNana.COM

1. The receiver should first open a UDP socket on receiver_port and then wait for segments to arrive from the sender. The first segment to be sent by the sender is a SYN segment and the receiver will reply with an ACK segment. CourseNana.COM

2. The receiver should next create a new text file named as per the txt_file_received argument. You may assume that the receiver program will have permission to create files in its current working directory (execute “chmod +w .” at the terminal to allow the creation of files in the working directory). The received data will be written to this file in the correct order. CourseNana.COM

3. The receiver should initialise a receive window of max_win to hold all data that the sender can send in a pipelined manner. CourseNana.COM

4. The receiver should generate an ACK immediately after receiving any segment from the sender. The receiver should not follow Table 3.2 of the textbook and does not implement delayed ACKs. The format of the ACK segment is exactly like the STP DATA segment. It should however not contain any data. The ack number should be included in the “seqno” field of the STP segment. There is no explicit ACK field in the STP header. CourseNana.COM

5. The receiver should buffer all out-of-order data in the receive buffer. This is because STP implements reliable in-order delivery of data. CourseNana.COM

6. The receiver should write data (in correct order) from the receive buffer to the txt_file_received file. The file should be written as correctly ordered data is available to ensure the receiver buffer does not overflow. At the end of the transfer, the receiver should have a duplicate of the text file sent by the sender. You can verify this by using the diff command on a Linux machine (e.g., “diff txt_file_to_send txt_file_received”). When testing your program, if you have the sender and receiver executing in the same working directory then make sure that the file name provided as the argument to the receiver is different from the file name used by the sender. CourseNana.COM

7. Once the file transfer is complete, the receiver should follow the state transition process as outlined in Section 3.3 while implementing connection closure. Pay particular attention to the transition from the TIME_WAIT state to the CLOSED state. CourseNana.COM

8. The receiver should also maintain a log file named receiver_log.txt where it records the information about each segment that it sends and receives, in chronological order. If the file the receiver will rcv DATA, FIN, and SYN segments, and snd ACK segments. Time should be in milliseconds and relative to when the first SYN segment is received, thus the first entry will be a SYN segment at time 0. One obvious difference from the sender log is that the receiver log will not record any segments as drp. CourseNana.COM

For example, the following shows the log file for a receiver that matches the scenario outlined in the sender specification (Section 3.4). To recall, the sender transmits 3000 bytes of data and the rto is 100 msec. The ISN is 4521, the max_win is 3000 bytes, and the third DATA segment is CourseNana.COM

dropped, triggering a retransmission after the timeout interval. CourseNana.COM

Once the entire file has been reliably transmitted and the connection is closed (remember to follow the state machine for the receiver), the receiver will also print the following statistics at the end of the log file (i.e., receiver_log.txt). Like the sender log, these statistics are specific to the receiver while it is in an ESTABLISHED state, i.e., receiving DATA segments, and sending the corresponding (and potentially cumulative) ACK segments. We are not including summary statistics related to SYN or FIN segments and their acknowledgement. Also note, the amount of data received and acknowledged is strictly payload data. CourseNana.COM

  1. Amount of (original) Data Received (in bytes) – does not include retransmitted data. CourseNana.COM

  2. Number of (original) Data Segments Received – does not include retransmitted data. CourseNana.COM

  3. Number of Duplicate Data Segments Received. CourseNana.COM

  4. Number of Duplicate Acknowledgements Sent. CourseNana.COM

For the example scenario, the receiver log would be appended with: CourseNana.COM

You must follow the above format, but you may choose how to separate each statistical description with its value, e.g. with padding or a fixed number of spaces/tabs, provided the summary statistics are easily human readable. CourseNana.COM

REMINDER: Generation of this log file is very important. It will help your tutors in understanding the flow of your implementation and marking. So, if your code does not generate any log files, you will only be graded out of 25% of the marks. CourseNana.COM

The receiver should terminate after the file transfer is complete and the log file is finalised. CourseNana.COM

The receiver must only print a message to the terminal if it is terminating prematurely, due to unexpected behaviour by the sender. No other output should be displayed. If you are printing output to the terminal for debugging purposes, make sure you disable it prior to submission. CourseNana.COM

3.6 Features Excluded CourseNana.COM

There are several transport layer features adopted by TCP that are excluded from this assignment: CourseNana.COM

  1. You do not need to implement timeout estimation. The timer value is provided as a command CourseNana.COM

    line argument (rto msec). CourseNana.COM

  2. You do not need to double the timeout interval. CourseNana.COM

Original data received:       3000
Original segments received:   3
Dup data segments received:   0
Dup ack segments sent:        0
  1. You do not need to implement flow control and congestion control. CourseNana.COM

  2. STP does not have to deal with corrupted or reordered segments. Segments will rarely be corrupted and reordered when the sender and receiver are executing on the same machine. In short, it is safe for you to assume that packets are only lost. Note however, that segments can be dropped by the unreliable channel implemented in the sender program and thus segments may arrive out of order at the receiver. CourseNana.COM

3.7 Implementation Details CourseNana.COM

The figure below provides a high-level and simplified view of the assignment. The STP protocol logic implements the state maintained at the sender and receiver, which includes all the state variables and buffers. Note that each STP segment (in each direction) must be encapsulated in a UDP segment and transmitted through the UDP socket at each end point. CourseNana.COM

Figure 3: The overall structure of your assignment. CourseNana.COM

Sender Design CourseNana.COM

The sender must first execute connection setup, followed by data transmission, and finally connection teardown, as outlined in the state diagram description (Section 3.3). During connection setup, the sender transmits a SYN segment, starts a timer (rto) and waits for an ACK. During data transmission, the sender may transmit several STP data segments (determined by max_win), all of which need to be buffered (in case of retransmissions) and wait for the corresponding ACKs. A timer (rto) should be started for the oldest ACKs, the sender should retransmit the oldest unacknowledged DATA segment. In the case of a timeout, the sender should retransmit the SYN or FIN, if in the connection setup or teardown process, or retransmit the oldest unacknowledged DATA segment, if in the data transmission process. As the sender needs to deal with multiple events, we recommend using multi-threading. CourseNana.COM

To better understand the logic behind fast retransmission and the use of a single timer, a simplified view of the sender is presented below (this does not include the connection setup and teardown and the functionality for implementing the unreliable channel) CourseNana.COM

Note that the use of a single timer does not require the sender to maintain any additional state for each segment such as when it was sent. CourseNana.COM

Recall also that the sender needs to implement the functionality of an unreliable channel that can drop segments in either direction. Before sending a UDP segment through the socket, the sender should call the function that simulates segment loss with a probability flp. If the segment is to be dropped, then it should not be transmitted and nothing else needs to be done (other than updating the log). Only if the segment is not dropped should it be transmitted through the socket. CourseNana.COM

Upon receipt of a UDP segment through the socket, the sender should call the function that simulates packet loss with a probability rlp. If the segment is dropped, then nothing else needs to be done (other than updating the log). Remember that we are emulating loss of the incoming segment on the channel, so effectively this segment never arrived at the sender and thus no action is necessary. If the segment is not dropped, only then should the sender execute the STP protocol logic (as outlined above and in Sections 3.3, 3.4). CourseNana.COM

Receiver Design CourseNana.COM

Upon receipt of a UDP segment through the socket, the receiver should extract the STP segment which is encapsulated within the UDP segment. The receiver should then execute the STP protocol logic (as outlined in Sections 3.3 and 3.5). For a SYN or FIN segment, the corresponding ACK should be sent, and other actions should be taken as per the state diagram shown in Section 3.3. For a DATA segment, the data should be written to the receive buffer. If the data is received in order, CourseNana.COM

then it can be written to the file and the buffer space made available. If out of order, then it will remain in the buffer until the missing data is received. An appropriate ACK segment should be generated. The ACK should then be encapsulated in a UDP segment and sent through the receiver socket to the sender. CourseNana.COM

All the above functionalities can be implemented in a single thread. However, the receiver must implement a timer during connection closure for transitioning from the TIME_WAIT state to the CLOSED state. The suggested way to implement this is using multi-threading where a separate thread is used to manage the timer. However, it may be possible to implement this using a single thread and using non-blocking or asynchronous I/O by using polling, i.e., select(). CourseNana.COM

Data Structures CourseNana.COM

To manage your protocol, you will need a collection of state variables to help you keep track of things like state transitions, sliding windows, and buffers. In TCP, this data structure is referred to as a control block: it's probably a good idea to create a control block class of your own and have a member variable of this type in your primary class. While we do not mandate the specifics, it is critical that you invest some time into thinking about the design of your data structures. You should be particularly careful about how multiple threads will interact with the various data structures. CourseNana.COM

Note about Artificial Delay CourseNana.COM

You may be tempted to add artificial delay to your sender and/or receiver through the use of system calls such as sleep(). For example, to implement your retransmission timer, or to try and resolve synchronisation issues. You are generally cautioned against doing this. At the very least, it will introduce unnecessary inefficiency to your protocol. Of perhaps greater concern, if you are doing it in response to some issue, then most likely the bug will remain. It will just be more transient and difficult to find. There will almost certainly be a more logical solution that will improve the efficiency and robustness of your programs. In such scenarios, you are highly encouraged to take a systematic approach to debugging your code and properly resolve any issues. CourseNana.COM

4. Test Implementations CourseNana.COM

Implementations for both endpoints will be made available on the CSE server system. They will be initiated as follows: CourseNana.COM

The command-line arguments are as described in Section 3.1. CourseNana.COM

Please note that the behaviour of your applications is not expected to match the test implementations. For example, the test implementations may save files to a temporary directory, output logs to screen, and provide more explicit details when unexpected behaviour is detected. You should always defer to the assignment specification as to what is expected of your implementations. CourseNana.COM

Recall, the sender and receiver programs will be run from different terminals on the same machine. For the CSE Linux servers, the easiest way to achieve this is to connect to VLAB and open two terminals. If you are instead connecting over ssh, then you must be mindful that both connections are to the same server. Here are two suggested approaches to using ssh: CourseNana.COM

1. Start a ssh session and determine the hostname from the shell prompt, e.g., z1234567@vx01 indicates a connection to host vx01. From another local terminal initiate a second ssh session. If you don’t connect to the same host then in the second session you can simply ssh to the first host, e.g., ssh vx01. CourseNana.COM

2. Start a ssh session and then use an application like screen to multiplex the one terminal between both the sender and receiver applications.
CourseNana.COM

If you receive an error when starting the sender or receiver that a port number is in use, then choose a different value from the dynamic port number range (49152 to 65535) and try again. CourseNana.COM

Get in Touch with Our Experts

WeChat (微信) WeChat (微信)
Whatsapp WhatsApp
UNSW代写,COMP3331代写,COMP9331代写,Computer Networks and Applications代写,STP代写,Simple Transport Protocol代写,Python代写,UDP代写,UNSW代编,COMP3331代编,COMP9331代编,Computer Networks and Applications代编,STP代编,Simple Transport Protocol代编,Python代编,UDP代编,UNSW代考,COMP3331代考,COMP9331代考,Computer Networks and Applications代考,STP代考,Simple Transport Protocol代考,Python代考,UDP代考,UNSWhelp,COMP3331help,COMP9331help,Computer Networks and Applicationshelp,STPhelp,Simple Transport Protocolhelp,Pythonhelp,UDPhelp,UNSW作业代写,COMP3331作业代写,COMP9331作业代写,Computer Networks and Applications作业代写,STP作业代写,Simple Transport Protocol作业代写,Python作业代写,UDP作业代写,UNSW编程代写,COMP3331编程代写,COMP9331编程代写,Computer Networks and Applications编程代写,STP编程代写,Simple Transport Protocol编程代写,Python编程代写,UDP编程代写,UNSWprogramming help,COMP3331programming help,COMP9331programming help,Computer Networks and Applicationsprogramming help,STPprogramming help,Simple Transport Protocolprogramming help,Pythonprogramming help,UDPprogramming help,UNSWassignment help,COMP3331assignment help,COMP9331assignment help,Computer Networks and Applicationsassignment help,STPassignment help,Simple Transport Protocolassignment help,Pythonassignment help,UDPassignment help,UNSWsolution,COMP3331solution,COMP9331solution,Computer Networks and Applicationssolution,STPsolution,Simple Transport Protocolsolution,Pythonsolution,UDPsolution,