Network coding is a programming technique used to maximize the potential output of a computer network. In network coding, the nodes of the network take on an active role, working to combine and compress packets of information before sending them across the network. This enables a more efficient utilization of network resources, at the cost of additional overhead on the part of the client computers, which must work that much harder to "untie" the packed data.
Network nodes are a bit like traffic police: they direct the flow of data on a computer network. In the absence of network coding, the nodes move information — packets of data — through the network without taking liberties to alter or manipulate that data in any substantial way. They might reinforce the signal to ensure that data is not lost during transit, but the actual packets remain unaffected.
In network coding, the nodes are tasked with the job of combining packets as necessary to increase efficiency in the network. For example, if a network is capable of transmitting individual packets of 100 bytes and it receives two 50 byte packets at the same time, a system operating with non-network coding will process one 50 byte packet and then the next, moving them through sequentially. A network coding network, on the other hand, will register the fact that 50 bytes of potential network overhead are being "wasted" with each packet, and combine the two 50 byte packets into a single 100 byte packet, maximizing the network's data-transmission capacity.
This results in an increase in network efficiency. Network coding uses more of the network's available bandwidth on a regular basis. In other words, more of the network's potential is realized. However, network coding also has a downside: the combined packets provide additional "work" for the receiving computers.
When a computer receives a packet of information on a non-network coded network, the computer accesses that piece of information individually and immediately. Packets, in this case, are each entirely dedicated to a single process. Receiving a packet of information on a network coded network, however, requires the system to unpack and distribute information related to different processes to the proper areas. This creates extra processing responsibilities for the computer CPU receiving the data, increasing its stress. On low-powered systems, or systems with a number of other concurrently active tasks, the extra work can result in slowdown or lag on the computer.