#
#
#
#
#
This software is a proof of concept of IP-TFS as described in draft-chopps-ipsecme-iptfs-00. For simplicity sake it does not actually use IPsec but instead a more simple UDP outer encapsulation.
For an in depth look at the protocol and the packet formats see draft-chopps-ipsecme-iptfs-00.
The goal of IP-TFS is to hide the size and frequency of the packets. To do this we use a constant send IPsec tunnel of same sized packets. The tunnel bandwidth and frame size are the inputs to the algorithm. The frame size can be set based on path MTU discovery for optimal performance. Given those inputs we can calculate the frequency of frame sized tunnel packets we should send in order to achieve the requested bandwidth.
The tunnel can operate in 2 modes, a non-congestion controlled and an congestion controlled mode. The Non-CC mode should only be used where the user has full administrative control over the path the tunnel will take, and can therefor guarantee the bandwidth. In this case packet loss should be signaled so that any failures due to a lack of bandwidth can be corrected. With the CC mode we adapt to network congestion and downgrade the bandwidth to accommodate.
For both modes we send regular reports from the receiver to the sender on packet drops over a sequence of packets. This can be used to alert in the inelastic mode or as input into a congestion control algorithm for the elastic mode. The output of the congestion control algorithm if used will adjust the frequency that we send our packets until the congestion is accommodated.
00:00 [10:17:20 dpdk2:~/w/tcptfs]$ iperf -c 192.168.30.67
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 33854 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.3 sec 479 KBytes 381 Kbits/sec
(venv) 00:08 [22:04:41 dpdk2:~/w/tcptfs]$ iperf -c 192.168.30.67
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34010 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 107 MBytes 89.6 Mbits/sec
(venv) 00:10 [22:05:14 dpdk2:~/w/tcptfs]$ iperf -c 192.168.30.67
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34014 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 116 MBytes 97.0 Mbits/sec
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 325 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34060 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 636 MBytes 533 Mbits/sec
(venv) 00:02 [03:22:52 dpdk2:~/w/tcptfs]$ iperf -c 192.168.30.67
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34038 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.01 GBytes 866 Mbits/sec
(venv) 00:10 [03:30:55 dpdk2:~/w/tcptfs]$ iperf -c 192.168.30.67
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 325 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34056 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 3.04 GBytes 2.61 Gbits/sec
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34100 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.27 GBytes 1.09 Gbits/sec
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 325 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34098 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 2.66 GBytes 2.28 Gbits/sec
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 325 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34102 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 4.00 GBytes 3.43 Gbits/sec
------------------------------------------------------------
Client connecting to 192.168.30.67, TCP port 5001
TCP window size: 325 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.30.66 port 34104 connected with 192.168.30.67 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 3.82 GBytes 3.28 Gbits/sec