应用软件通常在网络边缘的端系统中运行,而不是在网络核心的交换机和路由器上运行,这种模式促进了大量应用的开发和部署。网络核心的交换机和路由器只专注于数据包(分组)的转发。
1 网络应用程序体系结构
应用程序都有一个体系结构。网络应用程序所使用的两种体系结构包括:客户机/服务器(C/S)体系结构或对等(P2P)体系结构。
在客户机/服务器体系结构中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户机的主机请求。
一个典型的例子是Web应用程序,当Web服务器接收到来自某客户机浏览器对某对象的请求时,它向该客户机发送所请求的对象作为响应。注意到客户机/服务器体系结构中,客户机相互之间不直接通信。服务器具有固定的、周知的地址,称为IP地址,并且总是处于打开状态。
在客户机/服务器体系结构中,常用主机群集之类的虚拟服务器对客户机提供服务。
在P2P体系结构中,对作为基础设施的服务器依赖很少。相反,主机与主机之间—称为对等方,直接相互通信,互相提供服务。很多应用程序都是P2P体系结构的,包括文件分发、因特网电话Skype等。P2P体系结构的最突出特性之一是它的可扩展性。
某些应用具有混合的体系结构,由客户机/服务器和P2P结合而成。例如,对于许多即时讯息应用(QQ等)而言,服务器用于跟踪用户的IP地址,但用户到用户的消息在用户主机之间直接发送(无需通过中间服务器)。
2 进程通信
运行在多个端系统上应用程序之间的互相通信,对于操作系统来说,实际上是进程之间的通信。进程可以被认为是程序的一次执行。同一台主机上的进程间通信的可以使用操作系统的进程间通信机制例如共享内存、信号量等。但运行在不同端系统(可能具有不同的操作系统)上的进程间的通信,需要交换消息(message)来实现相互通信。发送进程创建并向网络中发送消息,接收进程接收这些消息并负责回送消息。这个过程是通过调用操作系统提供的发送接收函数来实现的。
•客户机和服务器进程网络应用程序由成对的进程组成,这些进程通过网络相互发送消息。对每对通信进程,在给定的一次通信会话中,发起通信的进程被标示为客户机,在会话
开始时接受请求的进程是服务器。例如在Web中,一个浏览器进程向Web服务器进程发起联系,因此该浏览器进程是客户机,而该Web服务器进程是服务器。
•进程与计算机网络之间的接口从一个进程向另一个进程发送的消息必须经过下面的网络进行传输。进程通过一个操作系统提供的称为套接字(Socket)的编程接口在网络上发送和接收消息,发送和接收函数是这个编程接口提供的最基本的两个函数。
应用程序开发者对于传输层的控制仅限于:1选择传输层协议。2设定几个传输层参数,如最大缓存、最大报文段长度等。
进程在通信时,必须给接收方指定接收地址,这个地址包括两个部分:对方主机的IP地址和应用程序的标识—端口号。
3 可供应用程序使用的传输服务
因特网提供了不止一种传输层协议。当开发一个应用时,在选择可用的传输层协议时需要从四个方面对应用程序所需的传输服务进行考虑:是否要求可靠数据传输、吞吐量、时效性和安全性。
•可靠数据传输
分组可能在计算机网络中丢失。有些应用如电子邮件、文件传输、远程主机访问以及网络金融等应用,数据丢失可能会造成灾难性的后果。对于这些应用,必须确保应用程序一端发送的数据正确地、完全地交付给该应用程序的另一端。当一个传输层协议提供这种服务时,发送进程只要将其数据传递到套接字,就可以确信该数据将能无差错地到达接收进程。
当一个传输层协议不提供可靠数据传输时,发送的数据可能不能到达接收进程。对于多媒体应用,如实时音频/视频或存储的音频/视频,它们能承受一定程度的数据丢失。
•吞吐量
有些应用例如网络电话对话音传输有最小的带宽要求,当话音以32kbps的速率进行编码,那么在通话过程中一直以这个速率向网络发送数据,并向接收应用程序交付数据。如果传输层不能提供这种吞吐量保证,那么该应用程序或以较低速率进行编码,或者放弃发送。而弹性应用能够根据需要充分利用可供使用的吞吐量。电子邮件、文件传输以及Web传输都属于弹性应用。
•时效性例如,因特网电话中较长的时延会导致会话中不自然的停顿。在网络游戏和虚拟互动环境中,在动作及响应之间较长的时延会使游戏失去真实感。在非实时的应用中,对端到端的时延没有严格的约束。
•安全性传输层协议能够为应用程序提供一种或多种安全性服务。传输层协议也能提供除了机密性以外的其他安全性服务,包括数据完整性和端点鉴别。
4因特网提供的运输服务
因特网(更一般地说是TCP/IP网络)为应用提供了两个传输层协议:UDP和TCP(对应于socket编程的SOCK_STREAM,SOCK_DGRAM)。
•TCP服务
TCP服务模型是面向连接的可靠数据传输服务。
面向连接服务:使用TCP协议时,在应用程序开始交换消息之前,客户机程序和服务器
程序之间互相交换传输层控制信息,做好传输分组的准备。在握手阶段后,就在两个进程的套接字之间建立了一个TCP连接。这个连接是全双工的,即连接双方的进程都有发送和接收缓冲区,可以在此连接上同时进行报文段的收发。当应用程序结束消息发送时,必须拆除该连接。
可靠数据传愉服务:进行通信的进程依靠TCP协议,无差错、按适当顺序交付发送的数据。其主要原理是报文段丢失了会进行重传。
TCP协议还具有拥塞控制机制,这种服务能为因特网带来整体好处。
•UDP服务
UDP是一种不提供可靠传输服务的轻量级传输层协议。UDP是无连接的,因此在两个进
程通信前没有握手过程。UDP没有拥塞控制机制。•因特网传输层协议所不提供的服务不提供吞吐量和时效性保证的服务。
5应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递消息。
特别是定义了:
交换的消息类型,如请求消息和响应消息。
各种消息类型的语法,如消息中的各个字段及其详细描述。
字段的语义,即包含在字段中的信息的含义。
进程何时、如何发送消息及对消息进行响应的规则。
有些应用层协议是由RFC文档定义的,因此它们位于公共领域,例如HTTP。有些应用层协议是公司或者个人私有的,位于私人领域,例如QQ。
6 本文涉及的网络应用
Web、文件传输、电子邮件、DNS目录服务和P2P。重点需要了解Web和DNS。