This repository contains code and documentation to reproduce experimental results of the paper "Fragment Forwarding in Lossy Networks" published in IEEE Access.
- Martine S. Lenders, Thomas C. Schmidt, Matthias Wählisch, "Fragment Forwarding in Lossy Networks", in IEEE Access, vol. 9, pp. 143969–143987, October 2021, doi: 10.1109/ACCESS.2021.3121557
This paper evaluates four forwarding strategies for fragmented datagrams in the Internet of Things (IoT). We focus on classic end-to-end fragmentation, hop-wise reassembly, a minimal approach to direct forwarding of fragments, and direct forwarding utilizing selective fragment recovery. To fully analyze the potentials of selective fragment recovery, we include four common congestion control mechanisms. We compare all fragmentation strategies comprehensively in extensive experiments to assess reliability, end-to-end latency, and memory consumption on top of IEEE 802.15.4 and its common CSMA/CA MAC implementation. Our key findings include three takeaways. First, direct fragment forwarding should be deployed with care since higher packet transmission rates on the link layer can significantly reduce reliability, which can even further increase end-to-end latency because of highly increased link layer retransmissions. Second, selective fragment recovery can mitigate the problems underneath. Third, congestion control for selective fragment recovery should be chosen such that small congestion windows grow together with fragment pacing. In case of fewer fragments per datagram, pacing is less of a concern but the congestion window is limited by an upper bound.
The explicit RIOT version is included as a sub-module in this repository
(RIOT). It is based on the 2021.04 release of RIOT but also
contains all relevant changes to conduct the experiments. The PRs these changes
came from are documented within the git history and the history can be recreated
using the cherry-pick-prs.sh
(merge conflicts might
need to be resolved by hand). For more information use
cd RIOT
git log
The apps
directory contains the RIOT applications required for the
experiments, one for the data sink and one for the sources
sources and forwarders. Please refer to their README
s for
their usage.
The scripts
directory contains scripts for measuring the testbed as
described in Section IV-A.1 of the paper, to
conduct the experiments, and to plot the results of
both Section IV. COMPARISON OF FRAGMENT FORWARDING METHODS
and Section V. EVALUATION OF CONGESTION CONTROL WITH SFR.
Please also refer to their respective README
s for their usage.
To handle the rather specific dependencies of the scripts, we recommend using virtualenv:
virtualenv -p python3 env
source env/bin/activate
In their default configuration, the scripts will put their result files into the
results
directory. There, we also provided the
NetworkX edge
list file and the two graphical
representations (logical and geographic topology) of that network, for your
convenience.
For detailed usage, have a look into all the code and its documentation. The quickest way to start the experiments, given the provided network for Section IV. in results/ is bookable in the IoT-LAB and all requirements on the OS-side are fulfilled, see scripts README's, is to just run:
rm -rf env
virtualenv -p python3 env
source env/bin/activate
pip install -r ./scripts/experiment_ctrl/requirements.txt
# only one of the following two, the `descs.yaml` is newly generated for either
./scripts/experiment_ctrl/create_ff_descs.py # for Section IV experiments
./scripts/experiment_ctrl/create_cc_descs.py # for Section V experiments
./scripts/experiment_ctrl/setup_exp.sh