Reliable Data Transfer Protocol over Multiple Interfaces
Budget: $30 – $250 USD
You will design and implement a client-side protocol for reliable transfer of a given file from a server. The server-side of the protocol is provided for testing purposes. The server is dockerized. Your client will run on a host (your computer) with two network interfaces and it will use both interfaces simultaneously to download the file from the server. If you have a single network interface, you can use the same interface but over two different ports.
The goal is to come up with the fastest protocol that will download any requested file in the shortest
amount of time. Your protocol will be built on top of UDP (you will have to design and implement the
reliable data transfer protocol using UDP). The scenario can be sketched as follows:
You can use any computer with two interfaces (two Ethernet interfaces or one Ethernet and one WiFi
interface) as the client. Alternatively, you can use a single interface but two ports on the client and two
ports on the server.
On the server side, we will apply throttling, rate limiting and/or packet loss to the transmission to induce problems on each connection. The client must overcome these issues and successfully transfer the whole file. If one connection is slower than the other one, the client should try to transfer more data on the faster connection. However, note that connection speeds (and loss rates) will vary over time, meaning that you need to monitor what is happening with your connections and alter your strategy
accordingly. The server will host multiple files of different sizes (like 100 KB, 10 MB and 300 MB) and
your client will be tested with each of them. Bandwidth throttling, delay, packet loss, etc. are emulated on the server side using TC. The testers may use other TC scripts so your protocol must be adaptive.
Your client should take the server’s IP address and port number pairs as an argument in the command
line.
E.g. my_client 10.0.0.1:900 10.0.0.1:901
Here, the server has two IP addresses, and one port for each IP address. When testing, make sure
these values correspond to the server’s IP addresses and port numbers, and there are no NAT devices
between your client and server. If you are using a single interface but different ports on the server, you
will be using the same IP address in the command line. Note that you are not supposed to address the
NAT traversal issues, so run your code in a local area network.
Once the client starts, it should first ask the server for the list of the files available to download. This is
to be achieved by sending a request with request_type=1. Once the response is
received from the server, the client should print out the file list on the screen, and wait for the user’s
selection.
I will share the related documents afterwards
The goal is to come up with the fastest protocol that will download any requested file in the shortest
amount of time. Your protocol will be built on top of UDP (you will have to design and implement the
reliable data transfer protocol using UDP). The scenario can be sketched as follows:
You can use any computer with two interfaces (two Ethernet interfaces or one Ethernet and one WiFi
interface) as the client. Alternatively, you can use a single interface but two ports on the client and two
ports on the server.
On the server side, we will apply throttling, rate limiting and/or packet loss to the transmission to induce problems on each connection. The client must overcome these issues and successfully transfer the whole file. If one connection is slower than the other one, the client should try to transfer more data on the faster connection. However, note that connection speeds (and loss rates) will vary over time, meaning that you need to monitor what is happening with your connections and alter your strategy
accordingly. The server will host multiple files of different sizes (like 100 KB, 10 MB and 300 MB) and
your client will be tested with each of them. Bandwidth throttling, delay, packet loss, etc. are emulated on the server side using TC. The testers may use other TC scripts so your protocol must be adaptive.
Your client should take the server’s IP address and port number pairs as an argument in the command
line.
E.g. my_client 10.0.0.1:900 10.0.0.1:901
Here, the server has two IP addresses, and one port for each IP address. When testing, make sure
these values correspond to the server’s IP addresses and port numbers, and there are no NAT devices
between your client and server. If you are using a single interface but different ports on the server, you
will be using the same IP address in the command line. Note that you are not supposed to address the
NAT traversal issues, so run your code in a local area network.
Once the client starts, it should first ask the server for the list of the files available to download. This is
to be achieved by sending a request with request_type=1. Once the response is
received from the server, the client should print out the file list on the screen, and wait for the user’s
selection.
I will share the related documents afterwards
Related categories:
Business, Accounting, Human Resources & Legal
Programming
Docker
Network Engineering