Hey all,
As I have already stated, I am very interested in the Software Defined Networking field. I thought I would share a resource on it in case anyone would like to learn a little about it. For those of you who havent heard of it, its a new approach to creating computer networks, based around a protocol called "Openflow". The first implementation of openflow was released 6 years ago, and is being very actively expanded upon. Recently, openflow 1.4 was released, but the LTS version is openflow 1.3 so you would do well to learn that version.
So what does it do? The basic idea is to have a programmable switch, that acts exactly as you tell it to. It could do almost anything, performing functions from IDS to IP Routing and anything in between, which is all up to the programmer to decide. The switch "speaks" openflow(which is the protocol that is used to program it) to a controller, which is the program that decides how the network should perform. The controller is simply a program running on a computer that is attached to the switch. There are many controllers, and each has its own API, which allows you to write your own controller with its own rules. More of this will be explained in the tutorial I am linking.
Openflow will send the switch commands, which come in two ways; packet_outs and flow_mods.
Packet_outs are the very basic way for openflow to direct traffic through a network. When a new type of packet is received by a switch via any port, and it does not know what to do with it, it sends it straight to the controller(using openflow) via a packet_in. the packet_in is parsed at the controller, yielding the ethernet packet, IP packet, or ARP, etc. Based on the program, the controller decides what to do with it. if it decides to send the packet out to another node in the network, it will assemble the packet as it sees fit(could do anything), and send a
packet_out message to the switch which contains a different the port that the switch should send the packet out from.
Flow_mods are the way that openflow switches are supposed to be used. This is how you actually "program" the switch. Flow mods are messages that the controller can send to the switch at any time, which will tell the switch how to behave for certain packets.
Example: The switch receives a packet from 10.0.0.1, whose destination IP is 10.0.0.2. The switch sends the packet to a controller, via packet_in, and the controller sends a
flow_mod back to the switch, stating that any more packets from 10.0.0.1 meant for 10.0.0.2 should be sent out the port connected to 10.0.0.2. From now on, when the switch receives a packet from 10.0.0.1 towards 10.0.0.2, it will no longer send a packet_in to the controller, but will route the packet directly to the destination ip.
As you can imagine this is extremely powerful. You could have easily said "send anything from 10.0.0.1 to 192.168.1.100, or any other address. Or you could have just dropped the packet cold upon arrival. or sent it out across the internet.
Thats the basics of SDN, but only the very basics. there is a lot more to learn, and I highly recommend it as I believe it could be the future of networking.
I also wanted to clarify what exactly mininet is, because you will use it if you try to do this tutorial.
mininet is a lightweight network emulator. it allows you to create thousands of nodes(hosts or switch or controller) virtualized in your computer, and it wont kill your computer like most virtualization software will. I wont go into the details of how mininet actually works, but it is well put together. The reason it is used here is because it "speaks" openflow! You can test all of your controllers directly from mininet, without any hardware. It has an option to specify exactly what controller to use for each switch, which is quite nifty. you can do pretty much anything with it, even attach it to a real physical network. you could have 100 nodes on your mininet instance, and attach it to your desktop, and your desktop would be able to talk to any of those 100 nodes as if they were real computers. Cool right?
Feel free to ask me any questions. I have finished the tutorial, and can lead you along if your stuck. I used the Pox controller, I recommend it. Have fun!
https://github.com/mininet/openflow-tutorial/wikiAlso, wasnt sure if this should be in tutorials or here, so I put it here. feel free to move it