Modern networks are not implemented as a single piece of software; that would render the task of dealing with multiple technologies and manufacturers virtually impossible. The solution for this problem is to structure computer networks as stacks of different protocols. A protocol can be seen as a "language" in which two entities (computers, routers, etc) communicate with each other. Typically, one protocol is created to solve a predetermined set of networking tasks, such as being able to send ?xed-length messages, or guaranteeing message order, etc. The capability of a protocol to solve these tasks makes it a "black box" that can be used by protocols on the level immediately above; similarly, the protocol itself can make use of the capabilities provided by the protocol on the level immediately below. Thus, all modern networks are implemented as a stack of abstractions, all of which are implemented as composable protocols; we say that the layer N provides services to layer N+1 and uses the services from layer N-1.
As an example, consider the stack presented in Figure in this example we show how the HTTP protocol (or, similarly, SMTP and ssh) can be implemented using the services provided by the TCP protocol. Also, the TCP protocol is implemented using the services of the IP layer, which itself uses the services provided by the Ethernet layer. Notice that one advantage of this type of architecture is that if we were to build a new functionality (say, wireless connections, instead of Ethernet), it would suf?ce for us to implement this new layer and to guarantee that it provides, to the IP level, the same services that were once provided by the Ethernet level. Nowhere would we need to care about the details of TCP, HTTP, or, for that matter, any of the top-level protocols.