What is a programmable network?
A programmable network is one in which the behavior of network devices and flow control is handled by software that operates independently of network hardware. The fundamental nature of programmable networks is to separate the underlying physical hardware from the control software of a device.
History of network programmability
When the concept of programmable networks first emerged, it was a revolutionary step in the evolution of computer networks. It created a paradigm shift of large proportions set against the staid methods network administrators had long used to configure networks.
Traditionally, network admins configured each device in a network independently of each other. They used the command-line interface (CLI) to type hundreds of commands one by one until a group of devices passed traffic the way they should.
Some automation techniques existed in those days, mostly in the form of onerous scripting languages or cutting and pasting. For example, admins might cut and paste changing localized device information, such as IP addresses. With the exponential growth of networks, however, this level of automation was simply not tenable.
Network programmability: What does it mean and how does it relate to SDN?
By separating the hardware from the control software, network programmability enabled software to have a broader view of the network at large, creating a proverbial 10,000-foot overview. Software could now be programmed in one place, using a controller to orchestrate the configuration of the other hardware devices making up the network.
This development led to the birth of software-defined networking (SDN). The term SDN has now largely supplanted the generic term programmable networks in the common networking lexicon.
Fundamentals to achieve network programmability
Using protocols, like OpenFlow and other open and proprietary standards, network admins can now control and program networks from one place and time. All underlying hardware works together, as if someone had punched in all those CLI commands on each device. This critical advancement enabled scalable networks that could reach the size and scope needed to support growing cloud and containerization workloads that put more stress on infrastructure.
Programmable networks also facilitated the advancement of application programming interfaces (APIs). APIs are a software construct that have been around almost as long as computers, enabling one piece of software to talk to another piece of software.
Controllers use APIs to speak to the devices under their control. But the software controller itself can be accessed via industry standard RESTful APIs, enabling anyone to write custom software to orchestrate a programmable network.
Infrastructure as code
The process of using APIs to control networks is now commonplace. The scale and scope of modern networks simply do not allow for older device-by-device configuration in any but the smallest of networks.
With enterprises embracing virtualization, containerization and cloud deployments, another concept called infrastructure as code (IaC) has taken hold. IaC is the concept of using software to completely build a network from the ground up, including storage and compute, on top of an abstracted hardware layer.
Benefits of programmable networks
Programmable networking has several benefits over traditional networking, including the following:
- reduced long-term costs;
- ability for applications to maintain information about device capabilities;
- ability for networks to respond to application status and resource requirements;
- better allocation of bandwidth and resources;
- packet prioritization for traffic shaping; and
- improved operational flexibility and enhanced transparency.