The ultimate goal is to migrate MQTT from TCP to QUIC and evaluate its performance. Partial results are gathered. However, the result is under refined investigation. It may still be a ongoing project in future.
- Implement SurgeMQ test Clients
- Get QuicGo server/client work(learn the interface)
- Evaluate SurgeMQ(plain) test Client in Mininet
- Migrate SurgeMQ to QUIC
- Evaluate SurgeMQ(QUIC) test Client in Mininet
We map the TCP connection to QUIC stream in MQTT implementation. However, it is also possible to map topics as seperate QUIC streams to avoid Head of Line Blocking(May be done in future).
Basically, QuicEcho include a plain echo server and client implementation for QUIC and TCP. QuicMQ include a testing MQTT server and client implementation on QUIC and TCP respectively. Only Golang is required for running them. The "github.com" and "golang.org" is the dependency library package for these applications.
The "surgemqQuicService" in "github.com" folder is modified version of surgemq module where in Quic version all TCP socket connection is replaced with Quic socket connection. You may need to investigate it depending what you want to explore in QuicMQ.
The python script in "src" is the measurement script we write for data collection. It directly require Mininet emulator for setting up network topology. We actually run it in a VirtualBox image which was included in the Readme reference.
-
QUIC stream perform better than TCP connection in lossy condition but not in perfect network
-
MQTT with QUIC perform better than MQTT with TCP in perfect network and especially when payload is small
- QUIC-go: https://github.com/lucas-clemente/quic-go
- SurgeMQ: https://github.com/surgemq/surgemq(Clear implementation but with lots of bugs)
- Golang 1.9
- Mininet 2.2 on Ubuntu 14.04LTS 64bit(https://github.com/mininet/mininet/wiki/Mininet-VM-Images)
- Set environment variable $GOPATH to proper path.
- Taking a Long Look at QUIC(https://conferences.sigcomm.org/imc/2017/papers/imc17-final39.pdf)
- draft-ietf-quic-transport-10(https://datatracker.ietf.org/doc/draft-ietf-quic-transport/)
- MQTT Specification(http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html)