OpenFlow is a communications protocol that gives access to the forwarding plane of a network switch or router over the network. It defines communications between controllers and switches. Controllers communicate with switches using OpenFlow messages to read, modify and write flow tables that determine how the switch forwards packets. Popular OpenFlow controllers include NOX, Beacon, Floodlight, Ryu and Trema. OpenFlow enables building software-defined networks and network virtualization.