This binary is a minimized BATS™ protocol with the following limitations added:
- limited maximum input rate to 100Mbps.
- limited maximum running time to 80 seconds.
- limited feature set.
- required a software license to run.
For further collaboration, visit us at n-hop Technologies Limited.
To run the tests on your local machine, please contact peng.lei@n-hop.com to obtain a free license key.
The BATS™ Protocol is a distributed network protocol based on the concept of network coding. It employs a novel coding scheme (BATS™) to achieve high throughput and low latency. The protocol software is implemented in modern C++ and provides basic functionality for the L3, L4, and L5 layers of the OSI seven-layer model. Currently, the BATS™ Protocol is not open-source.
The BATS™ Protocol supports multi-hop, multi-path, and multicast transmission modes. It features a revolutionary congestion control algorithm optimized with network coding technology and a dynamic adaptive coding rate based on packet loss detection. Compared to traditional protocols like TCP and UDP, as well as commonly used FEC transmission protocols like KCP, the BATS™ Protocol is more efficient and applicable to a wider range of scenarios.
At the OSI network layer (L5), the BATS™ Protocol implements a rich set of IPC interfaces and supports multiple common programming languages, such as C++ and Python. This IPC serves as the interface between users and the BATS™ Protocol, allowing any protocol to be converted into the BATS™ Protocol.
At the OSI transport layer (L4), the BATS™ Protocol implements two transmission modes: BTP and BRTP:
-
BTP (BATS Transmission Protocol) is the unreliable transmission mode of the BATS™ Protocol.
Here, "unreliable" is a relative term, meaning that data transmission does not guarantee 100% reliability. However, in practical tests, BTP achieves a reliability rate close to 99% in scenarios where the packet loss rate is less than or equal to 30%(see evidence in UDP test). BTP is typically suited for scenarios where a small amount of packet loss is acceptable but low latency is crucial, such as real-time video calls.
-
BRTP (BATS Reliable Transmission Protocol) is the reliable transmission mode of the BATS™ Protocol.
BRTP offers the same transmission reliability as TCP, but unlike TCP's stream-oriented nature, BRTP is a datagram-oriented reliable transmission protocol.
-
BRTP_PROXY is an optimized version of BRTP designed to accelerate the transmission of TCP traffic.
At the OSI network layer (L3), the BATS™ Protocol supports both dynamic and static routing. The dynamic routing protocols currently supported include OLSR and Open-R.
Already implemented advanced features include:
- BATS Transmission Protocol (BTP)
- BATS Reliable Transmission Protocol (BRTP)
- Multi-hop transmission
- Link aggregation
- Adaptive coding rate
- Congestion control
- Dynamic routing support
Features coming soon:
- Advanced Congestion control algorithm
- Multi-path transmission
The BATS™ Protocol has the competitive performance in terms of ultra-low latency; and the advantage is further amplified in multi-hop transmission networks.
In the test, we used some protocols and tools which are listed in Protocols and Tools.
In RTT measurement, KCP
represents the RTT for TCP messages transmitted over KCP
; and BTP
,BRTP
,BRTP_PROXY
have the same meaning. TCP messages are transmitted in a rate of 100 packets per second with fixed length of 512 bytes.
h0 -- h1
Take h0
as the sender and h1
as the receiver.
- TCP Throughput and RTT measurement
-
TCP Throughput under different link latency and loss rate:
- Purpose: To evaluate the BATS protocol performance under different link latency and loss rate.
- Chosen BATS Protocol: BRTP.
Loss Rate/Latency | 10ms | 30ms | 50ms | 70ms | 90ms | 110ms |
---|---|---|---|---|---|---|
0.00% | 91.7 | 90.5 | 86.1 | 87.1 | 84 | 79 |
2.00% | 81.9 | 80.6 | 77.6 | 72.1 | 59.7 | 54.3 |
4.00% | 77.5 | 76.8 | 72.9 | 70.8 | 58.8 | 52.3 |
6.00% | 75.9 | 75.2 | 69.6 | 56.6 | 51.5 | 39 |
8.00% | 73.3 | 72.4 | 68.5 | 65.9 | 48 | 42 |
10.00% | 70.1 | 68.8 | 66.3 | 62.8 | 49.4 | 28.6 |
This test can be repeated in Oasis with running the following command:
sudo python3 src/start.py --containernet=default -p src/config -t bats-protocol-rtt-loss-test.yaml
sudo python3 ./src/tools/extract_data.py test_results/test1000
Outputs of the above command:
- test_results/test1000/throughput_latency_loss.csv (Throughput data table in csv format)
- test_results/test1000/throughput_latency_loss.svg (3D bar plot)
- the original test records and logs for each selected latency and loss rate, such as
test_results/test1000/topology-10
The purpose of this test is to evaluate the BATS protocol reliability in lossy networks.
h0 -- h1
Take h0
as the sender and h1
as the receiver.
h0 -- h1 -- h2 -- h3
Take h0
as the sender and h3
as the receiver.
The above tests can be repeated by Oasis with running the following table of test yaml file:
Test Name | Description | Test Yaml File |
---|---|---|
Single hop test | Single hop test | protocol-performance-comparison.yaml:test2 |
Multiple hops test | Multiple hops test | protocol-performance-comparison.yaml:test3 |
Take Multiple hops test
as an example:
sudo python3 src/start.py -p src/config --containernet=default -t protocol-performance-comparison.yaml:test3
For usage instructions for Oasis, please refer to the Get Started.