From 54169e329d55cae3aa4bf1e7f47a47e5bcc07411 Mon Sep 17 00:00:00 2001 From: wx002 Date: Sat, 27 Apr 2019 14:41:22 -0400 Subject: [PATCH] Update readme.txt --- proj1_rdt/readme.md | 95 ++++++++++++++++++++++++++++++++++++++++++++ proj1_rdt/readme.txt | 95 -------------------------------------------- 2 files changed, 95 insertions(+), 95 deletions(-) create mode 100644 proj1_rdt/readme.md delete mode 100644 proj1_rdt/readme.txt diff --git a/proj1_rdt/readme.md b/proj1_rdt/readme.md new file mode 100644 index 0000000..e6da862 --- /dev/null +++ b/proj1_rdt/readme.md @@ -0,0 +1,95 @@ +This is implementation of RDT (Reliable Data Transfer) protocol over UDP. + +Running instructions: +0. Run udp_box.py with respective commandline arguments. addr=127.0.0.1, port=8880, remote_port=8888 +1. Run recv.py. Parameters: --addr (the address to listen to, default=127.0.0.1), --port (the port to listen to, default=8888) +2. run sender.py. Parameters: --remote_addr(the remote address to send file to, default=127.0.0.1), --remote_port (the remote port to send file to, default=8880), --file (the file that will be sending, default=sendData/alice.txt) + +Note: + -SendData: File to send should be located in here + -recvData: The file received will be located here, named recv.txt +The default configuration is meant to run with the udp_box, in the following configuration: +sender.py <-> udp_box.py <-> recv.py + +Basic benchmark using udp_box: + conditions: + - 50kbs bandwidth + - Sending file: Alice.txt, size=167546 bytes + - parameters: loss rate, out of order rate(ooo_rate), duplicate packet rate(dupe_rate), byte error rate(ber) + Tested with 4 conditions (Ideal, good, medium, and terrible) + +Ideal: (--loss_rate 0 --ooo_rate 0 --dupe_rate 0 --ber 0) + - time: 118.819721s + - transfer rate: 1410.0857887050586 bytes per second + +Good: (--loss_rate 0.01 --ooo_rate 0.01 --dupe_rate 0.01 --ber 1e-8) + - time: 1239.808353s + - transfer rate: 135.1386281553791 bytes per second + +Medium: (--loss_rate 0.02 --ooo_rate 0.02 --dupe_rate 0.02 --ber 1e-6): + - time: 2393.281579s + - transfer rate: 70.00680633241944 bytes per second + +Terrible: (--loss_rate 0.1 --ooo_rate 0.03 --dupe_rate 0.05 --ber 1e-3): + - time: Infinity + - transfer rate: SLOW + +Pros: + - Ensures data is correctly transferee + - There is almost no chance of data error + - Packets arrive in sequential order + - Very reliable when the connection is decent, performs well within reasonable amount of time + - Will be able to run and sustain even under terrible conditions, with almost no data error +Cons: + - It is not using the maximum bandwidth at all + - Transfer rate is very low since is sending lines + - It require insane amount of time with non ideal conditions + - Under terrible conditions, the transfer will last indefinitely + - Not taking advantage of the full bandwidth + +Possible additions: + - Add initial handshakes for the receiver to know what to name the file + - Add timeout phase to break out indefinite run times with terrible connection + - Consider revamping the algorithm to use more bandwidth +Protocol sequence diagram: + +Sender Receiver + | ---------------line 0------------------> | + | <--------------ACK for line 0----------- | + | ---------------line 1------------------> | + | <--------------ACK for line 1----------- | + | ---------------line 2------------------> | + | <--------------ACK for line 2----------- | + | ---------------line 3------------------> | + | <--------------ACK for line 3----------- | + | ---------------line 4------------------> | + | <--------------ACK for line 4----------- | + | ---------------line 4------------------> | + | <--------------ACK for line 4----------- | + | ---------------line 5------------------> | + | <--------------ACK for line 5----------- | + | ---------------line 6------------------> | + | <--------------ACK for line 6----------- | + | ---------------line 7------------------> | + | <--------------ACK for line 7----------- | + | ---------------line 8------------------> | + | <--------------ACK for line 8----------- | + | ---------------END ------------------> | + | <--------------END---------------------- | +Sender Receiver + +Packet structure: +Each packet is representing a line of the file. Header is the index. All packets arrive at sequential order. + + structure: encoded Header + \t + encoded string + \t + raw data string + +Encoded Header: + - Index of the packet, encoded using base64 + +Encoded String: + - The content of the line, encoded using base64 + +Verify Method: + - Header must arrive in order, discard packet if is out of order and wait for resend + - The decoded encoded string must match the raw data string. Otherwise, packet is corrupted and ask for resend + diff --git a/proj1_rdt/readme.txt b/proj1_rdt/readme.txt deleted file mode 100644 index 998a882..0000000 --- a/proj1_rdt/readme.txt +++ /dev/null @@ -1,95 +0,0 @@ -This is implementation of RDT (Reliable Data Transfer) protocol over UDP. - -Running instructions: -0. Run udp_box.py with respective commandline arguments. addr=127.0.0.1, port=8880, remote_port=8888 -1. Run recv.py. Parameters: --addr (the address to listen to, default=127.0.0.1), --port (the port to listen to, default=8888) -2. run sender.py. Parameters: --remote_addr(the remote address to send file to, default=127.0.0.1), --remote_port (the remote port to send file to, default=8880), --file (the file that will be sending, default=sendData/alice.txt) - -Note: - -SendData: File to send should be located in here - -recvData: The file received will be located here, named recv.txt -The default configuration is meant to run with the udp_box, in the following configuration: -sender.py <-> udp_box.py <-> recv.py - -Basic benchmark using udp_box: - conditions: - - 50kbs bandwidth - - Sending file: Alice.txt, size=167546 bytes - - parameters: loss rate, out of order rate(ooo_rate), duplicate packet rate(dupe_rate), byte error rate(ber) - Tested with 4 conditions (Ideal, good, medium, and terrible) - -Ideal: (--loss_rate 0 --ooo_rate 0 --dupe_rate 0 --ber 0) - - time: 118.819721s - - transfer rate: 1410.0857887050586 bytes per second - -Good: (--loss_rate 0.01 --ooo_rate 0.01 --dupe_rate 0.01 --ber 1e-8) - - time: 1239.808353s - - transfer rate: 135.1386281553791 bytes per second - -Medium: (--loss_rate 0.02 --ooo_rate 0.02 --dupe_rate 0.02 --ber 1e-6): - - time: 2393.281579s - - transfer rate: 70.00680633241944 bytes per second - -Terrible: (--loss_rate 0.1 --ooo_rate 0.03 --dupe_rate 0.05 --ber 1e-3): - - time: Infinity - - transfer rate: SLOW - -Pros: - - Ensures data is correctly transferee - - There is almost no chance of data error - - Packets arrive in sequential order - - Very reliable when the connection is decent, performs well within reasonable amount of time - - Will be able to run and sustain even under terrible conditions, with almost no data error -Cons: - - It is not using the maximum bandwidth at all - - Transfer rate is very low since is sending lines - - It require insane amount of time with non ideal conditions - - Under terrible conditions, the transfer will last indefinitely - - Not taking advantage of the full bandwidth - -Possible additions: - - Add initial handshakes for the receiver to know what to name the file - - Add timeout phase to break out indefinite run times with terrible connection - - Consider revamping the algorithm to use more bandwidth -Protocol sequence diagram: - -Sender Receiver - | ---------------line 0------------------> | - | <--------------ACK for line 0----------- | - | ---------------line 1------------------> | - | <--------------ACK for line 1----------- | - | ---------------line 2------------------> | - | <--------------ACK for line 2----------- | - | ---------------line 3------------------> | - | <--------------ACK for line 3----------- | - | ---------------line 4------------------> | - | <--------------ACK for line 4----------- | - | ---------------line 4------------------> | - | <--------------ACK for line 4----------- | - | ---------------line 5------------------> | - | <--------------ACK for line 5----------- | - | ---------------line 6------------------> | - | <--------------ACK for line 6----------- | - | ---------------line 7------------------> | - | <--------------ACK for line 7----------- | - | ---------------line 8------------------> | - | <--------------ACK for line 8----------- | - | ---------------END ------------------> | - | <--------------END---------------------- | -Sender Receiver - -Packet structure: -Each packet is representing a line of the file. Header is the index. All packets arrive at sequential order. - - structure: encoded Header + \t + encoded string + \t + raw data string - -Encoded Header: - - Index of the packet, encoded using base64 - -Encoded String: - - The content of the line, encoded using base64 - -Verify Method: - - Header must arrive in order, discard packet if is out of order and wait for resend - - The decoded encoded string must match the raw data string. Otherwise, packet is corrupted and ask for resend - -- 2.24.1