一、应用层协议原理:
1.网络应用程序体系结构:
从应用程序研发者的角度看,网络体系结构是固定的,并为应用程序提供了特定的服务集合。
在另一方面,应用程序体系结构(application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户-服务器体系结构或对等(P2P)体系结构。
1.1客户-服务器体系:
在客户-服务器体系结构(client- server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。值得注意的是利用客户-服务器体系结构,客户相互之间不直接通信。客户-服务器体系结构的另一个特征是该服务器具有固定的、周知的地址,该地址称为IP地址。因为该服务器具有固定的、周知的地址,并且因为该服务器总是打开的,客户总是能够通过向该服务器的IP地址发送分组来与其联系。具有客户-服务器体系结构的非常著名的应用程序包括Web,FTP以及电子邮件。
在一个客户-服务器应用中,常常会出现一台单独的服务器主机跟不上它所有客户请求的情况。为此,配备大量主机的数据中心(data center)常被用于创建强大的虚拟服务器。一个数据中心能够有数十万台服务器,它们必须要供电和维护。此外,服务提供商必须支付不断出现的互联和带宽费用,以发送和接收到达/来自数据中心的数据。
1.2 P2P体系结构:
在一个P2P体系结构(P2P architecture)中,对位于数据中心的专用服务器有最小的(或者没有)依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。因为这种对等方通信不必通过专门的服务器,该体系结构被称为对等方到对等方的。许多目前流行的、流量密集型应用都是P2P体系结构的。这些应用包括文件共享(例如BitTorrent)、对等方协助下载加速器(例如迅雷)、因特网电话和视频会议(例如Skype)。P2P体系结构的最引人入胜的特性之一是它们的自扩展性(self- scalability )。
2.进程通信:
2.1基本了解:
对运行在多个端系统上的程序之间的通信,用操作系统的术语来说,进行通信的实际上是进程(process)而不是程序。在两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信。
2.2客户-服务器进程:
在一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。
2.3进程与计算机网络之间的接口:
进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。当一个进程想向位于另外一台主机上的另一个进程发送报文时,它把报文推出该门(套接字)。该发送进程假定该门到另外一侧之间有运输的基础设施,该设施将把报文传送到目的进程的门口。一旦该报文抵达目的主机,它通过接收进程的门(套接字)传递,然后接收进程对该报文进行处理。
套接字还可作为建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口(API)。
2.4进程寻址:
在因特网中,主机由其IP地址标识。找到主机号后,还应找到对应的进程号,目的地端口号用于这个目的。
3.因特网提供的运输服务(TCP和UDP):
无论TCP还是UDP都没有提供任何加密机制,这就是说发送进程传进其套接字的数据,与经网络传送到目的进程的数据相同。因特网界已经研制了TCP的加强版本,称为安全套接字层(Secure Sockets Layer,SSL)。用SSL加强后的TCP不仅能够做传统的TCP所能做的一切,而且提供了关键的进程到进程的安全性服务,包括加密、数据完整性和端点鉴别。我们强调SSL不是与TCP和UDP在相同层次上的第三种因特网运输协议,而是一种对TCP的加强,这种强化是在应用层上实现的。
4.应用层协议:
应用层协议(application-layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。
因为因特网电话应用通常能够容忍某些丢失但要求达到一定的最小速率才能有效工作,所以因特网电话应用的开发者通常愿意将该应用运行在UDP上,从而设法避开TCP的拥塞控制机制和分组开销。但因为许多防火墙被配置成阻挡(大多数类型的)UDP流量,所以因特网电话应用通常设计成如果UDP通信失败就使用TCP作为备份。
二、web和http:
1.基本了解:
web(万维网):Web是一个引起公众注意的因特网应用,它极大地改变了人们与工作环境内外交流的方式。它将因特网从只是很多数据网之一的地位提升为仅有的一个数据网。web的最具有吸引力的地方就是按需操作:当用户需要时,就能得到想要的操作。
http:Web的应用层协议是超文本传输协议(即http,它是web的核心)。HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。
一些web术语:
Web页面(Web page)(也叫文档)是由对象组成的。一个对象(object)只是一个文件,诸如一个HTML文件、一个JPEG图形、一个Java小程序或一个视频片段这样的文件且它们可通过一个URL地址寻址。
URL地址:统一资源定位符(URL)也被称为网页地址,是因特网上标准的资源的地址。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。例如,URL地址http://www. someSchool. edu/someDepartment/picture,gif,其中的www. someSchool. edu就是主机名,/someDepartment/ picture. gif就是路径名。
web浏览器和web服务器:因为Web浏览器实现了HTTP的客户端,所以在Web环境中我们经常交替使用“浏览器”和“客户”这两个术语。Web服务器实现了HTTP的服务器端,它用于存储Web对象,每个对象由URL寻址。
2.http和https:
HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行)。HTTP客户首先发起一个与服务器的TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。
客户向它的套接字接口发送HTTP请求报文,并从它的套接字接口接收HTTP响应报文;接口接收HTTP请求报文和向它的套接字接口发送HTTP响应报文。一旦客户向它的套接字接口发送了一个请求报文,该报文就脱离了客户控制并进入TCP的控制,体现出分层体系。这里我们看到了分层体系结构最大的优点,即HTTP协议不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节。那是TCP以及协议栈较低层协议的工作。
http是一个无状态协议:因为HTTP服务器并不保存关于客户的任何信息。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。假如某个特定的客户在短短的几秒内两次请求同一个对象,服务器并不会因为刚刚为该客户提供了该对象就不再做出反应,而是重新发送该对象,就像服务器已经完全忘记不久之前所做过的事一样。
Cookie和Session:为了解决http的无状态。
Cookie:
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。
当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
Session:
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。每个用户访问服务器都会建立一个Session并自动分配一个SessionId,用于标识用户的唯一身份。
https:HTTPS是基于HTTP+SSL/TSL来实现的
HTTP主要有这些不足:
通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
HTTPS是基于HTTP+SSL/TSL来实现的,发送的数据需要加密,接收到的数据需要解密,比HTTP安全,但是传输效率比HTTP低。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
3.持续连接和非持续连接:
当客户-服务器的交互是经TCP进行的,应用程序的研制者就需要做一个重要决定,即每个请求/响应对是经一个单独的TCP连接发送,还是所有的请求及其响应经相同的TCP连接发送呢?采用前一种方法,该应用程序被称为使用非持续连接,采用后一种方法,该应用程序被称为使用持续连接。
非持续连接有一些缺点:
第一,必须为每一个请求的对象建立和维护一个全新的连接。
第二,每一个对象经受两倍RTT的交付时延.即一个RTT用于创建 TCP,另一个RTT用于请求和接收一个对象。
往返时间(Round-Trip Time,RTT)的定义:该时间是指一个短分组从客户到服务器然后再返回客户所花费的时间。