All Projects → SoonyangZhang → Drainqueuecongestion

SoonyangZhang / Drainqueuecongestion

Congestion control algorithms evaluation on ns3

Labels

Projects that are alternatives of or similar to Drainqueuecongestion

Reading And Annotate Quic
quic、prot_quic、goquic、libquic源码中文注释分析,增加C++ quic-client和quic-server example 程序,便于快速掌握学习谷歌quic库源码和学习quic协议,作为新的网络加速协议,可以根据实际需要应用于自己的工程项目中。把google quic源码和goquic合并到一个工程编译安装
Stars: ✭ 272 (+1082.61%)
Mutual labels:  quic
Quiche
🥧 Savoury implementation of the QUIC transport protocol and HTTP/3
Stars: ✭ 5,481 (+23730.43%)
Mutual labels:  quic
Ngtcp2
ngtcp2 project is an effort to implement IETF QUIC protocol
Stars: ✭ 589 (+2460.87%)
Mutual labels:  quic
Yomo
🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.
Stars: ✭ 279 (+1113.04%)
Mutual labels:  quic
Deimosc2
DeimosC2 is a Golang command and control framework for post-exploitation.
Stars: ✭ 423 (+1739.13%)
Mutual labels:  quic
Gsnova
Private proxy solution & network troubleshooting tool.
Stars: ✭ 509 (+2113.04%)
Mutual labels:  quic
quic-network-simulator
ns3-based network simulator for QUIC testing
Stars: ✭ 77 (+234.78%)
Mutual labels:  quic
Lsquic
LiteSpeed QUIC and HTTP/3 Library
Stars: ✭ 727 (+3060.87%)
Mutual labels:  quic
Node Libcurl
libcurl bindings for Node.js
Stars: ✭ 447 (+1843.48%)
Mutual labels:  quic
Quic Go
A QUIC implementation in pure go
Stars: ✭ 6,085 (+26356.52%)
Mutual labels:  quic
Nghttp3
HTTP/3 library written in C
Stars: ✭ 324 (+1308.7%)
Mutual labels:  quic
Stellite
Stellite project is a client library and server application that offers an easy way to develop, build, and implement client/server running primarily over the QUIC protocol developed by Google as part of the Chromium project.
Stars: ✭ 422 (+1734.78%)
Mutual labels:  quic
Openlitespeed
Our high-performance, lightweight, open source HTTP server
Stars: ✭ 540 (+2247.83%)
Mutual labels:  quic
Awesome Live Stream
Webrtc && Nginx && DASH && Quic 学习资料收集,持续更新中
Stars: ✭ 290 (+1160.87%)
Mutual labels:  quic
Aioquic
QUIC and HTTP/3 implementation in Python
Stars: ✭ 600 (+2508.7%)
Mutual labels:  quic
qlog
The IETF I-D documents for the qlog format
Stars: ✭ 36 (+56.52%)
Mutual labels:  quic
Fatt
FATT /fingerprintAllTheThings - a pyshark based script for extracting network metadata and fingerprints from pcap files and live network traffic
Stars: ✭ 490 (+2030.43%)
Mutual labels:  quic
Docker Nginx Http3
Alpine Linux image with Nginx 1.19.4 (mainline) with HTTP/3 (QUIC), TLSv1.3, 0-RTT, brotli, NJS support, and 10 MB size. All built on the bleeding edge for max performance. Built on the edge, for the edge.
Stars: ✭ 820 (+3465.22%)
Mutual labels:  quic
Python Proxy
HTTP/HTTP2/HTTP3/Socks4/Socks5/Shadowsocks/ShadowsocksR/SSH/Redirect/Pf TCP/UDP asynchronous tunnel proxy implemented in Python 3 asyncio.
Stars: ✭ 692 (+2908.7%)
Mutual labels:  quic
Pyexfil
A Python Package for Data Exfiltration
Stars: ✭ 554 (+2308.7%)
Mutual labels:  quic

DrainQueueCongestion

Algorithms

Congestion control algorithms evaluation on ns3
code is referenced from quic protocol for simulation purpose.
Implemented congestion control algorithms:

  • [x] Reno cubic veno westwood c2tcp elastic
  • [x] vegas tcp-lp copa
  • [x] BBR PCC BBRv2(ecn)
  • [x] DCTCP(ecn)

Supported multipath congstion control algorithms:

  • [x] lia wvegas olia balia
  • [x] couple BBR

Configuration

As for ns3 test case, the wscript gives clear hint how to arrange this file
in the right position in ns3.
And add the CPLUS_INCLUDE_PATH flag in /etc/profile, for example:

export DQC=/home/zsy/C_Test/ns-allinone-3.xx/ns-3.xx/src/dqc/model/thirdparty  
export CPLUS_INCLUDE_PATH=CPLUS_INCLUDE_PATH:$DQC/include/:$DQC/congestion/:$DQC/logging/  

The path /home/zsy/C_Test/ is where I put ns-allinone-3.xx under, substituting it with your ns3 path.
Create a file named "traces" under /xx/xx/ns-allinone-3.xx/ns-3.xx/ for data collection.

Run

Run simulation on ns3.26:

sudo su  
source /etc/profile  
./waf --run "scratch/bbr-var-eva-3.26 --it=1 --cc=bbr"  

Of cource, the project can be running on newer version of ns3,
as long as the topology is built. For example, on ns3.30.

sudo su  
source /etc/profile  
./waf --run "scratch/bbr-var-eva-3.30 --it=1 --cc=bbr"  

The difference is only in BuildExampleTopo function.

Trace

The code in dqc/model/dqc_trace.cc is used to collect send rate (E_DQC_BW),
one way delay (E_DQC_OWD), raceived rate (E_DQC_GOODPUT).
In bbr-var-eva-3.30.cc, the enable trace flag is:

trace1.Log(log,DqcTraceEnable::E_DQC_OWD|DqcTraceEnable::E_DQC_BW|DqcTraceEnable::E_DQC_GOODPUT);  

The E_DQC_OWD will create file to collect data.
The callback function (DqcTrace::OnOwd) is registered in InstallDqc function to write data to file.

recvApp->SetOwdTraceFuc(MakeCallback(&DqcTrace::OnOwd,trace));  

The meaning of data in it_bbr_flowid_owd.txt can be found in DqcTrace::OnOwd.

void DqcTrace::OnOwd(uint32_t seq,uint32_t owd,uint32_t size){
    if(m_owd.is_open()){  
        char line [256];  
        memset(line,0,256);  
        float now=Simulator::Now().GetSeconds();  
        sprintf (line, "%f %16d %16d %16d",  
                now,seq,owd,size);  
        m_owd<<line<<std::endl;  
    }    
}  

the receipt time of a packet, packet number, owd, packet size.

Results

BBR simulation results:
Test with 3 flow in a point to point channel(3Mbps, one way delay 100ms, max queue length 300ms).
bandwidth fairness(drain_to_target_(false)):
avatar
one way transmission delay
avatar
BBR with the parameter (drain_to_target_(true)):

./waf --run "scratch/dqc-test --it=1 --cc=bbrd"  

rate dynamic:
avatar
one way transmission delay:
avatar
BBRv2:
rate dynamic:
avatar
one way transmission delay:
avatar
Cubic simulation results:
bandwidth fairness:
avatar
one way delay
avatar
The paper on copa: Copa: Practical Delay-Based Congestion Control for the Internet.
Copa simulation results:
bandwidth fairness:
avatar
one way delay
avatar
There is a review papar to evaluate the performance of these algorithms(https://arxiv.org/abs/1909.03673).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].