Contents

A short introduction to software defined networks

Software defined networks! If you are active in the field of computer networks, this could be a term you heard before. In case you haven’t, this post is for you!

Traditional networks

To understand software defined networks, you first need to know what traditional networks are. Now “traditional” makes it sound like these types of networks are incredibly old-fashioned, however, it’s just a name. They are called traditional as in “not-the-hot-new-shit” networks. They still work fine and are used almost everywhere.

Alrighty, now imagine the following: you are sending a message to a friend. How does that work?

/media/basic_networking.png

Your PC is connected to your home router(the magic box that gives you internet) via Ethernet cable or Wifi. Any messages you sent towards the internet first pass through this router. It will then forward it to the internet, where lots of more forwarding happens. In the end it will land at your friend’s PC, where he will laugh about the funny meme you sent.

So far, so good. It’s just a straight road(excluding the magic internet) to your friend. But what if it isn’t?

/media/fat_tree_network.png

Now this is a so called fat-tree network topology. It’s basically a nice way on how to arrange PC’s and routers to scale their numbers up almost indefinitely, so it’s usually used in data centers. Now imagine it’s the same situation as before, your PC is in pod 0 and your friend’s PC is in pod 2 and you send a message. How do the routers on the way decide where to go? There are multiple ways!

Each one of them decides for themselves. In traditional routing, the routers and switches are configured separately from each other and any decision they undertake is decided just by them and their knowledge of their environment. And this is a fine way on how to do networking, but how do you know when something breaks? Or how can you judge if the network is overloaded and you should buy more hardware? You just can’t easily tell…

Enter software defined networks!

So far, the routers are semi-smart little machines that can make decisions, such as “where does this packet go?” for themselves. Now, what if the routers were dumb instead? What if they were just heartless machines that do the instructions you tell them to do, instead of smart little worker bees?

If you take out all the control decisions out of a router and just have it forward packets based on decisions you program into it, you get software defined networks. Obviously someone still has to make decisions and be somewhat smart. So in software defined networks, you have a central controller. This controller is connected to every router in the network and will instruct the routers via rules on what to do. For example, send funny dog memes to friend. Drop unfunny cat memes.

Anytime a router receives something that it doesn’t know what to do with, it will send it to the controller, that will then do a decision. And this is it. In a nutshell, software defined networks cause smart-ish routers to be dumb, rule-driven machines administrated by a controller machine.

But why?

There are several good reasons for software defined networks. It’s easier to configure one central place in a large system than to configure each little cog in the machine separately. Configuration is a major issue in large networks, so taking some of the pain out of it is a good idea. Next, we have a bit of a weird reason: it fuels innovation. In the old way, routers can only do what their firmware allows. Any new protocols or techniques are just not supported. With software defined networks, if support for something is missing, you can just program it in. If you can think of a fancy new way to improve the network, you can program it in. If you need more monitoring of your network or want more control… you guessed it.

Now will software defined networks replace traditional networks? I have absolutely no idea. But it looks like most tech giants are betting on them for their data centers, which is definitely a good sign.