1、应用层协议原理
1.1、网络应用程序体系结构
C/S结构,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户机的主机请求。客户机主机既可能有时打开,也可能总是打开。C/S结构之下,客户机之间不直接通信。服务器有固定的IP地址。在C/S体系结构中,常用主机集群创建强大的虚拟服务器。基于C/S结构的应用服务通常是基础设施密集的(infrastrucuture intensive)。
P2P结构,任意间断连接的主机对(称为对等方)直接相互通信,不必通过专门的服务器。P2P结构的最突出特性之一是它的自扩展性(self-scalability)。
1.2、进程通信
同一个端系统上的进程通过操作系统上的进程间通信机制相互通信。不同端系统上的进程通过跨越计算机网络交换报文(message)而相互通信。
客户机和服务器进程
对于每对通信进程,通常将这两个进程之一标示为客户机(client),另一个标示为服务器(server)。标示的规则是,在给定的一对进程之间的通信回话中,发起通信的进程称为客户机,在会话开始时等待联系的进程是服务器。(P2P结构下一个进程既可以使服务器也可以是客户机)。
进程与计算机网络之间的接口
进程通过一个称为套接字(socket)的软件接口在网络上发送和接收报文。套接字是同一台主机内应用层与运输层之间的接口,是网络上建立网络应用程序的可编程接口,称为应用程序和网络之间的应用程序编程接口(API)。
1.3、可供应用程序使用的运输服务
可靠数据传输
如果一个协议能够确保由应用程序的一端发送的数据正确地、完全地交付给该应用程序的另一端,那么该协议提供了可靠数据传输服务(reliable data transfer)。
吞吐量
两个进程在一条网络路径上进行通信会话时,可用吞吐量就是发送进程能够向接收进程交付比特的速率。因为其它会话将共享沿着该网络路径上的带宽,并且这些其它会话将会到达和离开,所以可用吞吐量将随时间波动。因此有了另一种服务,即运输层协议能够以某种特定的速率提供确保的可用吞吐量。
定时
运输层协议也能提供定时保证,如同吞吐量保证一样,定时保证可以以多种形式实现。例如,可以设置发送方注入进套接字的每个比特到达接收方的套接字不迟于100ms。这种服务对交互式实时应用程序非常适用。
安全性
在发送主机中,运输层协议能够加密由发送进程传输的所有数据;在接收主机中,运输层协议能够在数据交付给接收进程之前解密这些数据。
1.4、因特网提供的传输服务
因特网上的应用使用了两个运输层协议:UDP和TCP。
TCP服务
面向连接服务: 使用TCP协议时,在应用层数据报文开始流动之前,其客户机程序和服务器程序之间相互交换运输层控制信息(握手过程)。握手阶段后,两个进程的套接字之间建立一个TCP连接,连接双方可以在此连接上同时进行报文收发。报文收发结束之后,该连接将被拆除。
可靠数据传输服务:进行通信的进程依靠TCP协议,无差错、按适当顺序交付发送的数据。
拥塞控制机制:发送方和接收方之间的网络出现拥塞时,TCP协议的拥塞机制会抑制发送进程。TCP协议的拥塞控制试图限制每个TCP连接,使它们达到公平共享网络带宽的目的。
UDP服务
UDP是一种不提供不必要服务的轻量级运输层协议。它是无连接的,两个进程通信前没有握手过程。UDP协议提供的是不可靠数据传输服务,也就是说,当进程通过UDP套接字发送报文时,UDP协议不保证该报文能够被接收进程收到。此外,接收进程收到报文的顺序也可能是乱序的。UDP协议没有拥塞控制机制。
TCP和UDP的安全问题
TCP和UDP都没有提供任何加密机制,发送进程传送至套接字的数据与经过网络传送到目的进程的数据相同。如果某个进程以明文方式将一个口令传送至它的套接字,该明文口令将经过发送方和接收方之间的所有链路传送,这就可能在任何中间链路被嗅探和发现。
由于存在种种隐私和其他安全问题,人们研制了TCP的加强版本,称为安全套接字层(Secure Socket Layer, SSL)。SSL不是独立于TCP和UDP的第三种协议,而只是对TCP的增强。这种增强是在应用层上实现的。如果一个应用程序要使用SSL的服务,它需要在其客户机和服务器中都包括SSL的代码。
进程寻址
为了识别接收进程,需要定义两种信息:主机名称或地址;目的主机上接收进程的标识。在因特网中,主机是用IP地址进行标识的。目的地端口号则用于标识接收进程。
2、web应用和HTTP协议
2.1、HTTP概况
web的应用层协议是产文本传输协议(HyperText Transfer Protocol, HTTP)。HTTP协议由两部分程序实现