· 应用层协议原理:
· · 应用程序体系结构:
· · 主要有客户—服务器体系结构、对等体系结构。由应用程序研发者设计。
· · · 客户—服务器(C/S)体系结构:
· · · 服务器是一直运行的、拥有固定IP地址和周知的端口号、可扩展性。
· · · 客户端主动与服务器通信、与互联网有间歇性的连接、可能是动态的IP地址,客户端之间不能直接通信。
· · · P2P(对等)体系结构:
· · · 服务器不是一直运行的,任何端系统可以直接通信,任何一个节点既是服务器也是客户端、拥有自扩展性,参与主机的间歇性连接还可以改变IP地址,但是难以管理。
· · · C/S和P2P结构体系的混合:
例如:
· · · Napste
· · · · 文件搜索:集中性。主机在中心服务器上注册其资源,主机向中心服务器查询资源。
· · · · 文件传输:P2P,任意节点之间传输。
· · · 及时通信
· · · · 在线检测:集中性。当用户上线时,向中心服务器注册其IP地址,然后与中心服务器联系,找到其它用户所处位置。
· · · · 两个用户之间的聊天:P2P。
· · 进程通信:
· · 在两个不同端系统上的进程,通过跨越计算机网络交换报文,实现相互通信。
· · · 客户与服务器进程:
· · · 在一对进程之间的通信会话中,发起通信的进程标识为客户,在会话开始时等待联系的进程是服务器。
· · · 进程与计算机网络接口:
· · · 进程通过一个被称为 套接字(socket) 的软件接口向网络发送报文和接收报文。套接字就像一个门户,进程只需要将报文推出套接字,然后报文经过一系列的传输,最终到达接收进程的套接字,随后被进程处理。
· · · 套接字是一台主机内应用层与运输层之间的接口,而且是建立网络应用程序的可编程接口,因此套接字也叫做应用程序与网络之间的 应用程序编程接口(API)。
· · · 应用程序开发者可以控制选择运输层协议(TCP、UDP)。还能设定几个运输层参数(最大缓存、最大报文段长度等)。
· · · 分布式进程通信需要解决的问题:
· · · · (1)进程标识和寻址问题:
· · · · 进程为了接收和发送报文必须要有一个标识,即SAP。由目的进程通过特定的套接字(socket)发送报文,套接字(socket)中包含了传送地址。
· · · · · IP地址:
· · · · · 用来标识主机,是一个32bit的值。
· · · · · 端口(port)号:
· · · · · 一般来说,一个主机上可以运行多个应用程序,而端口号就是分配给每个应用程序特定的地址的编号,使进程发送的报文顺利到达目的进程。
· · · · · 目前流行的应用程序有特定的端口号:
Web服务器——端口号80
邮件服务器进程(SMTP协议)——端口号25
· · · · (2)传输层提供的服务-层间信息的代表:
· · · · TCP socket:
· · · · · TCP服务,两个进程之间的通信需要之前要建立连接。两个进程通信会持续一段时间,通信关系稳定。
· · · · · 可以用一个整数表示两个应用实体之间的通信关系,为了使本地标示穿过层间接口的信息量最小。
· · · · · TCP socket:源IP,源端口,目标IP,目标端口。用于指明应用进程会话的本地标识。位于应用层与传输层的接口界面上。
· · · · · 代表一个四元组,表示了两个进程之间的会话关系。就不必在每一个报文的发送都要指定这个4元组。简单且便于管理。
· · · · UDP socket:
· · · · · 提供UDP服务,两个进程之间的通信需要之前无需建立连接,每个报文都是独立传输的,前后报文可能给不同的分布式进程,因此,只能用一个整数表示本应用实体的标示,因为这个报文可能传给另外一个分布式进程。
· · · · · 可以用一个整数表示两个应用实体之间的通信关系,为了使穿过层间接口的信息大小最小。
· · · · · UDP socket:本主机的IP,本主机的端口。但是传输报文时,必须要提供对方IP,port。因为在目的主机接收报文时,传输层需要上传源主机的IP,port。
· · · · · 对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示2元组:IP,port (源端指定)UDP套接字指定了应用所在的一个端节点(end point)。
· · · · · 在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己所采用的ip和port。但是在发送报文时,必须要指定对方的ip和port(另外一个端节点)。
· · · · 总之,在发送报文时,报文必须具备源主机的IP和port、目的主机的IP和port以及传输的数据。
· · · · 如何使用运输层提供的服务实现应用:
· · · · 定义应用层协议:报文格式,解释,时序等。
· · · · 编制程序,通过API调用网络基础设施提供通信服务,如传报文,解析报文,实现应用时序等。
· · · 由应用程序使用的运输服务:
· · · 当开发一个应用程序时必须规定一种可用的运输层协议(TCP、UDP),每个运输层协议有可靠数据传输、吞吐量、定时和安全性等性能。
· · · · 可靠数据传输:
· · · · 一些协议可以将数据正确、完整、不乱序的交付给目的进程。这样的协议就具有可靠数据传输性,如TCP协议,被一些通信软件或者银行等应用程序软件所采纳。
· · · · 此外还有协议在传输数据时,可能会丢弃一些数据,不可靠,这样的协议就不具备可靠数据传输,如UDP协议,由于多媒体应用可以承受一定的数据丢失,所以一些多媒体应用采取UDP协议。
· · · · 吞吐量:
· · · · 有些运输层协议能够以特定的速率提供确保的可用吞吐量。由于应用程序需要对数据以一定的吞吐量发送,但是由于链路、协议等问题,达不到应用程序的吞吐量,可能会导致应用程序以低速率进行编码(较低吞吐量)、或者直接放弃发送,所以效率很低,或根本没用。这种应用程序被认为是带宽敏感的应用,具有特定的吞吐量。而弹性应用可以根据情况确定吞吐量(如:电子邮件、文件传输、web传送等)。
· · · · 一些协议可以良好的控制吞吐量,但也有可能因为链路问题导致吞吐量过低,使应用程序放弃发送数据。
· · · · 定时:
· · · · 运输层协议也能提供定时保证,如发送方注入套接字的每个bit到达接收方的套接字不迟于100ms。这种保证对实时应用影响很大(如视频、语言通话、游戏等)
· · · · 安全性:
运输层协议能为应用程序提供多种安全性服务,例如在发送中,运输协议可以加密发送进程传输的所有数据,也可以在接收进程之前解密数据。
· · · 因特网提供的运输服务
因特网提供了TCP和UDP协议。
· · · · TCP服务:
· · · · (1)面向连接的服务:在客户与服务器之间发送数据时必须提前在两个进程套接字之间建立连接(交换运输层控制信息)。
· · · · (2)可靠的数据传送服务:进程依靠TCP可以无差错、按顺序地交付所有发送数据,没有字节的丢失和冗余。
· · · · (3)拥塞控制机制:当发送方和接收方之间的网络出现拥塞时,这个机制会抑制发送进程,或者限制每个TCP连接。
· · · · (4)无安全性,没有提供加密机制。(最新的SSL(安全套接字层,Secure Sockets Layer)是TCP的加强版,可以提供数据加密)。
· · · · UDP服务:
· · · · 它是一种不提供不必要服务的轻量级运输协议,是一种无连接服务、不可靠数据传输服务、无拥塞控制机制。
· · · · 一些常见应用支持的服务:
· · · 应用层协议:
· · · · 定义了运行在不同端系统上的应用程序进程如何相互传递报文。主要定义了:
交换的报文类型,如请求报文和响应报文。
各种报文类型的语法。
字段的语义。
一个进程何时以及如何发送报文,对报文进行响应的规则。
· · · · 有些应用层协议是由RFC文档定义的,因此位于公共域中,如Web的应用层协议HTTP(超文本传输协议)就作为一个RFC使用。还有些应用层协议是专用的,不被公共域使用。
· · · · HTTP、FTP、SMTP/POP3/IMAP、DNS
· · · · 应用层协议是网络应用的一部分。
· · · · 如Web是一种客户—服务器应用,包含了文档格式HTML、Web浏览器、Web服务器,以及一个应用层协议(HTTP定义了Web服务器和浏览器之间传输的报文格式和序列)。
· · · · 还比如因特网电子邮件应用,包含了容纳用户邮箱的邮件服务器、允许用户读取和生成邮件的邮件客户程序,应用层协议( SMTP(简单邮件传输协议) 定义了电子邮件报文结构的标准、定义了如何在服务器之间以及如何在服务器与邮件客户程序之间传递、定义了如何对报文首部的内容进行解释)。
· Web和HTTP
· · 一些常用术语:
· Web页:有一些对象组成,对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等。
· Web页含有一个基础的HTML文件,该基本HTML文件又包含许多对象的引用(链接)
· 通过URL对每个对象进行引用(访问协议、用户名、端口、口令字等)
· URL格式:协议名 + 用户 + 口令 + 主机名 + 路径名 + 端口(其中用户名和主机名可以省略,即为默认)。
· · HTTP概述:
· · HTTP协议(超文本传输协议)是Web的应用协议。
· · Web浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务器端,用于储存Web对象,每个对象都由URL寻址。
· · HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。
· · · 持久与非持久HTTP
· · · 非持久HTTP:最多有一个对象在TCP上连接发送,下载多个对象需要建立多个连接,如HTTP/1.0使用非持久连接。
· · · 持久HTTP:多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输,如HTTP/1.1使用持久连接。
· · · 响应时间模型:
· · · · 往返时间RTT(round-trip time):一个分组从客户端到服务器,再回到客户端的时间(传输时间省略不计)。
· · · ·响应时间:2RTT+传输时间,一个RTT用来发起TCP连接,一个RTT用来HTTP请求并等待HTTP响应,再加上文件传输时间。
· · · · 非持久HTTP连接:
· · · · 首先HTTP客户端在端口号80(HTTP默认端口)发起一个到目的HTTP服务器的连接。
· · · · 目的HTTP服务器在80号端口等待连接,接受连接并通知客户端。
· · · · HTTP客户端向TCP连接的套接字发送HTTP请求报文,报文表示客户端需要对象。
· · · · HTTP服务器接收到请求报文,从储存器中检索出被请求的对象,将对象封装在一个响应报文,并通过其套接字象客户端发送。
· · · · HTTP服务器进程通知TCP断开该TCP连接(直到TCP确认客户已经完整地收到响应报文为止,它才会实际的断开连接)。
· · · · HTTP客户端收到包含html文件的响应报文,关闭TCP连接,并显示html。然后对html文件进行检查,如果找到了多个引用对象需要请求资源,则对那几个对象,重复前几步,请求资源。
· · · · 注意,因为TCP是可靠传输协议,所以HTTP不需要关注报文能否传输完全,都是由其它层次所实现。HTTP是无状态的,服务器不能维护关于客户的任何信息。HTTP仅定义了在HTTP客户程序与HTTP服务器之间的通信协议
· · · · 非持久HTTP的缺点:每个对象需要两个RTT,操作系统必须为每个TCP连接分配资源。但浏览器通常打开并进行TCP连接,以获取引用连接。
· · · · 持久HTTP连接:
· · · · 服务器在发送响应后,仍保持TCP连接,在相同客户端和服务器之间的后续请求和响应报文,通过相同的连接进行传送,客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求。
· · · · 非流水方式的持久HTTP:客户端只能在收到前一个响应之后才能发出新的请求,每个引用对象花费一个RTT。
· · · · 流水方式的持久HTTP:是HTTP/1.1的默认模式,客户端遇到一个引用对象就立即产生一个请求。所有的引用对象可能只花费一个RTT时间。
· · · HTTP报文格式:
· · · 分为请求报文和响应报文。
· · · · HTTP请求报文:
· · · · 由ASCII码组成(人能阅读的)。每一行最后都有一个回车和换行符结束,最后一行再附加一个回车换行符。
· · · · HTTP请求报文第一行为请求行,后面的行叫做首部行。
· · · · 请求行有三个字段:方法字段、URL字段和HTTP版本字段。方法字段可以取的值有:GET、POST、HAED、PUT和DELETE。大部分使用GET方法。在GET方法中,在URL字段带有请求对象的标识。
· · · · Host首部行指明了对象所在的主机,这条信息是Web代理高速缓存所要求的。
· · · · Connection首部行表示该浏览器告诉服务器不想使用持续连接,要求服务器在发送被请求对象之后就关闭这条连接。
· · · · User-agent首部行用来指明用户代理,即向服务器发送请求的浏览器的类型(通过这条信息,服务器可以有效的为不同类型的用户代理发送相同对象的不同版本)。
· · · · Accept-language首部行表示用户想要得到该对象的语法版本,否则服务器发送它的默认版本。
· · · · 在首部行(和附加的换行和回车)之后有一个‘实体体’。使用GET方法时实体体为空,使用POST方法时才使用实体体。
当用户提交表单时,HTTP客户一般使用
POST方法,例如在用户向搜索引擎提供搜索
关键字时,使用POST报文时,用户依然可以
向服务器请求一个Web页面,但Web页面的特
定内容和用户在表单字段中输入的内容有关,
此时的实体体包含这个输入值。
注意用表单生成的请求报文不是必须使用
POST方法的,HTML表单经常使用GET方法,
并在(表单字段中)请求的URL中输入的数据。
HEAD方法类似于GET方法,在服务器收到
HEAD方法的请求时,会用HTTP报文响应,
但不返回请求对象。
PUT方法允许用户上传对象到指定的Web服务
器上指定的路径。常被需要向Web服务器上传
对象的应用程序使用。
DELETE方法允许用户或应用程序删除Web
服务器上的对象。
· · · · 格式:sp->空格 cr->回车 lf->换行
· · · · HTTP响应报文:
· · · · 包含初始状态行、6个首部行、实体体。实体体是报文的主要部分,包含了所请求的对象本身。
· · · · 初始状态行有3个字段:协议版本字段、状态码、相应状态信息。
常见状态码与相应状态信息