每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的协议。这些应用进程之间相互通信和协作通常采用一定的模式,常见的有客户/服务器模型和P2P模型
客户(Client)和服务器(Server)都是指通信中所涉及的两个应用进程。客户/服务器模型所描述的是进程之间的服务和被服务的关系。服务可以是任意的应用,如文件传输服务、电子邮件服务等。在这个模型中,客户是服务的请求方,服务器是服务的提供方。例如,主机A 向主机B 发出服务请求,主机A是客户机,而主机B向主机A提供服务,主机B是服务器。客户程序必须知道服务器程序的地址,而服务器程序不需要知道客户程序的地址。
客户/服务器模型的主要特点:
P2P模型指两个主机在通信时并不区分哪一个是服务请求方,哪一个是服务提供方。只要两个主机都运行了 P2P 软件,它们就可以进行平等的对等连接通信,如双方都可以下载对方已经存储在硬盘中的共享文档(而在客户/服务器模型下,只有当客户机主动发起请求时,才能从服务器获得文档,或将文档传递给服务器,而且多个客户机之间如果想要共享文件,只能通过服务器中转)。例如,大家现在常用的QQLive 和电驴等软件就是使用P2P 模型。
P2P模型本质上仍然是客户/服务器模式,只是对等连接中的每一个主机既是客户又是服务器。
P2P模型带来的好处是,任何一台主机都可以成为服务器,改变了原来需要专用服务器的模式,很显然,多个客户机之间可以直接共享文档。此外,可以借助 P2P 网络模型,解决专用服务器的性能瓶颈问题(如播放流媒体时对服务器的压力过大,而通过 P2P 模型,可以利用大量的客户机来提供服务)。
P2P模型的主要特点:
如果现在不允许你通过 www.abc.com 来访问某主页 B,请问还有什么方式?可直接使用存放B主页的服务器的 IP 地址(XX.X.X)来访问。当然,如果现在整个网络只有几个网站,人们通过记忆其服务器的 IP 地址来访问还是可以勉强记住的,但是成千上万的网站都需要记忆其服务器的 IP 地址才能正确访问,相信没有几个用户能爱上网络,于是就出现了域名,这样,人们就可以通过便于记忆的域名来访问网站了。但是这个是表面上的,其实真正的访问还是要通过 IP 地址,那么我们自然就想到应该存在一个东西,即可以将域名转换成相对应的IP地址,于是DNS 系统就诞生了。
从概念上将DNS分为3个部分:
因特网采用了层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器都有一个唯一的层次结构的名字,即域名(Domain Name)。
域还可以被划分为子域,而子域还可被划分为子域的子域,这样就引入了顶级域名、二级域名、三级域名等。
每个域名都由标号序列组成(各标号分别代表不同级别的域名),各标号之间用点隔开,格式如下:
···. 三级域名. 二级域名. 顶级域名
级别最低的域名写在最左边,而级别最高的顶级域名写在最右边,且域名没有大小写之分
顶级域名主要分为以下三大类:
因特网的域名系统(DNS)被设计成一个联机分布式的数据库系统,并采用客户/服务器模型。名字到域名的解析是由若干个域名服务器来完成的,域名服务器程序在专设的节点上运行,运行该程序的机器称为域名服务器。
一个服务器所负责管辖的(或有权限的)范围称为区(Zone)。如图6-5 所,各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位,区一定小于或等于域。
因特网上的域名服务器系统是按照域名的层次来安排的,每个域名服务器都只对域名体系中的一部分进行管辖。因此,共有以下4 种不同类型的域名服务器:
主机向本地域名服务器的查询都是采用递归查询。
如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以DNS 客户的身份向其他域名服务器继续发出查询请求报文。
本地域名服务器向根域名服务器的查询通常采用迭代查询,当然也可以采用递归查询,这取决于最初的查询请求报文的设置要求使用哪一种查询方式。
当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器“下一步应当向哪一个域名服务器进行查询”,然后让本地域名服务器进行后续的查询。
递归查询是指本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的。在步骤7中,本地域名服务器从根域名服务器得到了所需的 IP 地址,最后在步骤8中,本地域名服务器把查询结果告诉主机m.xyz.com。
连接在因特网上的主机的域名必须是唯一的
文件传送协议(FTP)是因特网上最广泛使用的传送协议。FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
FTP 只提供文件传送的一些基本服务,它使用TCP 可靠地传输服务。FTP 使用客户/服务器模型。一个FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成,一个主进程负责接收新的请求;另外有若干个从属进程,负责处理单个请求。
主进程的工作步骤:
在进行文件传输时,FTP 的客户机和服务器之间要建立两个 TCP 连接,一个用于传输控制命令和响应,称为控制连接;另一个用于实际的文件内容传输,称为数据连接。
FTP 服务器监听在21 号端口,等待客户机连接建立在这个端口上的连接称为控制连接,客户机可以通过这个连接向服务器发送各种请求,如登录、改变当前目录、切换数据传输模式、列目录内容、上传文件等。当需要传送文件时,服务器和客户机之间要建立另外一个连接,这个称为数据连接。
控制连接在整个会话期间一直保持打开,FTP 客户机发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用于传送文件。实际用于传送文件的是数据连接。服务器端的控制进程在接收到FTP 客户机发送来的文件传输请求后就创建数据传送进程和数据连接,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭数据传送连接并结束运行。
电子邮件又称为 E-mail,是目前因特网上使用最频繁的一种服务。它为因特网用户提供了一种快速、便捷、廉价的通信方式。电子邮件把邮件发送到因特网服务提供商 (IntermetService Provider,ISP)的邮件服务器,并放在其中的收信人邮箱中,收信人可随时上网到ISP的邮件服务器进行读取。
一个电子邮件系统有以下3 个主要构件
电子邮件的发送和接收过程
电子邮件由信封和内容两部分组成。一般只规定了邮件内容中的首部格式,而邮件的主体部分由用户自由撰写。用户写好首部后,邮件系统自动将信封所需的信息提取出来并写在信封上。
邮件内容首部包含一些关键字,后面加上冒号,如“To:”是收信人的邮件地址,“Subject:是邮件的主题等。
由于 SMTP 只限于传送一定长度的 7 位ASCII码邮件,于是提出了通用因特网邮件扩充(Multipurpose Internet Mail Extensions,MIME)。MIME的意图是继续使用目前的[RFC 822]格式,但增加了邮件主体的结构,并定义了传送非ASCII码的编码规则。
MIME定义的两种将非ASCII码字符转化为ASCII字码的编码方法(非重点):
quoted-printable 编码
适合传送只有少量的非ASCII码,用一个“=”后面加两个数字字符来表示一个非ASCII码字符。这两个数字是该字符的十六进制值,ASCII码字符不做转换。
based64 编码
对于任意的二进制文件,可用 base64 编码。这种编码方法是先把二进制代码划分为几个24位等长的单元,然后把每一个24位单元划分为4个6位组,每一个6位组按以下方法转换成ASCII码。6位的二进制代码共有64种不同的值,从0~63,用A表示0,用B表示1等。26个大写字母排列完毕后,排 26 个小写字母,再排 10个数字,最后用“+”表示62,用“/”表示63。再用两个连在一起的等号“==”和一个等号“=”分别表示最后一组的代码只有8位或16位。回车和换行都忽略,它们可在任何地方插入。
SMTP 所规定的就是在两个相互通信的 SMTP 进程之间应如何交换信息。SMTP运行在TCP基础之上,使用25 号端口,也使用客户/服务器模型。
SMTP规定了 14条命令和21 种应答信息(不用记忆)。
SMTP 通信的3个阶段
POP 是一个非常简单,但功能有限的邮件读取协议。现在使用的是它的第三个版本 POP3,POP 也使用客户/服务器的工作方式。在接收邮件的用户计算机中必须运行 POP 客户程序,而在用户所连接的ISP的邮件服务器中运行POP服务器程序。
POP3 的一个特点是只要用户从 POP 服务器读取了邮件,POP 服务器就将该邮件删除。
不要将邮件读取协议POP与邮件传送协议SMTP弄混
发信人的用户代理向源邮件服务器发送邮件以及源邮件服务器向目的邮件服务器发送邮件,都是使用SMTP。而POP 是用户从目的邮件服务器上读取邮件所使用的协议。
邮件发送过程总结
从上面这个过程可以看出,任何客户端都可以通过 SMTP 向邮件服务器发送邮件,而且邮件发送者的地址是完全可以伪造的,服务器也只能被动接收,这也是垃圾邮件泛滥的原因。
邮件接收过程总结
从上面这个过程可以看出,POP3 是由客户端决定是否将已收取的邮件保留在服务器的。此外,POP3 采用明文传送用户的邮箱密码,这给邮件安全带来了隐患。
WWW(Worid Wide Web,万维网)简称为3W,它并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所。它的特点在于用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。WWW还提供各类搜索引擎,使用户能够方便地查找信息。
WWW 把各种信息按照页面的形式组合,一个页面包含的信息可以有文本、图形、图像、声音、动画、链接等各种格式,这样一个页面也称为超媒体 (如果页面中只有文字和链接则称为超文本,注意区分),而页面的链接均称为超链接。
WWW使用统一资源定位符(URL)来标志 WWW 上的各种文档。URL的一般格式为
<协议>: //<主机>:<端口号>/<路径>
常见的协议有HTTP、FTP等。主机部分是存储文档的计算机,可以是域名也可以是IP 地址,端口号是服务器监听的端口(根据协议可以知道端口号,一般省略),路径一般也可省略,并且在 URL中的字符对大写或小写没有要求。
万维网以客户/服务器方式工作。浏览器是在用户计算机上的万维网客户程序,而万维网文档所驻留的计算机则运行服务器程序,这个计算机称为万维网服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的文档。
工作流程:
超文本传送协议 (HTTP)是在客户程序(如浏览器)与WWW 服务器程序之间进行交互所使用的协议。HTTP 是面向事务的应用层协议,它使用 TCP 连接进行可靠传输,服务器默认监听在80端口。
从协议执行的过程来说,当浏览器要访问 WWW 服务器时,首先要完成对 WWW 服务器的域名解析。一旦获得了服务器的 IP 地址,浏览器将通过 TCP 向服务器发送连接建立请求。每个服务器上都有一个服务进程,它不断地监听 TCP的端口 80,当监听到连接请求后便与浏览器建立连接。TCP连接建立后,浏览器就向服务器发送要求获取某一 Web 页面的HTTP请求。服务器收到HTTP 请求后,将构建所请求的 Web 页的必需信息,并通过 HTTP 响应返回给浏览器。浏览器再将信息进行解释,然后将Web 页显示给用户。最后,TCP 连接释放。
两种报文格式的区别就是开始行不同。
HTTP的工作方式既可以使用非持久连接,也可以使用持久连接。