2.1应用层协议原理
网络应用是计算机网络存在的理由。
研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。
Web应用程序中,有两个互相通信的不同的程序:一个是运行在用户主机上的浏览器程序,另一个是运行在web服务器主机上的web服务器程序。
P2P文件共享系统中,在各台主机中的这些程序可能都是类似或相同的。
编写应用程序时,不需要写在网络核心设备如路由器或链路层交换机上运行的软件。
网络核心设备并不在应用层起作用,而在较低层起作用,特别是位于网络层级下面层次。
这种基本设计,也即将应用软件限制在端系统的方法,促进了大量网络应用程序的迅速研发和部署。
2.1.1网络应用程序体系架构
应用程序的体系结构明显不同于网络的体系结构。
应用体系结构(application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。
现代网络应用程序中有两种主流体系结构:客户-服务器体系结构和对等(P2P)体系结构。
①客户-服务器体系结构(client-server architecture)
1.特征:
(1)有一个总是打开的主机,称为“服务器”,它服务于来气许多其他称为“客户”的主机的请求。
(2)当web服务器接收到来自某客户对某对象的请求时,它向该客户发送所请求的对象作为相应。
(3)web服务器具有固定的、周知的地址,该地址称为IP地址。正因如此,客户总是能够通过向该服务器的IP地址发送分组来与之联系。
2.代表应用程序:
web,ftp,telnet和电子邮件。
3.常见问题和解决方案:
(1)常见问题:常常会出现一台单独的服务器主机跟不上它所有客户请求的情况。
(2)解决方式:
因特网服务提供商会将配备大量主机的数据中心(通常有数十万台服务器,他们必须要供电和维护),这些数据中心常被用于创建强大的虚拟服务器。服务提供商必须支付不断出现的互联和带宽费用,以发送和接收到达/来自数据中心的数据。
②P2P体系结构(P2P architecture)
1.特征:
(1)该应用程序体系结构对位于数据中心的专用服务器有着最小的(或者没有)依赖。
(2)应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。
(3)有自拓展性(self-scalability)。例如在一个P2P文件共享系统中,尽管每个对等方都由于请求文件产生工作量,但每个对等方通过向其他对等方分发文件也为系统增加服务能力。
(4)P2P体系结构管是成本有效的,因为他们通常不需要庞大的服务器基础设施和服务器带宽。
2.代表应用程序:
许多目前流行的、流量密集的应用都是P2P体系结构的。这些应用包括文件共享(例如BitTorrent)、对等方协助下载加速器(例如迅雷)、因特网电话(例如Skype)和IPTV(例如“迅雷看看”和PPstream)。
(附加:某些应用具有混合的体系结构,结合了客户-服务器和P2P的元素。例如许多即时讯息应用,服务器被用来跟踪用户的IP地址,但用户到用户的报文在用户主机之间(无需通过中间服务器)直接发送。)
3.P2P应用面临的三个主要挑战:
(1)ISP友好。大多数住宅ISP因受制于“非对称”的带宽应用,也就是说,下载比上传要慢得多。但是P2P视频流和文件分发应用改变了从住宅ISP到服务器的上载流量,因而给ISP带来了巨大压力。
(2)安全性。因为它们的高度分布和开放特性,P2P应用给安全带来挑战。
(3)激励。未来P2P应用的成功也取决于说服用户自愿向应用提供带宽、存储和计算资源,这对激励设计带来挑战。
2.1.2进程通信
在操作系统的术语中,进行通信额实际上是进程(process)而不是程序。
一个进程可以被认为是运行在端系统中的一个程序。
当进程运行在相同的端系统时,他们使用进程间相互通信机制相互通信,该机制由端系统上的操作系统确定。
在两个不同端系统上的进程,通过跨越计算机网络交换报文(message)而相互通信。
1、客户和服务器进程
网络应用程序由成对的进程组成,这些进程通过网络相互发送报文。
无论是对于客户-服务器应用程序还是P2P应用程序,都可以用下面的思想概括:
在给定的一对进程的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。
2、进程与计算机网络之间的接口
进程通过一个称为“套接字(socket)”的软件接口向网络发送报文和从网络接收报文。
套接字也被称为应用程序和网络之间的应用程序编程接口(Application programing interface,API)。
应用程序开发者可以控制套接字在应用层端的一切,但是对于该套接字的运输层段几乎没有控制权。
应用程序开发者对运输层的控制仅限于:
①选择运输层协议 ②也许可以设定几个运输层参数,如最大缓存和最大报文段长度等。
3、进程寻址
在因特网中,两个进程之间发送报文,除了要知道报文送往的目的地主机地址外,还要指定运行在接收主机上的接收进程。
主机由其IP地址(IP address)标识,端口号(port address)用来指定接收进程。
常见的应用程序端口号:web服务器用端口号80来标识,邮件服务器用端口号25来标识。
2.1.3可供应用程序使用的运输服务
在发送端的应用程序将报文推进套接字。在套接字的另一端,运输层协议负责使该报文进入接收进程的套接字。
一个运输层可以提供的服务,大概能从以下几个方面概括:
①可靠数据传输(reliable data transfer):
当一个运输层协议提供这种服务时,发送进程只要将其数据传递进套接字,就可以完全相信该数据能够无差错地到达接收进程。
当一个运输层协议不提供可靠数据传输时,由发送进程发送的某些数据可能不能够到达接收进程,这只适合容忍丢失的应用(loss-tolerant application)。
有很多多媒体应用就可以承受一定量的数据丢失(如音频、视频)。
②吞吐量:
运输层协议能够以某种特定的速率提供确保的可用吞吐量。
具有吞吐量要求的应用程序被称为带宽敏感的应用(bandwidth-sensitive application)。
许多当前的多媒体应用是带宽敏感的,尽管某些多媒体应用程序可能采用自适应编码技术对数字语音或视频以与当前可用带宽相匹配的速率进行编码。
带宽敏感的应用具有特定的吞吐量要求,而弹性应用(elastic application)能够根据情况或多或少地利用可供使用的吞吐量。
③定时:
运输层协议也能提供定时保证,如同具有吞吐量保证那样,定时保证能够以多种形式实现:比如,可以保证每个比特到达接收方的套接字不迟于100ms。
这种服务将对交互式实时应用程序有吸引力。
④安全性:
运输协议能够为应用程序提供一种或多种安全性服务,例如,有些发送主机中,运输协议可以加密由发送进程传输的所有数据;在接收主机中,运输层协议能够再将数据交付给接收进程之前解密这些数据。
运输协议还提供除了机密性意外的其他安全性服务,包括数据完整性和端点识别。
2.1.4因特网提供的运输服务
因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UCP和TCP。
当一个软件开发者为因特网创建一个新的应用时,首先要做出的决定是,选择UCP还是TCP。
①TCP服务
(1)面向连接的服务:
在应用层数据报文开始流动之前,其客户机程序和服务器程序之间互相交换运输层控制信息,完成握手阶段。这个过程可以让它们为大量分组的到来做好准备。
在握手阶段过后,一个TCP连接(TCP connection)就在两个进程的套接字之间建立了。
这条连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。
当应用程序结束报文发送时,必须拆除该连接。
(2)可靠的数据传送服务
(有拥塞控制机制)
②SSL(secure socket layer,安全套接字层)服务
无论TCP还是UDP都没有提供任何加密机制,因此,因特网界研制了TCP的加强版SSL。
SSL不仅可以做到传统的TCP所能够做到的一切,而且提供了加密、数据完整性和端点鉴别这些关键的进程到进程的安全性服务。
SSL有自己的套接字API,类似于传统的TCP套接字API。
发送进程(明文数据)→SSL套接字(加密后的数据)→TCP套接字(加密后的数据)→接收进程的TCP套接字(加密后的数据)→接收进程的SSL套接字(明文数据)→接收进程
③UDP服务
(1)UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。
(2)UDP是无连接的,因此在两个进程通信前没有握手过程。
(3)UDP协议提供一种不可靠数据运输服务。
(4)UDP没有包括拥塞控制机制,所以UDP的发送端可以用它选定的任何速率向其下层(网络层)注入数据。
④因特网运输协议所不提供的服务
今天的因特网不能为应用提供任何定时或带宽保证。
时间敏感的应用通常是靠应用程序的设计,来最大程度的适应这种服务的缺乏。
因特网电话应用通常能够容忍某些数据丢失,但要求要达到一定的最小速率才能有效工作,所以通常会选择UDP来绕开TCP的拥塞控制机制。
2.1.5应用层协议(application-layer protocol)
应用层协议定义了对报文的构建和发送方式:
①交换的报文类型,如请求报文和响应报文。
②各种报文类型的语法,如报文中的各个字段和这些字段是如何描述的。
③字段的语义,即这些字段中包含的信息的含义。
④一个进程何时以及如何发送报文,对报文进行响应的规则。
有些应用层协议室友RFC文档定义的,因此它们位于公共域中。
还有很多别的应用层协议是专用的,例如Skype就使用了专用的应用层协议。
应用层协议是网络应用的非常重要的一部分。
应用层协议例子:
web的应用层协议就是HTTP,它定义了在浏览器和web服务器之间传输的报文格式和序列。