Reliable Transport CS 3700 Project 3
Goals You will write a program that implements reliable transport on top of UDP Think of it as TCP-lite Deliver a file reliably from a sender to a receiver Your program will be tested under various kinds of lossy network conditions Packet drops Packet reordering Packet duplication Network bandwidth and latency will also be varied Grade based on correctness, performance, style and documentation 10% of your total grade, not as hard as project 2
Command Line Syntax $ ./3700recv $ ./3700send <recv_host>:<recv_port> Receiver prints out its port Receiver’s IP and port are given to the sender Sender expects to read the input file from STDIN Helper script will automatically run the sender and receiver ./run [--size (small|medium|large|huge)] [--printlog] [--timeout <seconds>]
The Simulator Today’s networks are too fast and reliable to be interesting You’ll be testing your code in a simulator Available on gordon.ccs.neu.edu You must use this machine to test your code Configuring the simulated network $ /course/cs3700f16/bin/project3/netsim [--bandwidth <bw-in-mbps>] [-- latency <latency-in-ms>] [--delay <percent>] [--drop <percent>] [--reorder <percent>] [--duplicate <percent>]
The Protocol You can implement your packet headers however you see fit UDP gives you port numbers Everything else is up to you Things you may want Sequence and acknowledgement numbers? Flags (SYN, FIN, ACK)? Receive window size? Checksums? Cryptographic hashes? Selective ACK?
Other Considerations What about congestion control? You’ll be tested on network links with different maximum capacities You’ll need to manage tradeoffs between probing for additional capacity versus sending too fast and inducing packet drops Speed and efficiency matter You should try and cram as many bytes of data into each packet as you can, subject to MTU restrictions (plus IP and UDP overhead) Minimizing retransmissions is key How do you close the connection? FIN packets may drop
Performance Testing We provide a script that runs all test cases In addition to passing all tests (correctness), we will also be grading you based on performance How fast did you complete the file transfer? (Lower times are better) How many total bytes did you send? (Lower is better) Leaderboard showing everyone’s performance on the test cases $ /course/cs3700f17/bin/project3/printstats
Turning in Your Project Register your group All group members must run the script! Create a directory for your files All of your (well documented) code Makefile README Run the turn-in script
Grading 10% of your total grade, due Monday, October 30 75% for program correctness, i.e. passing all test cases 15% for performance 10% for style and documentation