A little more than a year ago I first blogged about working on support for UDP connections in QuantumGate, and for the past few weeks I’ve focused on getting UDP support in QuantumGate ready for its initial release. I had originally planned for releasing UDP support much earlier around December 2020 or January 2021 but other stuff got in the way, such as Cyberpunk and the two lawsuits I started against the criminal local government. On October 30th 2021 I was finally able to release version 0.3.0 of QuantumGate with support for UDP connections.
Like I mentioned a year ago, support for UDP connections brings some cool new features to the library, which I have written about in more detail in the documentation on GitHub. One of those features is the support for IP/Network roaming, which allows a peer to switch IP addresses and/or networks while staying connected to other peers. Another one is the support for long-lived connections with interruptions, where a peer can disconnect from the Internet for a long period of time, during which all connections are suspended; the connections are resumed again when the peer connects back to the Internet. It’s kind of magical when you see this working for the first time. You can read more details about this in the documentation.
QuantumGate makes UDP connections using a new protocol that I had to develop; it’s basically the UDP protocol with reliable message delivery built on top of it. The new protocol offers some very basic protections against various kinds of attacks, but relies on the main communications protocol in QuantumGate (as used in TCP connections) to provide the more robust security features. To be more specific, the UDP protocol is NOT designed to be used by itself; it MUST be used together with the main QuantumGate messaging protocol. I didn’t want the UDP protocol to add too much additional overhead on top of the main protocol as I wanted the speed of UDP connections to be the same or faster than TCP connections. And I think I have largely succeeded, provided that you try it on a computer with enough CPU power (the extra processing for UDP connections requires additional CPU capacity to be as fast as TCP). On my development computer with an AMD Ryzen 9 3950X CPU I get roughly identical transfer speeds between UDP and TCP connections, which is 1Gbit/s. And there is still lots of room for optimizations in the code for UDP support.
But the UDP protocol isn’t finished yet, as I have some very, very cool additional features that I am going to add to the protocol, one of which, as far as I know, will be a first and never before seen feature. This is also why I haven’t provided any detailed technical documentation yet on the UDP connection protocol as things are still going to change in the near future. UDP connections are still experimental in the 0.3.0 release of the library, although quite usable.
What I am going to focus on now however, is adding support for Bluetooth connections in QuantumGate. This is something I want to get done with high priority as it is an essential feature to have. When there’s no Internet access (for example, when criminal governments decide to shut down the Internet), it’s important that people can still connect to each other and share information. And one way of doing that is through Bluetooth connections. It should then be possible to create a peer-to-peer (wireless ad-hoc) mesh network of devices connected over Bluetooth. I hope to have this finished by early 2022, after which I’m going to look at finishing the UDP connection protocol.