diff --git a/README.md b/README.md index 93af14a..7704c86 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,31 @@ ## High level approach -TODO +For this assignment we developed a new protocol that would be particularly efficient at +transferring a file over an unreliable connection. The protocol devides the input file +into fixed-length "segments", numbers them sequentially, and attempts to transfer them to +the receiver. It repeatedly retransmits segments that it is not confident that the +receiever has obtained. The receiever periodically sends batched-acknowledgements that +list receieved segments. The segments are compressed using state-of-the-art compression +algorithms to ensure expedient delivery. The rate of sending and acknowledgement is +continuously tuned to optimize for network conditions. ## Challenges -TODO +We faced many challenges implementing this protocol, such as the following: + +- Learning how to use cutting-edge event-loop libraries in Rust +- Selecting a re-transmission algorithms that would be resistant to drops and duplicates +- Choosing constants that would tune the transmission rate to adjust automatically to + network latency and bandwidth +- Ensuring that *both* connections would close once the file had been successfully + transferred. ## Testing -TODO +Various internal algorithms and datastructures were tested using simple unit tests. For +instance, we have unit tests to check that our packet encoding/decoding schemes work +correctly. + +However, testing general consistency of the protocol was done by running the scripts +provided to us, which automatically adjust network conditions and send large files.