The network layer is concerned with controlling the operation of the subnet. A key design issue is determining how packets
are routed from source to destination. Routes could be based on static tables that are "wired into" the network and rarely
changed. They could also be determined at the start of each conversation, for example a terminal session. Finally, they could
be highly dynamic, being determined anew for each packet, to reflect the current network load.
If too many packets are present in the subnet at the same time, they will get in each other's way, forming bottlenecks.
The control of such congestion also belongs to the network layer.
Since the operators of the subnet may well expect remuneration for their efforts, there is often some accounting function
built into the network layer. At the very least, the software must count how many packets or characters or bits are sent by
each customer, to produce billing information. When a packet crosses a national border, with different rates on each side,
the accounting can become complicated.
When a packet has to travel from one network to another to get to its destination, many problems can arise. The addressing
used by the second network may be different from the first one. The second one may not accept the packet at all because it
is too large. The protocols may differ, and so on. It is up to the network layer to overcome all these problems to allow heterogeneous
networks to be interconnected.
In broadcast networks, the routing problem is simple, so the network layer is often thin or even nonexistent.