Suppose you have an idea for a new network application. Perhaps this application will be a great service to humanity, or will please your professor, or will bring you great wealth, or will simply be fun to develop. Whatever the motivation may be, let’s now examine how you transform the idea into a real-world network application.
At the core of network application development is writing programs that run on different end systems and communicate with each other over the network. For example, in the web application there are two distinct programs that communicate with each other : the browser program running in the user’s host (desktop, laptop, tablet, smartphone, and so on); and the web server program running in web server host. As another example, in a P2P file-sharing system there is a program in each host that participates in the file-sharing community. In this case, the programs in the various hosts may be similar or identical.
Thus, when developing a new application , you need to write software that will run on multiple end systems. This software could be written , for example, in C, Java or Python. Importantly, you do not need to write software that runs on network-core devices such as routers or link-layer switches. Even if you wanted to write application software for these network-core device, you wouldn’t be able to do so. Network-core devices do not function at the application layer but instead function at lower layers – specifically at the network layer and below. This basic design – namely, confining application software to the end systems – as shown in fig 2.1 has facilitated the rapid development and deployment of a vast array of network applications.