Skip to content

LabNConsulting/iptfs

Repository files navigation

#

#

#

#

#

Overview

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.

Fixed-Size Constant Bandwidth

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.

Results

Early code throughput tests of IP in UDP/TCP

C w/ select (1 pp)

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

Python TCP threaded.

1500 MTU

(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

9000 MTU

------------------------------------------------------------
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

C TCP threaded.

1500 MTU

(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

9000 MTU

(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

C UDP Threaded.

1500 MTU (transport is UDP on 9000 MTU)

------------------------------------------------------------
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

9000 MTU (transport is UDP on 9000 MTU interface)

------------------------------------------------------------
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

8970 MTU (transport is UDP on 9000 MTU interface)

------------------------------------------------------------
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

About

IP-TFS reference code and related IETF docs

Resources

License

Stars

Watchers

Forks

Packages

No packages published