You will design a transport protocol that provides a reliable datagram service for file transfer. Your protocol will be responsible for ensuring data is delivered in order, without duplicates, missing data, or errors. Since the local area networks you will test your protocol on are quite reliable, you will also use a tool to emulate an unreliable network. The emulator implements random packets drops, damaged packets, duplicated packets, and delayed packets, as well as a variety of different link bitrates and latencies (propagation delays).
You will write code that will transfer a file reliably between two hosts (a sender and a receiver) without worrying about connection establishment or similar control; you may assume that the receiver is run first and will wait indefinitely, and that the sender can just send the data to the receiver.