In 1969 the Pentagon commissioned ARPANET for research into networking. The following year, Vinton Cerf and others published their first proposals for protocols that would allow computers to 'talk' to each other. ARPANET began operating Network Control Protocol (NCP), the first host-to-host protocol.
In 1974 Vint Cerf joined Bob Kahn to present their 'Protocol for Packet Network Interconnection' specifying the detailed design of the 'Transmission Control Program' (TCP) - the basis of the modern Internet. In 1978 TCP was split into TCP (now short for Transmission Control Protocol) and IP (Internet Protocol).
In 1982 TCP/IP was established as the protocol for ARPANET. This provided one of the first definitions of an internet as a connected set of networks using TCP/IP, but defining 'the Internet' as all connected TCP/IP internets.The launch of the Russian satellite Sputnik in 1957 threw the American military and scientific establishment into near panic with visions of Soviet weapons in space striking a helpless America. As part of the response, in 1959 the Advanced Research Projects Agency (ARPA) was formed within the Pentagon to establish an American lead in military science and technology.
By the early 1960s the first theories of computer networking were starting to be shaped and in 1965 ARPA sponsored a study on 'co-operative network of time-sharing computers'. Lawrence G. Roberts, of the Massachusetts Institute of Technology (MIT) in October 1966, shaped the first such plan. Designs for such a network were put forward the following year and in 1968 the Pentagon sent out requests for proposals for ARPANET - a computer network to unite America's military and scientific establishments.
The protocols in the TCP/IP suite are designed in a layered fashion, where each protocol layer solves a separate part of the communication problem. This layering can serve as a guide for designing the implementation of the protocols, in that each protocol can be implemented separately from the other. Implementing the protocols in a strictly layered way can however, lead to a situation where the communication overhead between the protocol layers degrades the overall performance. To overcome these problems, certain internal aspects of a protocol can be made known to other protocols. Care must be taken so that only the important information is shared among the layers.
Most TCP/IP implementations keep a strict division between the application layer and the lower protocol layers, whereas the lower layers can be more or less interleaved. In most operating systems, the lower layer protocols are implemented as a part of the operating system kernel with entry points for communication with the application layer process. The application program is presented with an abstract view of the TCP/IP implementation, where network communication differs only very little from inter-process communication or file I/O. The implications of this is that since the application program is unaware of the buffer mechanisms used by the lower layers, it cannot utilize this information to, e.g., reuse buffers with frequently used data. Also, when the application sends data, this data has to be copied from the application process' memory space into internal buffers before being processed by the network code.
The operating systems used in minimal systems such as the target system of lwIP most often do not maintain a strict protection barrier between the kernel and the application processes.
This allows using a more relaxed scheme for communication between the application and the lower layer protocols by the means of shared memory. In particular, the application layer can be made aware of the buffer handling mechanisms used by the lower layers. Therefore, the application can more efficiently reuse buffers. Also, since the application process can use the same memory as the networking code the application can read and write directly to the internal buffers, thus saving the expense of performing a copy.