


Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
A programming assignment for cmsc 417 computer networks students, where they are required to design a simple transport protocol that ensures reliable datagram service. The protocol should handle packet loss, duplication, and corruption, using an emulation header and object file provided by the university. Students must transfer a named file reliably between a sender and a receiver, and implement any reliability and congestion control algorithm of their choice for higher credit.
Typology: Assignments
1 / 4
This page cannot be seen from the preview
Don't miss anything!



CMSC 417 Computer Networks Fall 2007
Assigned: Oct. 17 Due: Oct. 28, 11:59PM.
You will design a simple transport protocol that provides reliable datagram service. Your protocol will be responsible for ensuring data is delivered in order, without duplicates or errors. Since the local area networks in the university are far too reliable, we will provide a header file (emulation.h) and an object file (emulation.o) for emulating an unreliable network. To used them, you have to include the header file and then link with the object file. There is a macro defined in emulation.h to replace all call of sendto with emulate_sendto which can be configured to drop, damage, or duplicate packets on demand. If the packet is not dropped, then it is sent to (using UDP) the destination node as if sendto is invoked. Note that the emulate_sendto may corrupt a packet and then send it, or may send multiple copies of the same packet. While debugging, You can select the behavior of the function, and use it to test parts of your code. However, your selection will be ignored in grading, and the function will randomly drop, duplicate and forward packets. For the assignment, you will transfer a named file reliably from between two nodes (a sender and a receiver). You do NOT have to implement connection open/close etc. You may assume that the receiver is run first and will wait indefinitely, and the sender can just send a named file to the receiver.
To make use of the emulation and specify the behavior of the emulate_sendto function, the (UDP) data part of each packet will contain the following header:
1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |version|L|D|C|U| Frequency | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Your own header & Data | | ....... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Version: Always set to 0011
Disposition: The packet disposition consists of four bits (three used) and tells the function how to handle this packet. The bits are:
Any subset of the L, D, and C bits may be set. If set, then the function will act on the packet in the specified manner at some probability. NOTE: these flags will be ignored when your code is graded. You may only use them for debugging.
Frequency: This field controls how often your packets are affected by the emulation server. The contents of this field are treated as an unsigned char and is used as the denominator of the treatment probability. If Frequency is set to 0, the packet is not harmed. Examples:
Padding: Set all 16 bits to zero
After our header, you will almost certainly want to add your own header. Your header might include fields for packet type, acknowledgement number, advertised window, data, etc. This part of the assignment is entirely up to you. Your code MUST:
You may implement any reliability algorithm and congestion control algorithm you choose. However, a more sophisticated algorithm will be given higher credit.
Please submit your code to the Submit Server (https://submit.cs.umd.edu/). You should up- load a zip file which contains (at least) the following files: