配色: 字号:
2.1应用层协议原理
2014-06-18 | 阅:  转:  |  分享 
  
第二章应用层



网络应用是计算机网络存在的理由



在本章中,我们学习有关网络应用的原理和实现方面的知识。我们从定义几个关键的应用层概念开始,其中包括应用程序所需要的网络服务、客户机和服务器、进程和运输层接口。然后,详细谈论几种网络应用程序,包括Web、电子邮件、DNS、对等文件分发和P2P因特网电话。接下来,将探讨开发运行在TCP和UDP上的网络应用程序的方法,特别是学习套接字API,并概要学习用Java实现的几个简单的客户机/服务器应用。



2.1应用层协议原理



研究网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。例如,在Web应用程序中,有两个互相通信的不同的程序:一个是运行在用户主机上的浏览器程序;另一个是运行在Web服务器主机上的Web服务器程序。因此,当研发新应用程序时,你需要编写将在多台端系统上运行的软件,重要的是,你不需要写在网络核心设备(如路由器或链路层交换机)上运行的软件。即使你想为网络核心设备写应用程序软件,你也不能做到这一点。网络核心设备并不在应用层起作用,而是在较低层起作用,具体来说是在网络层及下面层次。



2.1.1网络应用程序体系结构



在进行软件编码前,应当对应用程序有一个宽泛的体系结构计划。应用程序的体系结构不同于网络的体系结构。从应用程序开发者的角度看,网络的体系结构是固定的,其为应用程序提供特定的服务集合。另一方面,应用程序体系结构(applicationarchitecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。现代网络应用程序中所使用的两种主流体系结构:客户机/服务器体系结构(client-serverarchitecture)和P2P体系结构(P2Parchitecture)。



在客户机/服务器体系结构中,有一个总是打开的主机称为服务器,它服务于来自许多称为客户机的主机请求。客户机主机既可能有时打开,也可能总是打开。客户机/服务器体系结构中,客户机相互之间不直接通信。例如,在Web应用中两个浏览器并不直接通信。客户机/服务器体系结构的另一个特征是服务器具有固定的、周知的地址,称为IP地址。因为服务器具有固定的、周知的地址,并且总是处于打开的状态,所以客户机总是能够通过向该服务器的地址发送分组来与其联系。



在客户机/服务器体系结构中,常会出现一台服务器主机跟不上其所有客户机请求的情况。例如,一个流行的社会联网站点如果仅有一台服务器来处理所有请求,将很快变得不堪重负。为此,在客户机/服务器体系结构中,常用主机群集,有时称为服务器场(serverfarm)创建强大的虚拟服务器。



在P2P体系结构中,对总是打开的基础设施服务器有最小的(或者没有)依赖。相反,任意间断连接的主机对---称为对等方,直接相互通信。因为这种对等方通信不必通过专门的服务器,所以该体系结构被称为对等放到对等方(简称为对等)。需要提及的是,某些应用具有混合的体系结构,由客户机/服务器和P2P元素结合而成。例如,对于许多即时讯息应用而言,服务器场用于跟踪用户的IP地址,但用户到用户的报文在用户主机之间直接发送(无需通过中间服务器)。



P2P体系结构的最突出特性之一是它的自扩展性(self-scalability)。例如,在一个P2P文件共享应用中,尽管每个对等方都有请求文件产生负载,但每个对等方向其它对等方分发文件也为系统增加了服务能力。P2P体系结构不需要庞大的服务器基础设施和服务器带宽,从而降低了成本。但P2P应用程序具有高度分布和开放的性质,因此需要格外关注系统的安全。



2.1.2进程通信



在操作系统的术语中,进行通信的实际上是进程(process)而不是程序。进程可以被认为是运行在端系统中的程序。当进程运行在相同的端系统上时,它们使用进程间通信机制相互通信。进程间通信的规则由端系统上的操作系统确定。不同端系统上的进程通过跨越计算机网络交换报文而相互通信。发送进程创建并向网络中发送报文,接收进程接收这些报文并可能负责回送报文。



网络应用程序是由成对的进程组成,这些进程通过网络相互发送报文。例如,在Web应用程序中,一个客户机浏览器进程与一台Web服务器进程交换报文。在一个P2P文件共享系统中,文件从一个对等方中的进程传输到另一个对等方中的进程。对每对通信进程,我们将这两个进程之一标示为客户机(client),而另一个进程标示为服务器(server)。



在Web中,浏览器是一个客户机进程,Web服务器是一个服务器进程。对于P2P文件共享,下载文件的对等方是客户机,上传文件的对等方是服务器。对于P2P文件共享等应用,一个进程可以既是客户机又是服务器。为了区分,我们将发起通信(即在该会话开始时与其它进程联系)的进程标示为客户机,在会话开始时等待联系的进程标示为服务器。



进程通过一个称为套接字(socket)的软件接口在网络上发送和接收报文。套接字是同一台主机内应用层与运输层之间的接口。由于该套接字是在网络上建立网络应用程序的可编程接口,因此也将套接字称为应用程序和网络之间的应用程序编程接口(ApplicationProgrammingInterface,API)。应用程序开发者可以控制套接字在应用层端的所有东西,但是对该套接字的运输层端的控制仅限于:选择运输层协议;设定几个运输层参数,如:最大缓存、最大报文长度等。一旦应用程序开发者选择了一个运输层协议,则应用程序就建立在由该协议提供的运输层服务之上。



2.1.3可供应用程序使用的运输服务



我们大体从四个方面对应用程序服务要求进行分类:可靠数据传输、吞吐量、定时和安全性。



分组能够使路由器中的缓存溢出,或者当分组中的某些比特损坏后可能被丢弃。像电子邮件、文件传输、Web文档传输以及金融应用等,数据丢失可能会造成灾难性后果。因此,对于这些应用,必须确保应用程序的一端发送的数据正确地、完全地交付给该应用程序的另一端。如果一个协议提供了这样的确保数据交付服务,就提供了可靠数据传输(reliabledatatransfer)。当一个运输层协议提供这种服务时,发送进程只要将其数据传递到套接字,就可以相信该数据将能无差错地到达接收进程。



当一个运输层协议不提供可靠数据传输时,由发送进程发送的数据可能不能到达接收进程。对于容忍丢失的应用来说这是可以接受的。



两个进程在一条网络路径上进行通信会话时,可用吞吐量就是发送进程能够向接收进程交付比特的速率。运输层协议能够以某种特定的速率提供确保的可用吞吐量。具有吞吐量要求的应用程序称为带宽敏感应用,如许多多媒体应用。能够根据需要充分利用可供使用的吞吐量的应用称为弹性应用。



运输层协议能提供定时保证。这种服务对交互式实时应用程序非常适用,如因特网电话、电视会议和多方游戏。因特网电话中较长的时延会导致会话中不自然的停顿;在多方游戏和虚拟互动环境中,在做出动作及看到来自环境的响应之间,较长的时延会使游戏失去真实感。



运输层协议能够为应用程序提供一种或多种安全性服务。例如,在发送主机中,运输层协议能够加密由发送进程传输的所有数据;在接收主机中,运输层协议能够在将数据交付给接收进程之前解密这些数据。运输层协议除了提供机密性的安全服务,还能提供包括数据完整性和端点鉴别服务。



2.1.4因特网提供的运输服务



因特网上的应用一般使用两个运输层协议:TCP和UDP。当创建一个新的因特网应用时,首先要做出的决定是,选择TCP还是选择UDP。



TCP服务模型包括面向连接服务和可靠数据传输服务。



面向连接服务:使用TCP协议时,在应用层数据报文开始流动之前,其客户机程序和服务器程序之间互相交换运输层控制信息。这个所谓的握手过程提示客户机和服务器做好传输分组准备。在握手阶段后,就在两个进程的套接字之间建立了一个TCP连接。这个连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接。



可靠数据传输服务:进行通信的进程依靠TCP协议,无差错、按适当顺序交付发送的数据。当应用程序的一端通过套接字传送一个字节流时,它能够依靠TCP协议将相同的字节流交付给接收方的套接字,没有字节的丢失和冗余。



TCP协议还具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网带来整体好处。当发送方和接收方之间的网络出现拥塞时,TCP协议的拥塞控制机制会抑制发送进程。

UDP是一种不提供不必要服务的轻量级运输层协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供的是不可靠数据传输服务,即当进程通过UDP套接字发送报文时,UDP协议并不保证该报文能够被接收进程接收到。接收进程受到的报文也可能是乱序到达的。



UDP没有拥塞控制机制,所以发送端可以以任何速率向其下面的层注入数据。因为实时应用通常可以忍受一定的数据丢失,同时有最低速率的要求,所以开发者有时在这种应用程序中会选择使用UDP协议。



对于可供应用程序使用的运输层协议服务:可靠数据传输、吞吐量、定时和安全性,在对TCP和UDP的描述中缺少对吞吐量和定时保证的讨论,即目前的因特网运输层协议并没有提供这两种服务。这是否意味着敏感应用就不能运行在今天的因特网上?答案显然不是,这些应用运行的很好是因为在设计时尽最大可能弥补了这些保证的缺乏。



一个进程需要定义两种信息才能使用这些服务与另一个需进行通信的进程通信。这两种信息是:该主机的名称或地址;用来指定目的主机上接收进程的标识。主机使用IP地址进行标识的。除了知道报文去往的目的主机的IP地址外,发送程序必须识别运行在主机上的接收进程。之所以需要该信息,是因为通常在一台主机上能够运行许多网络应用程序。目的地端口号(portnumber)就是服务于这个目的的。流行的应用程序有固定的端口号,Web服务进程用的是80号端口,邮件服务进程用的是25号端口。当开发者创建了一个新的网络应用程序时,必须为该应用程序分配一个新的端口号。





献花(0)
+1
(本文系miracle859首藏)