I know the pieces fit 'Cause I watched them tumble down -- Tool, Schism (2001) Mariah Carey signals it almost Christmas, so it sounds like as good a time for a blog post. Been a long time since my last one. My plan for this year for Ouroboros was to clean up the flow allocator code, then add authentication and clean up and fix packet loss handling (EFCP), fix congestion avoidance, and then leave…
A few weeks back I had a drink with Thijs who is now doing a master’s thesis on Loc/Id split, so we dug into the concepts behind Locators and Identifiers and see if matches or in any way interferes with the Ouroboros network model. For this, we started from the paper Locator/Identifier Split Networking: A Promising Future Internet Architecture 1 . Loc/Id split? In a nutshell, Loc/Id split…
Cleaning up flows While I was browsing through some oping code (trying to get a feeling about how to do broadcast ), I stumbled about the cleaner thread . As we can see, it was used to clean up ‘stale’ flows (sanitized): void * cleaner_thread ( void * o ) { int deadline_ms = 10000 ; while ( true ) { for ( /* all active flows i */ ) { diff = /* diff in ms between last valid ping packet…
This week I completed the (probably final) implementation of flow liveness monitoring, but now in the application. In the next prototype version (0.19) Ouroboros will allow setting a keepalive timeout on flows. If there is no other traffic to send, either side will send periodic keepalive packets to keep the flow alive. If no activity has been observed for the keepalive time, the peer will be…
A few weeks back I wrote a post about Ouroboros flows vs TCP connections, and how “half-closed connections” should be handled in the Ouroboros architecture. This was very basic functionality that was sorely missing. You can refresh your memory on that post if needed. Today I wrapped up an initial implementation without whistles and bells (fixed timeout at 120s), and I’ll share a…
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. -- Tony Hoare Introduction There are two important design principles in computer science that are absolutely imperative in keeping the…
Today, Max Inden from the libp2p project gave a very interesting presentation at FOSDEM 2022 about decentralized hole punching, project Flare. The problem is this: if servers A and B are each behind a (possibly symmetric) NAT firewall, they can’t directly communicate unless the firewall opens some ports from the external source to the internal LAN destination. Let’s assume A’s…
A couple of days ago, I received a very good question from someone who was playing around around with Ouroboros/O7s. He started from the oecho tool. oecho is a very simple application. It establishes what we call a “raw” flow. Raw flows have no fancy features, they are the best-effort class of packet transport (a bit like UDP). Raw flows do not have an Flow-and-retransmission control…
A discipline doesn’t mean that you make sure that you have breakfast at eight o’clock in the morning and you are out of the house by half past eight. A discipline is that you… if you conceive some thing, then you decide whether or not it’s worth following through, and if it’s worth following through then you follow it through to its logical conclusion, and do it with the best… to the best of your…
This weekend we got word from the paper we submitted to JACM early 2019. Not too surprised that it was rejected. Actually, rather surprised that we still hear of it after 3 years. So thanks to the reviewer for his/her time. The rejection was justified, and I got something useful out of it, despite a couple of the reviewer’s comments being very wrong 1 . I’ve written over 30 research…
Nothing is as practical as a good theory -- Kurt Lewin How does Ouroboros handle routing and how is it different from the Internet? How does it do multicast? That’s a good subject for a blog post! I assume the reader to be a bit knowledgeable about the Internet Protocol (IP) suite. I limit this discussion to IPv4, but generally speaking it’s also applicable to IPv6. Hope you enjoy the…
There are two kinds of researchers: those that have implemented something and those that have not. The latter will tell you that there are 142 ways of doing things and that there isn't consensus on which is best.The former will simply tell you that 141 of them don't work. -- David Cheriton When I talk to someone that’s interested in Ouroboros, a question that frequently pops up is how the…
I recently did some quick tests with the new congestion avoidance implementation, and thought to myself that it was a shame that Wireshark could not identify the Ouroboros flows, as that could give me some nicer graphs. Just to be clear, I think generic network tools like tcpdump and wireshark – however informative and nice-to-use they are – are a symptom of a lack of network security.…
The upcoming 0.18 version of the prototype has a bunch of big additions coming in, but the one that I’m most excited about is the addition of congestion avoidance. Now that the implementation is reaching its final shape, I just couldn’t wait to share with the world what it looks like, so here I’ll talk a bit about how it works. Congestion avoidance Congestion avoidance is a…
Support for other programming languages than C/C++ has been on my todo list for quite some time. The initial approach was using SWIG , but we found the conversion always clunky, it didn’t completely work as we wanted to, and a while back we just decided to deprecate it. Apart from C/C++ we only had a rust wrapper . Until now! I finally took the time to sink my teeth into the bindings for…
With the longer weekend I had some fun implementing (parts of) the Flow and Retransmission Control Protocol (FRCP) to the point that it’s stable enough to bring you a very quick demo of it. FRCP is the Ouroboros alternative to TCP / QUIC / LLC. It assures delivery of packets when the network itself isn’t very reliable. The setup is simple: we run Ouroboros over the Ethernet loopback…
As promised, I added equal cost multipath routing to the Ouroboros unicast IPCP. I will add some more explanations later when it’s fully tested and merge into the master branch, but you can already try it. You will need to pull the be branch. You will also need to have fuse installed to monitor the flows from /tmp/ouroboros/ . The following script will bootstrap a 4-node unicast network on…
Some recent news – Multi-Path TCP (MPTCP) implementation is landing in mainstream Linux kernel 5.6 – finally got me to integrate the equal-cost multipath (ECMP) implementation from Nick Aerts’s master thesis into Ouroboros. And working on the ECMP implementation in gives me an excuse to rant a little bit about MPTCP. The first question that comes to mind is: Why is it called…
Yesterday there was a bit of an unexpected spike in interest in Ouroboros following a post on HN . I’m really humbled by the response and grateful to all the people that show genuine interest in this project. I fully understand that people would like to know a lot more details about Ouroboros than the current site provides. It was the top priority on the todo list, and this new interest…