# Network protocols research ## Prerequisites Ensure you have the following installed on your system: - [libvirt](https://libvirt.org/) (latest version recommended) - [Terraform](https://developer.hashicorp.com/terraform) (latest version recommended) - [Wireshark](https://www.wireshark.org/) (latest version recommended) ## Deploying environment NOTE: You must have `libvirt` daemon running ### Goto Terraform directory ```bash cd terraform ``` ### Create and edit dotenv file ```bash cp .env.template .env ``` ### Add client and server records to `/etc/hosts` ```bash # ... 10.6.6.10 client 10.6.6.20 server ``` ### Init Terraform ```bash terraform init ``` ### Start the environment ```bash terraform apply ``` NOTE: Wait for several minutes until all required things will be provided to the vms ## CheatSheet ### Commands for `client` ```bash # For HTTP/1.1 (TCP) curl server:80/MB.file -o MB.file # For HTTP/2 (TCP) curl --http2-prior-knowledge server:81/MB.file -o MB.file # For HTTP/3 (UDP) ./curl --http3-only --insecure https://server:443/MB.file -o MB.file # For TFTP (UDP) tftp server -c get /var/www/MB.file ``` ### Run benchmarks ```bash ./scripts/run_benchmarks output_dir ``` This script does the following things #### Change CC (on vms, 4 combinations for `tcp` protocols) ```bash sysctl net.ipv4.tcp_congestion_control=bbr|reno -w ``` #### Starts `tcpdump` on hypervisor with filters according to protocol ```bash tcpdump -i "$interface" -w "$pcap_file" "$filter" ``` #### Runs download command according to protocol Refer to [this](#commands-for-client) #### Stops `tcpdump` Using `capinfos` (wireshark builtin cmd utility) it gets first packet time in epoch and then shifts all packets using `editcap` (wireshark builtin cmd utility) to the beginning of epoch time. #### Merges `pcap` files ```bash mergecap -w merged.pcap dump1 dump2 ... ``` ### Change link profile ```bash ./scripts/change_profile ``` And follow the instructions This script just executes this command on `server` vm ```bash tc qdisc replace dev $interface root netem delay ${delay}ms loss ${loss}% ``` OR: ```bash tc qdisc del dev $interface root ```