Before building your network application, you also need a basic understanding of how the programs, running in multiple end systems, communicate with each other. In the jargon of operating systems, it is not actually programs but processes that communicate. A process can be thought of as a program that is running within an end system. When processes are running on the same end system, they can communicates with each other with interprocess communication, using rules that are governed by the end system’s communication system. But in this course we are not particularly interested in how processes in the same host communicate, but instead in how processes running on different hosts (with potentially different operating systems) communicate.
Processes on two different end systems communicate with each other by exchanging messages across the computer network. A sending process creates and send messages into the network; a receiving process receives these messages and possibly responds by sending messages back. Fig.2.1 illustrates that processes communicating with each other reside in the application layer of the five-layer protocol stack.
Client and Server Processes
A network application consists of pairs of processes that send messages to each other over a network. For example, in the web application in a client browser process exchanges messages with a web server process. In a P2P file-sharing system, a file is transferred from a process in one peer to a process in another peer. For each pair of communicating processes, we typically label one of the two processes as the client and the other process as the server. With the web, a browser is a client process and web server is a server process. With P2P file sharing, the peer that is downloading the file is labelled as the client, and the peer that is uploading the file is labelled as the server.
You may have observed that in some applications, such as in P2P file sharing, a process can be both a client and a server. Indeed, a process in a P2P file-sharing system can both upload and download files. Nevertheless, in the context of any given communication session between a pair of processes, we can still label one process as the client and the other process as the server. We define the client and server processes as follows:
In the context of a communication session between a pair of processes, the process that initiates the communication (that is, initially contacts the other process at the beginning of the session) is labelled as the client. The process that waits to be contacted to begin the session is the server.
In the web, a browser process initializes contact with a web server process; hence the browser process is the client and the web server process is the server. In P2P file sharing, when Peer A asks Peer B to send a specific file, Peer A is the client and Peer B is the server in the context of this specific communication session. When there’s no confusion, we’ll sometimes also use the terminology “client side and server side of an application.” At the end of this module we’ll step through simple code for both the client and server sides of network applications.
The Interface Between The Process and The Computer Network
As noted above, most applications consist of pairs of communicating processes, with the two processes in each pair sending messages to each other. Any message send from one process to another must go through the underlying network. A process sends messages into, and receives messages from, the network through a software interface called a socket. Let’s consider an analogy to help us understand processes and sockets. A process is analogous to a house and its socket is analogous to its door. When a process wants to send a message to another process on another host, it shoves the message out of its door (socket). This sending process assumes that there is a transportation infrastructure on the other side of its door that will transport the message to the door of the destination process. Once the message arrives at the destination host, the message passes through the receiving process’s door (socket), and the receiving process then acts on the message.
Fig. 2.3 illustrates socket communication between two processes that communicate over the internet. (fig, 2.3 assumes that the underlying transport protocol used by the processes is the internet’s TCP protocol). As shown in this figure, a socket is the interface between the application layer and the transport layer within a host. It is also referred to as the Application Programming Interface (API) between the application and the network, since the socket is the programming interface with which network applications are built. The application developer has control of everything on the application-layer side of the socket but has little control of the transport-layer side of the socket. The only control that the application developer has on the transport-layer side is :
- The choice of transport protocol
- Perhaps the ability to fix a few transport-layer parameters such as maximum buffer and maximum segment sizes
Once the application developer chooses a transport protocol (if a choice is available), the application is built using the transport-layer services provided by that protocol.
In order to send postal mail to a particular destination, the destination needs to have an address. Similarly, in order for a process running on one host to send packets to a process running on another host, the receiving process needs to have an address. To identify the receiving process, two pieces of information need to be specified:
- The address of the host
- An identifier that specifies the receiving process in the destination host
In the internet, the host is identified by its IP address. We’ll discuss IP address in great detail in Module 4. For now, all we need to know is that an IP address is a 32-bit quantity that we can think of as uniquely identifying the host. In addition to knowing the address of the host to which a message is destined, the sending process must also identify the receiving process (more specifically, the receiving socket) running in the host. This information is needed because in general a host could be running many network applications. A destination port number serves this purpose. Popular applications have been assigned specific port numbers. For example, a web server is identified by port number 80. A mail server process (suing SMTP protocol) is identified by port number 25. A list of well-known port numbers for all internet standard protocols can be found at http://www.iana.org . We’ll examine port numbers in detail in Module 4.