 That worked great Hello, I am Tom Jones. I'm a researcher at the University of Aberdeen. I work on Internet transport. I currently work on an EU project, which is trying to build a new socket API to replace the one we have and that offers features and deployability and fall over and automation. It's really cool Before that, I'm going to talk about putting boxes on hills. So I started working at the University of Aberdeen in 2014 I was hired into the electronics research group where we do cool stuff with satellites and at that point we had gotten involved with the craziest UK funding idea you'll ever hear of It was an interdisciplinary hub called dotrural The the hub was made up of social scientists, ecologists biologists, transport people and by transport people I mean like cars and buses not interesting transport And social scientists if you ever want crazy ideas work with the social scientists It's unreal At the part of dotrural we did really strange things So here we have a picture of the internals of a camera trap we built the Project was driven by some sightings on the Cairngorn mountain range in Scotland There are sightings every year in a month of this really rare birds that people have been trying to track down forever And they want to try and get some idea of what its mating habits were and how often it visited sites And they looked at using commercial camera traps, but because we had all this funding we decided to build something a bit more complicated So I think this is one of the very early prototypes where we use microcontrollers and Six low-pan Later on we replaced all this with a Raspberry Pi an Arduino cameras Activation stuff and then we connected it all to a huge satellite modem and we had a satellite link that it hung off And what we did with this is we took it up the biggest man range in Scotland And this comes with its own problems this man range is covered in deer not not reindeer a bit More reindeer actually, but normal deer that run wild across here The deer use any rocks or stones they come across to rut against so they can remove their antlers So anything hard on ground level was going to be attacked repeatedly by angry deer So you think okay Well, you just raise it off the ground and you have a flimsy base But the kind of ground man range also sees the highest wind speeds in the UK The highest recorded wind speed in the United Kingdom was there like the end of last year like 136 miles an hour And I don't know what you can't really see because it's quite small But sadly just doesn't have any perforation because it gets to minus 50 C So that would freeze and the dish would stop working And but it's just a big kite that you put on a mountain and then it gets like 130 man-hour winds and stuff gets blown away And and and this was really hard to work with This this project worked great we could take pictures at mountains we did live demos the Bird was never seen again. We have no idea what happened to it But the camera took quite a good number of pictures of Heather You'd if you don't know Heather it all looks the same, but yeah, so we did this It was it was great fun to do a nice piece of engineering Doing this we did a lot of Satellite work and we've done satellite work in the past We have a long history of doing it and we started looking at how video applications worked over a satellite links So satellite links are different than normal links because you're talking to something way up in space You have round trip times of about 750 milliseconds So anything you do is going to see a massive delay and this software that's being written for the internet just isn't prepared for this There are bugs in Firefox where you can't use a satellite link that we fixed but Just having a strange set of links gives you strange circumstances Along with satellite work. We do a lot of TCP TCP congestion control stuff and this is where I start to get involved And a normal TCP connection has these states that are all time-based We go through slow start we end up in a steady state and any loss We see is going to cause a big problem to our time Slow start is a exponential growth phase for Oh picture somewhere So start is an exponential growth phase and on a satellite link It's being driven by acts on an RTT So when you have a loss down and you have to slow start again up to the slow start threshold You spend a lot of time So when you try and browse the web over a satellite link and you have some loss You have elements not load and things get really messed up and it's very hard to keep track of And at this time people just sort of decide to do TCP video over HTTP So instead of using live protocols that can adapt to loss Netflix and everyone decided that we will use TCP over HTTP because it always works it gets you firewalls and that's not a problem This would be really great But as the research community saw very quickly the HTTP video is very awkward There's a paper title that I'll never forget confused timid and unstable About the congestion response for YouTube and Netflix as soon as they see loss in the network They go. Oh, we'll slow down. This is this doesn't work it or You'll request the manifest over HTTP which just describes where the Next chunk of segments are and you'll download one of these segments and based on the amount of time it takes to get with segment You can decide whether or not to change rates so you could have adaptive video bit rates and And the segments of times so that they're not going to use the entire playback time so that you can keep a buffer rolling Hello The This leads to very bursty traffic and when we look at this HTTP traffic over Satellite links we we want to take as much as we can in a chunk So we end up with long periods where our TCP connection isn't doing anything and TCP is defined to close down there because we have a We have a congestion window that Yeah, so we have a congestion window that describes this and the congestion window was just a guess over the capable a guess about the capability of the network When we enter a period where we're not sending this guest gets worse and worse so We did work on something called new CWV new CWV is an adaptation for rate limited traffic Rate limited traffic is when the application is trying to send less than the network can provide And new CWV enhances something called congestion window validation, which is an older RFC And we provide a new method for guessing how much is in the pipe I got involved in this in 2014 the crazy social scientists We had the project went to India instead of working and I was a bit of a loss of what to do We had PhD students and one of my colleagues Rafa Losecchi had been working on this and he had an implementation in NS2 We done simulation in the lab. We had an implementation for Linux There's an issue in new CWV that both Linux and FreeBSD have pluggable congestion control But new CWV needs to do this estimation outside of the congestion control mechanisms so that we've not implemented something that is only Applicable for new Reno or cubic so that we can do it below the pluggable layer Of course, nobody wants to mess with the TCP stack like this. So it's very hard to deploy So I did this in meditation 2014. I pushed out publicly. I followed the drafts Right now the bug tracker says this but but who knows I Don't know what's next here and is doing a lot of work on the TCP stack There's there's a one problem with this in that new CWV needs packet pacing to really get a scene benefit and FreeBSD Doesn't have packet pacing in its network stack yet soon I hear but Randall at Netflix said this wasn't a problem because they had Vendor drivers that would do pacing for them so they could take new CWV We start talking about 2015 2017. This is only a month ago. So maybe maybe we'll see something soon so this is really just Context for how hard it is to do things in the internet We're trying to deploy a change to congestion control that will give benefit to most people Google Netflix Facebook can do whatever they want. They have all this equipment They can run the run hardware. They can run on private networks. They don't need these changes They can pay people to do it But anybody who's going to compete with them in the future needs these standardized changes And if we figure out how to do these changes, we should be able to deploy them and get them going But it's so hard to get us to move because the ITF doesn't want to do TCP changes if you want to change the Value of a field in an IP protocol. You're gonna have a horrible time. It's gonna take forever to get to the ITF No one will deploy in their networks and then it might not work because it just might not work This happened with ECN on the internet to like six years to get to the point where we decided we need And ECN fall back and now we're starting to see ECM marks coming through the network. I I only have the slugs. I think it's hilarious There's someone on Twitter tweeted this and if you press really hard you can get more packets So the the changes we're proposing with the neat project come from a couple of core issues One of them is trying to do this, but a lot of these problems come from how programmers see the access to the network rather than the Reality we have, you know Someone connects to a router and it goes through the cloud and that you get traffic at the other end and it works great And it's all fine But in real life, there's loads of stuff in the middle that's playing with your traffic that doesn't It has its own agenda for what it wants to do We have corporate proxies that want to break down TLS so they can see what you're doing People injecting ads firewalls that not necessarily misconfigured, but configured in a naive way where we'll allow TCP port 8443 UDP port 53. Nobody uses anything else, right? But that just completely stops any deployment of new protocols And of course there's a lot of assumptions about how we get onto the network in the past when we designed TCP it was for a very limited set of network access Technologies and the network tech that the network technologies were very homogenous. They were very similar 56k dial-up link is going to be similar for somebody else's I mean allowing for terrible phone lines It's going to be very similar, but mobile technology is like 2g 3g 4g you see wild spikes in latency you see wild spikes in bandwidth you see random loss and The algorithms we have are designed to treat loss as a sign of congestion where we can stop sending But everyone will know that they've been on their phone and The car moves four meters and you get a different model of what the network does because the trees in the way anymore And everything works much better And then on top of this we have the socket API and it's crap your nodding. It's great. All right some code on Windows and So the socket API has done very well for the last 35 years longer everything in the internet is now changed and it's different, but The access we have is okay. The issue really is that it doesn't offer Any way to move away from it and there's no way to move transport protocols if you wanted to do something with like this series of calls that You had two interfaces and you needed to choose between them you have to spend a lot of time right? Okay, so why bother? Why not move? everything into user space why not and You just do it on top of UDP and we'll push it across the network and it'll all work fine And this is this is happening a lot SETP which is developed by Michael Tuxen in free BSD offers a user space implementation that you can run over anything You can get UDP socket on and this is what's being rolled out in web browsers right now So this is a new transport protocol on the internet and it's it's running in in user space and it it works And this is what quick tries to do so quick as a quick from Google is a Transport protocol that sits under HTTP to And it offers nice reliable streams and you don't have head of line blocking between streams and has some cool crypto stuff But it's been developed by Google We're three years since it was announced and we have one implementation The the standards bodies moving very slowly they met last week It's not really getting anywhere And we have like Facebook push the draft last year about trying to do this generalized for UDP transport So they can build stuff. They don't tell anybody about but we have the same problem where big players can do this. It's fine like They can Will and do whatever they want because they have loads of money But nobody else gets to take advantage of this and the openness of the internet and the web It will really suffer if we do this and there's also TCP over UDP, which is just raw insanity and you shouldn't do it. So I Work on this It's quite complicated This is the picture we sent to the EU last year Yeah, and don't tell them but we're not going to do any of this we have a We have a new API for accessing the network it's Event driven it's built on top of Libu V If you've used Libu V that you know the networking stuff isn't great So we have a nice consistent API for doing that And we have a system for building and integrating new transport protocols that can run over the internet So we can run this completely directionally over completely directly over the sockets you have So we can run this over you just if you just have a system with easy P and UDP need more run over this and You'll get some benefits, but not all of them We can run on top of transports in user space So we can take advantage of the user space SDP library and if quick becomes a real transport protocol That's usable then we can just plug it into the system because we've built an extensible model for doing this and We have some things that allow us to apply magic to how we create connections Over here. We have just on the far right We have two information bases that capture stuff about the network and this is all mediated through a policy manager Policy manager allows you to direct at a high level what you want from your transport stream and the biggest thing we've implemented right now is fallback and homing over STP and TCP So you can say at a high level that you want a reliable ordered stream and the policy manager can use information we've captured about previous connections your interfaces Whatever else you might have SDN orchestrators in the network and we can do selection to find the best some vies of best transport protocol that is available and is going to work over IPv4 IPv6 TCP SCTP we have this you do one call we get all this for free Applications are a bit smaller. They look like this This one has the building and and Applications work through the API directly into the new user module user modules made of five pieces We have a framework we have the selection come we have selection components that Allow us to operate independent of transport protocol itself We have the policy system we have Transport components themselves. So we have quite a nice abstract API for this We have an abstraction on top of security protocols so with needs by setting one flag in a policy and providing some Certs you can get TLS or DTLS for free with a nice API. There's there's no dealing with the best SL and then we Integrate with the network itself Not only can we gather information from other connections that happen in the global system But we can gather information from things you have in the network So the the characteristic information base at the bottom here Is actually just a set of JSON files on disk that describe The highest speeds you've got on an interface the successful selection choices on an interface But it can be fed in from other places so we can look up MIBS and we can figure out what TCP congestion control algorithms You have and then provide that for selection from there Or we could integrate with an SDN Controller on your network and the SDN controller can then say I can create stuff for you if you need it Like we can we can make a new interface for you and it will work really well and we have all of this implemented now we have a We have a demo for one of our partners EMC which does Flow selection between small flows and big flows by specifying a file size You say you have a small file and you get the normal 10 megabit link with low latency specify a high file size and you get given a QoS mark that you set and then you get your traffic directed over a Higher latency bit higher bandwidth link and we're showing this to the EU in May So we have demos for this working Applications are very simple. So the architecture picture is really big and complicated, but it really boils down to almost nothing at all our Connection state is muted inside a context and we have one context per thread. We're working on this right now the With this we can then create floats. We have one single primitive for accessing the network and Application can choose its properties it wants to get for policy that the properties here or as a bit mask Which is what we had maybe a year ago. We now have properties defined as Jason so you can build more complicated things Set up some callbacks And then you do an open and you do an open and neat just handles everything else for you And this is what it looks like. This is how it hooks in further you get your events and you do reads and writes There are there are obviously issues between datagrams stream protocols But we are an active research project. So we're we're trying to resolve all of this So you get a nice API, but this is as complicated as we want things to be But you set the property for security you get DT less and it works You don't have to figure out your cypher suites or your trust chain. We find the most sensible thing to do here You you want a transfer protocol. It's reliable. We give you reliable transfer protocol and you just do reads and writes against it As after the last talk I just gave about the server side if you swap out the open for an accept the code is exactly the same Obviously that the flow semantics are a bit different because you get given flows instead of having a flow But it's all the same you just get the unconnected event and the code can be kept very very simple And because we're in a new project we have commercial partners One of our commercial partners is emcee Another one is Mozilla. So I spent all week in Plenary and Mozilla in Paris And we're trying right now for our debt for our demo sessions the EU in May to have Firefox doing selection between sctp and TCP and For a connection setup. We have this running on free BSD if anybody really cares They can bug Michael Tuxen and he he'll say go away or come back in a week What we get from this is is incredible though sctp if you if you don't know you can have a look at it, but it offers multi-homing and multi-path So the demo we have is a file download through HTTP and if you get TCP on your network You get a normal file download if you get sctp on your network, and you have multiple interfaces You get multi-path we do cmt so we can share the connections from the application you get twice the bandwidth I think that's awesome Someone's promised it to the EU so Yeah and Linux And we're developing all this on top of free BSD So this is the main impetus for the talk is that there's nothing free BSD specific in any of this We could do this on any platform It turns out because the sctp stack runs on free BSD It's the best place to run it because they have we have sensible networking and it's all easy and things compile properly But we do continuous integration on all the platforms we support if anybody can find a Windows developer We would love one, but I don't know the other much side And we have builds right now build bots that you can find through our github and running on arm free BSD heads stable net BSD OS 10 and you want to I Bet you was val grinded the field Yeah, and we need you projects. So we're very open all of the All of the research we're doing is open access and being made available as soon as we can all of the architecture and specifications We have we're releasing as soon as we have them available So if you want to read a 60 page document about why and how we'll stick with all together we have it not interesting though And all of the development is happening in real-time available. We have a public github. We'll take patches from anyone We really want patches from somebody If you feel like fixing our documentation then then we're doing great Yeah They know they want us to show that we have convinced other people to use this Yeah, so I Don't know how you measure this and Yeah, so all the codes online you can go and have a look it's really easy to check out very few dependencies There are examples for how to drive everything If you have some networking problem that you really want to solve with protocols But you can't trust the network to be reliable. This won't this will work for it We are a year into development. So the things are a bit janky Later, we're gonna do some bindings to Python and maybe go so that you can access this through say in our languages And you can use everything And but it's all there Yeah, and that's me. I have loads of time for questions Can I just repeat that source recorded I think this is amazing. I think we should be key noted at live at large Unix conferences What what's the bit you're having problems with the repel Red No, no, no, we try to avoid threads because there anything's too complicated Yeah Yeah Yeah No, I'm aware of I don't So the question is if we have issues with thread pools on LibuV and I haven't I haven't seen any traffic in the issues from this I Think we'll get more issues as people try and do more but we have Firefox running on this right now. So Firefox is a really big thing And it's really really stressed the code we've written it's made it. It's showed loads of bugs. It's been great to do We sit found loads of issues It would be good to know It would be good to have bigger workloads go through we did some performance stuff and we managed to push push six gigabit through it So it's okay as a networking library. There's no issue there They haven't been started if you would like to start it So the problem right now is we don't have a stable API So even the example programs we have keep breaking and you don't want to build on top of that Especially if you've got to deal with different languages I'm hoping that in the next six months. We'll have something stable enough that The demos we're building don't keep breaking and I think the Firefox work we've done is going to force that to happen because Daniels Steinberg the the curl developer works for Mozilla for us on this and he's very annoyed every time we change the API so I Think we're we're gonna have to approach this we spent a lot of time So that so the four partners we have we have a tiny Norwegian company called Sellaway We have EMC Mozilla and Cisco and Cisco are very interested in being able to abstractly deal with names and do Stuff like connect to a name rather than a service At some point the people from you I owe wanted to get rid of port numbers. We top them down If you wanted to build something on top of the same networking library that resolved the networking issue You could definitely do it If we have a good DNS library integrated and we have great DNS But if you had a a more abstract system, I think this would be a nice place to hook into Okay, cool. Thank you. Oh I have heard of this. Yeah, so that Rena protocol stack. Yeah, I was asked this when I give us talk last year somewhere else Yeah, there's there's tons of work in this space as well. This isn't we're not unique in any way There's like five or six different projects that are different levels People will have seen Brian Trammels post sockets draft that picked such a better name than we did Yeah, so there's there are lots of efforts trying to try to fix this API because this is now being seen as a stumbling block Okay. Thank you very much