|haskal fd8088e6f7||1 year ago|
|hptp||1 year ago|
|hptp-recv||1 year ago|
|hptp-send||1 year ago|
|scripts||1 year ago|
|.gitignore||1 year ago|
|Cargo.lock||1 year ago|
|Cargo.toml||1 year ago|
|Makefile||1 year ago|
|README.md||1 year ago|
|rust-toolchain||1 year ago|
__ __ __ __/ // /_/ /___ _____ ____ _ __ ___ ____ __ /_ _ __/ / __ `/ __ \/ __ `/ / / / / | /| / / / / / /_ _ __/ / /_/ / / / / /_/ / / /_/ /| |/ |/ / /_/ / /_//_/ /_/\__,_/_/ /_/\__, / \__,_/ |__/|__/\__,_/ /____/
For this assignment we developed a new protocol that would be particularly efficient at transferring a file over an unreliable connection. The protocol divides 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 receiver has obtained. The receiver periodically sends batched-acknowledgements that list received 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 using coding and algorithms.
We faced many challenges implementing this protocol, such as the following:
Various internal algorithms and data structures 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.