计算机网络(六)——应用层

1. 导学&应用层概述

计算机网络(六)——应用层——应用层导图.png

本章知识导图如上,可以结合导图进行学习。

在进行正文学习前,先看一下应用层的概述以及功能介绍:

计算机网络(六)——应用层——应用层概述.png

传输层给应用进程提供一种端到端的通信服务,但是不同的网络应用进程之间还需要有一些不同的通信规则,因此就在传输层协议之上建立了应用层,所以应用层是来对应用程序的通信提供服务的。

应用层协议规定:

  1. 应用进程交换的报文类型。
  2. 各种报文类型的语法。
  3. 字段的语义。
  4. 进程何时,如何发送报文,以及对报文进行响应的规则。

对于这些规定,进而衍生出了下面的几个应用层的功能:

  1. 文件传输、访问和管理。
  2. 电子邮件。在发送和接收电子邮件的过程中就要使用到应用层的相关协议。
  3. 虚拟终端。个人计算机用户可以直接使用他人计算机来和大型计算机进行网络通信,而不必使用一些专门的终端。也就是说,使用虚拟终端可以更方便的使用大型计算机的一些相关功能。
  4. 查询服务和远程作业登录。比如说打开网页时,在百度里搜索哔哩哔哩,点了百度一下,这就是在请求服务的过程,而服务器返回请求就是响应该请求的过程。

应用层的协议有:FTP、SMTP、POP3、HTTP、DNS等

2. 网络应用模型

应用层通常使用的两种模型分别是客户/服务器模型和P2P模型。

2.1 客户/服务器模型

计算机网络(六)——应用层——客户-服务器模型.png

上图是客户/服务器模型,服务器就是提供计算服务的设备,而客户机就是请求计算服务的主机。在导学部分举的搜索哔哩哔哩的例子,就是一个客户/服务器模型的应用。

服务器的特点:

  1. 永久提供服务。服务器24小时保持清醒,永远处于等待客户机发来请求的状态。
  2. 永久性访问地址/域名。像百度,就是永久性域名/地址,根据这个域名/地址可以访问该服务器。

客户机的特点:

  1. 与服务器通信,使用服务器提供的服务。
  2. 间歇性接入网络。客户机不像服务器一样时刻保持清醒状态,客户机是可以随时进入网络也可以随时退出网络的。
  3. 可能使用动态IP地址。客户的IP地址是不限制的,可以使用动态IP地址,但服务器的IP和域名是要永久性固定的。
  4. 不与其他客户机直接通信。客户机的通信是通过服务器转发的。

客户/服务器模型应用广泛,比如在使用Web、文件传输FTP、远程登录、电子邮件等,都使用的是C/S模型。

2.2 P2P模型(对等模型)

计算机网络(六)——应用层——P2P模型.png

上图是P2P模型,可以很明显的看到,与客户/服务器模型相比,P2P少了服务器设备。所以P2P的思想就是整个网络的传输内容都不会保存在一个中心的服务器上,而是每个结点都具有上传和下载数据的功能,他们的权利和义务大体是对等的,所以也叫对等模型。

P2P模型的特点:

  1. 不存在永远在线的服务器。
  2. 每个主机既可以提供服务,也可以请求服务。
  3. 任意端系统/节点之间可以直接通讯。
  4. 节点间歇性接入网络。
  5. 节点可能改变IP地址(即动态IP)。
  6. 可扩展性好。可扩展性指当网络有大量主机涌入,这些主机之间是否还能够顺利请求服务。P2P模型就可以应对大量主机涌入网络,因为在P2P模型中,每台主机既可以提供服务,也可以请求服务,当主机增多了,虽然请求多了,提供的服务也增多了,因此可以不用担心资源不够用或带宽受限的问题。而C/S模型会有响应限制,所以只能接受一定数量的客户请求。
  7. 网络健壮性强。所谓网络健壮就是指网络不容易瘫痪掉,在P2P模型里,任意一台主机退出或坏掉,对整个网络没有任何影响。而在C/S模型里,当服务器坏掉了,整个网络都会崩溃,所以C/S模型的网络健壮性相对来说是弱一些的。

3. 域名系统(DNS)

3.1 DNS系统

网民在访问网站的过程当中,就是主机和另一台主机进行远程通信的过程。那当前主机是如何找到对方主机的呢?是通过IP地址,只要当前主机找到对应网站的IP地址,就可以和该网站进行信息的交换。但是人们通过记忆IP地址,根据IP地址去找网站是很麻烦的,所以采用域名来替代IP地址。域名就是网站的名字,比如百度的域名就是www.baidu.com。虽然人们可以通过域名访问网站,但实际上计算机访问网站时,是通过把域名转换为IP地址来实现访问的,而计算机实现域名到IP地址的转换就要通过DNS系统。

而DNS实现域名解析的大致流程如下:

计算机网络(六)——应用层——DNS域名解析.png

在计算机里输入要访问网站域名,域名会传给DNS服务器,通过DNS服务器的操作,就会返还给主机要访问网站的IP地址,主机知道IP地址就可以访问这个网站,网站的信息也可以回复回来。如果访问不了网站,则可能是网站崩溃,也可能是DNS服务器域名解析出现问题。

DNS系统采用客户/服务器模型,其协议运行在UDP之上,使用53号端口。

从概念上可以将DNS分为三部分:层次域名空间、域名服务器和解析器。

3.2 域名

计算机网络(六)——应用层——域名.png

任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,即域名。

域名由英文字母、数字和点(也是英文当中的句号)组成,每个点分隔开的东西叫做标号,像上图的www就是一个标号,cskaoyan也是一个标号,com也是一个标号。每个标号不能超过63个字符,但为了记忆方便,最好是别超过12个字符,而且标号也是不区分大小写字母的。

域名当中的每一个标号的级别也不一样,级别的高低是自左向右,由低到高的。所以最右边的标号叫顶级域名,其次为二级域名,再往下就是三级域名,接下来还可以有四级、五级等。

除了标号以外,域名还有一个根,根就是在顶级域名后面的一个点,但一般写域名都会省略这个点,根过了以后才是顶级域名。

各级域名的分类及各分类的常见标号如上图所示,可以自己参阅。

可以发现二级域名有一些和顶级域名重复了,这是因为在顶级域名处可以使用国家顶级域名,接下来的类别域名就可以在国家之下说国家的类,,比如某个网站 xxx.xxx.com.cn,就可以理解为中国的一家企业。

上图还有一些二级域名没有罗列出来,比如说自己注册的域名,如CCTV。但有一点要注意,自己注册域名一定要全球唯一。

通常会用如下的域名树的形式来描述整个域名系统:

计算机网络(六)——应用层——域名树.png

对于一个网站的域名书写,一般都是按域名树自下而上的顺序进行书写。比如上图的华科大网站www.hust.edu.cn。

3.3 域名服务器

实现域名系统,需要靠分布在各地的域名服务器来实现。DNS服务器是有很多台的,而且还要根据树形结构的域名系统来进行一个层次的划分,也就是把DNS服务器也按照一个层次进行划分为几种不同类型的DNS服务器。

DNS服务器主要划分为如下的几类:

计算机网络(六)——应用层——域名服务器.png

本地服务器不属于这样的一个层次结构,但是本地服务器对域名系统又很重要,当一个主机发出DNS查询请求时,这个查询请求报文就会首先发给本地域名服务器。所以,本地域名服务器相对其余三种域名服务器而言,他是离主机最近的(一般不超过几个路由器的距离)。当一台主机要查询的另一台主机是和他属于同样的一个本地ISP时,本地域名服务器就可以立刻将所查询的主机名转换成IP地址,而不需要询问其他主机。所以有了本地域名服务器的存在,可以使整个查询过程变得更加简单快速。

当一个主机要访问一个网站时,就要先发送一个DNS查询请求,首先发给的是本地域名服务器。如果本地域名服务器的缓存中,不清楚这个主机所发送的DNS请求当中的IP地址和解析,就要先向根域名服务器求助。而**根域名服务器知道所有顶级域名的服务器对应的IP地址**。

例如主机想访问www.badiu.com,就会先向本地服务器发送DNS请求,但由于主机是第一次访问网站,所以本地域名服务器暂时不知道该网站对应的IP地址是多少, 于是就会向根域名服务器请求帮助。而根域名服务器知道所有顶级域名的服务器对应的IP地址,所以根域名服务器看到这样的IP地址后,就会先看其顶级域名是谁,然后就会把这个顶级域名的IP地址告诉本地域名服务器,或继续向下查询,直到查询到详细的网站地址,再把该网站的IP地址告诉本地域名服务器。

补充:在因特网上一共会有13个不同IP地址的根域名服务器,它们的名字是用一个英文字母来命名的,从a一直到m,相应的域名就是a.rootservers.net(a可以换成a~m的任意一个字母)。但是要注意,这些根域名服务器并不是由13台主机所构成,这一个域名可以对应好几台主机(即几台主机共用一个域名)。

**顶级域名服务器负责管理该顶级域名服务器注册的所有二级域名**。也就是说对于顶级域名服务器,他知道他分支的权限域名服务器的IP地址是多少。比如上面的例子,在找寻百度网站时,当根域名服务器找到com时,顶级域名服务器com就可以继续往下找baidu标号。这就找到了权限域名服务器。

权限域名服务器是一个区的域名服务器。区就是对DNS服务器的管辖范围进行了一个区分,它是DNS所实际管辖的一个范围。举个例子,比如说有一家公司叫abc,这个abc公司有两个下属部门分别是x,y。而这x部分下面又分了3个部门,分别是u,v,w;而y下面也有一个直属部门是t部门。如果abc公司只设一个区,也就是abc.com,abc及下面的所有部门都属于这个区。如果abc公司规模扩张了,就会划分两个区或多个区。假设现在abc扩张一个区是y.abc.com。那如何将原来的区进行划分呢?很简单,只需要将原来abc区里的y分支全部分出来充当y区域即可,换句话说,原来的abc区域里有x部门和y部门,但因为y部门要扩充为1个区,所以abc的区里只有x部门及其下属部门u、v、w,它们依然属于abc.com。而y部门被划分出来成为y.abc.com区,那么对应的y部门下的t部门也被划分到了y.abc.com区。到这里不难看出,虽然abc.com和y.abc.com分别对应两级域名和三级域名,但实际上他们俩是对等的两个区,它们都是com域名服务器下的一个分支。而这两个区对应两个权限域名服务器

如果一个顶级域名服务器还不能够得到域名和IP地址的一个完整解析,就要继续往下请求到权限域名服务器,如果一个权限域名服务器还不能够给出最后的查询回答时,就会告诉发送查询请求的DNS客户,下一步应该找哪一个新的权限域名服务器。比如上例里查询到了abc.org,但实际要找的是y.abc.org,那么abc.org就会告诉DNS客户去找y.abc.org。

3.4 域名解析过程

接下来具体看一下域名解析的过程。

域名解析过程主要有两种类别,一个是递归查询,一个是迭代查询。

计算机网络(六)——应用层——DNS域名解析过程.png

主机和本地域名服务器之间都是递归查询的方式,只不过根据其他服务器之间的查询方式不同,分为了递归和迭代。

递归查询,就是主机先查询本地域名服务器,如果查不到,本地域名服务器就会作为客户去查询根域名服务器,然后根域名服务器就会作为客户去查询顶级域名服务器,再然后顶级域名服务器就会作为客户去查询权限域名服务器。最终权限域名服务器就能找到对应的IP返回给主机。

迭代查询,据图也很容易理解,就是主机在本地域名服务器查不到,就会一直由本地域名服务器进行查询,本地域名服务器先查询根域名服务器,根域名服务器告诉本地域名服务器去查询哪个顶级域名服务器,本地域名服务器就会查询顶级域名服务器,像这样最终迭代到权限域名服务器,权限域名服务器告诉本地域名服务器网站IP地址,本地域名服务器再发送给主机。

可以发现,不论是上述哪一个方式,其过程都比较繁琐,要经历很多次查询,因此为了提高DNS查询效率,就引入了高速缓存。

高速缓存可以用来存放最近查过的域名已经从哪里获得域名映射信息的记录,比如说在迭代查询过程中,刚刚登录了百度的网站,也就是说实现了百度域名与IP地址的解析,那这个域名与IP地址的映射关系就存储在了本地域名服务器的高速缓存中,这时候要是再次访问百度网站,就会先搜索本地域名服务器的高速缓存中是否这么一个项,如果有这么一个项,就会把对应IP直接返回主机,而不需要经历接下来的迭代。如果这个本地域名服务器中并没有它对应的IP地址,但是有顶级域名服务器的IP地址,就可以直接查询顶级域名服务器获得下一步信息,而不用经历根域名服务器的查询。

通过高速缓存可以大大减轻域名服务器的负荷,同时也可以使DNS查询的请求和回答报文数量大大减少,可以加快DNS请求的速度。为了保证高速缓存所存内容的正确性,高速缓存就要定期更新,就是为每一项内容设置一个计时器,并且处理超过合理时间的项(**高速缓存能动态更新**)。当然不只本地域名服务器里会高速缓存,许多主机里也有高速缓存,许多主机开机时,就会从本地域名服务器下载域名和主机对应的数据库并放到本机的高速缓存里。也就是说,访问一个网站,最先查的应该是本机的高速缓存,本机高速缓存没有,才会去查本地域名服务器的高速缓存。

4. 文件传输协议FTP

4.1 文件传送协议

文件传送协议有两种:文件传送协议FTP和简单文件传送协议TFTP。

TFTP是一个很小且易于实现的文件传送协议,它的优点是非常适用UDP环境。当需要将程序或文件同时向许多个机器下载时,就经常会用到TFTP。另外TFTP代码块所占内存比较小,对于一些比较小的计算机或某些用途的设备就比较重要了。因此TFTP是一个比较容易实现而且比较面向小文件的一种传送协议。

FTP是这部分的重点,最主机的是它提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。也就是说文件传输时使用FTP协议,就可以屏蔽不同操作系统之间的差异。

接下来将重点介绍FTP协议。

4.2 FTP服务器和用户端

计算机网络(六)——应用层——FTP服务器和用户端.png

FTP是基于C/S的协议。客户和服务器是通过一个客户机程序联系在一起,用户通过一个客户机程序连接在远程计算机上运行的服务器程序。

连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器。

4.3 FTP工作原理

计算机网络(六)——应用层——FTP工作原理.png

前面说过FTP的客户和服务器是通过一个客户机程序联系在一起的,所以使用FTP的第一步是登录,在地址框中输入FTP的地址,就可以开始正式登陆FTP的服务器并进行文件传送。登陆要输入ftp的地址以及用户名和密码,有时候也可以采用匿名登录的方式(匿名登录可以参考上图的讲解注释)。

登陆以后就可以对文件进行操作,对文件操作其实就是在和服务器进行连接,通常使用TCP进行连接实现可靠传输。

FTP服务器可以有一个或多个,客户端也可以是一个或多个。而且一个FTP进程可以同时为多个进程提供服务。

FTP的进程主要分为两大部分,第一部分就是1个唯一的主进程,第二部分就是n个从属进程。

主进程的作用是负责接收新的请求,它的工作步骤首先是先要打开服务器的一个熟知端口21,这个端口打开后就可以使客户进程成功的连接上,接下来只需要等待客户进程发送一个连接请求,然后再进行数据的连接和传送。接下来就可以启动n个从属进程,每个从属进程都可以处理单个的客户请求。

接下来结合一个标准图示,再来详细看一下FTP的工作原理:

计算机网络(六)——应用层——FTP工作原理2.png

上图中的两个圆柱就代表系统中正在工作的进程,图中的服务器会有两个从属进程,分别是控制进程和数据传送进程(图中展示的是这两个从属进程,但并不是只有他两,另外图中没有画主进程,也并不代表没有主进程,这里画成这样是方便介绍)。客户端这边除了数据传递进程和控制进程之外还有用户界面。

客户端和服务端的控制进程建立了一个TCP控制连接,数据传递进程建立了一个TCP数据连接。**控制连接在整个文件传送过程中会一直打开,而数据连接在发送完数据以后就会关闭。**FTP客户发出的传送请求都要经过控制连接来发送给服务器端的控制进程。控制连接相当于传送前的一个准备步骤。而数据连接才是实际当中用于传送的连接。服务器端的控制进程在接收到客户端发来的传送请求以后,就创建这样一个数据传送进程,并建立数据连接。因此可以总结为控制连接传送请求,数据连接传送文件。

注意,FTP协议是一个比较复杂的协议,因为他可以使用多个端口号。可以看到在控制连接处使用端口号21,而在数据连接处,使用端口号20,因此可以看到控制连接和数据连接是分开的,所以也说FTP的控制信息是带外传送的。

补充一点,数据连接端口号不一定是20,是否为20与传输模式有关,传输模式主要有两种,一种是主动的传输模式,一种是被动的传输模式。如果是主动的,TCP数据连接端口就是20,;如果是被动的,TCP数据连接端口就是由服务器和客户端协商决定,通常该端口大于1024。

接下来看一下主动和被动这两种传输模式。

主动模式:当客户进程向服务器发送连接请求时,就要寻找连接服务器进程的数据端口也就是21号端口,同时也要告诉服务器自己进程的端口号码用于建立两个进程间的数据传送连接。接着,服务器端就会使用自己传送数据的这样一个数据端口也就是20号端口,与客户进程刚刚提供的端口号码建立数据传送连接,然后就可以正式传送文件了。

被动模式:被动模式的前半部分与主动模式一样,不同的是被动模式并不会主动去与客户端建立数据传送连接。当客户端与服务器端建立连接后,会发送一个请求命令,请求服务器端提供一个数据端口号,服务器端收到这个请求后就会返还一个大于1024的端口号码,作为被动方式下的数据连接的端口号,接下来只需要等待客户端来建立连接即可。

最后补充一个知识点,就是FTP的传输模式:FTP可以以文本模式和二进制模式传输数据。

5. 电子邮件

5.1 电子邮件

计算机网络(六)——应用层——电子邮件信息格式.png

上图是我们常用的电子邮件的信息格式,对于电子邮件很多人都用过,这里再贴一下图片,可以更好的辅助学习本节。

5.2 电子邮件系统的组成结构

计算机网络(六)——应用层——电子邮件组成结构.png

电子邮件的组成结构有三部分,分别是用户代理、邮件服务器、协议。

(1) 用户代理

用户代理:用户代理就是用户和电子邮件系统的一个接口,通常情况下,用户代理就是运行在电脑当中的一个程序。所以说用户代理又可以称之为是电子邮件的客户端软件。用户代理可以为用户提供一个比较友好的接口,目前就是给用户一个窗口的界面,通过这个界面用户就可以写邮件,并且发邮件和接收邮件。可以使用的用户代理有Foxmail、Outlook等(这些都是具体的客户端软件,现在用的比较少)。

用户代理有四个功能:

  1. 撰写。给用户提供一个编辑信件的环境。
  2. 显示。用户写完的信可以显示在屏幕上。而且可以看到收来的和发出去的信件内容。
  3. 处理。包括发送邮件和接收邮件,收件人可以根据不同的情况按照不同方式对信件进行处理。
  4. 通信。在写完邮件后,可以利用邮件的一些发送协议,来把邮件发送到所指定的一个邮件服务器当中。同时在接收方,收件人也可以从接收方的邮件服务器当中读取这个收到的邮件。

(2) 邮件服务器

邮件服务器会保持24小时的不间断工作,并且它会有大容量的一个邮件信箱来容纳大量的信件。

邮件服务器的两个主要功能:

  1. 发送和接收邮件。这个发送和接收与上面用户代理里的发送和接收不一样,用户代理的发送邮件是指把邮件从客户端发送给邮件服务器。而邮件服务器的发送邮件是指把邮件从邮件服务器发送到接收方的邮件服务器。接收邮件指的是接收方的邮件服务器来接收发送方邮件服务器传过来的邮件。
  2. 向发件人报告邮件传送结果。即告诉发件人发出的邮件是已经交付了还是被拒绝了等。

邮件服务器采用客户和服务器的方式,每一个邮件服务器可以同时充当服务器或者是客户。

(3) 协议

协议主要包括两类,第一类协议主要以SMTP协议为主,这类协议用在把邮件发出去的情况。第二类协议主要以POP3或IMAP协议为主,这类协议用在接收邮件的情况。

了解了组成结构之后,就可以把这几个部分整合起来,形成一个电子邮件系统,接下来了解一下电子邮件系统的工作原理:

计算机网络(六)——应用层——电子邮件系统的工作原理.png

工作原理如上图,发送方通过用户代理,把写好的邮件发送给这个发送端的邮件服务器,那就会把这个邮件放到服务器当中的邮件缓存里,如果现在可以发送出去,就会从邮件缓存当中取出信件。并且发送给接收端的邮件服务器。这两个过程都是发送邮件使用的都是SMTP协议。

接下来,邮件到了接收端的邮件服务器当中,就放入这个服务器的缓存里面,如果这个接收方他现在有时间来阅读邮件,它就会通过用户代理,并且使用POP3协议从接收端邮件服务器当中读取邮件。

为了保证邮件是可靠传输的,上面三段使用的都是TCP连接。接下来重点了解一下,这几个电子邮件的传送协议。

5.3 简单邮件传送协议SMTP

计算机网络(六)——应用层——SMTP.png

SMTP协议规定了两个相互通信的SMTP进程之间如何交换信息。

SMTP协议规定了14条命令(由几个字母组成)和21种应答信息(由三位数字代码+简单文字说明组成)来实现进程之间交换信息的方式。

SMTP协议建立于TCP之上,使用端口号为25,使用C/S方式。

SMTP通过三个阶段实现通信:连接建立、邮件传送和连接释放。

接下来,逐一了解SMTP通信三阶段:

计算机网络(六)——应用层——SMTP通信三阶段.png

连接建立:发送方先写邮件,邮件写好就会发送给发送方的邮件服务器,放到发送方的邮件服务器的发送缓存里。发送方的邮件服务器每隔一定时间,就会对邮件缓存里的邮件进行一个扫描,如果发现有邮件,就要使用SMTP协议准备发送,并且使用熟知端口号25号与接收方的邮件服务器建立TCP连接。连接建立后,接收方的邮件服务器就要发出一个应答信息,也就是”220service ready”来告诉发送方服务就绪,已经可以准备接收了。然后SMTP客户(发送方)就会向SMTP服务(接收方)发送一个HELLO命令,并且会附上发送方的主机名,服务器现在如果有能力接收邮件,就会返回”250 OK”;如果没有能力接收邮件,就会返回”421 Service not available”。如果在一定时间内发不了邮件,邮件服务器就会把这个情况告诉给发件人。

邮件发送:假设用A和B分别表示发送方的邮件服务器和接收方的邮件服务器。首先,A发送一个”MAIL FROM:用户名”,意思是发送方的电子邮件地址,如果B准备好了就会返回”250 OK”,没有准备好也会返回数字加上英文的信息说明。A收到”250 OK”后就会发送多个RCPT命令,这个RCPT是收件人英文的缩写,RCPT可以有多个命令,因为RCPT表示发给谁,可以选择群发也可以选择发给一个人。每发送一个RCPT命令就会有一个相应的信息从B里返回。上图例子里给的是”RCPT RO: <邮箱名>”意思是把邮件发送给这个邮箱用户,SMTP服务端若有这个邮箱就会返回“250 OK”,若没有就会返回“550 No such user here”。接下来A发送DATA就表示要传输邮件,如上图,待B同意后,A就会开始发送邮件。在发送完毕后要返回<CRLF>.<CRLF>表示传输结束。

连接释放:邮件发完后,SMTP客户会发送OUT命令,SMTP服务收到后,会返回221,表示同意释放TCP连接。

5.4 MIME

计算机网络(六)——应用层——MIME.png

由于SMTP有上图所示的几个传输上的缺点,所以使用了通用因特网邮件扩充MIME。这个MIME可以理解成一个协议,或者说是在STMP协议上进行扩充的一种手段。工作原理也如上图所示,主要就是把不能被SMTP协议所识别的文件转换成能被SMTP识别的ASCLL码或者把SMTP协议使用的ASCLL转换成可供用户使用的文件。

5.5 POP3

POP3就是第三版的POP协议,POP3协议只存在于从接收端的邮件服务器当中读取邮件交付给用户代理这个过程。

POP3也是建立在TCP连接之上,使用端口号110,是C/S方式。

POP3的工作方式有两种,也就是接收方从服务器当中读取之后,对这个邮件的处理方式有两种:

  1. 下载并保留。用户读取下载完邮件后,邮件仍然保留在接收端缓存中。
  2. 下载并删除。用户读取下载完邮件后,邮件会从接收端缓存中删除。

5.6 IMAP

计算机网络(六)——应用层——IMAP.png

POP3协议是一种非常简单,功能有限的一种邮件读取协议,因此就有一种新的读取邮件的协议——网际报文存取协议(IMAP)。

IMAP协议内容如上图,由于IMAP协议是在读取邮件当中所使用的协议,所以它的环节也是从接收端邮件服务器到用户代理这一块所使用的一种协议。

5.7 基于万维网的电子邮件

计算机网络(六)——应用层——基于万维网的电子邮件.png

基于万维网的电子邮件是现在生活中普遍使用的一种发邮件的方式。

基于万维网的电子邮件就是使用浏览器来登录电子邮箱,然后再写一封电子邮件就可以发送出去。所以这种电子邮件特点就是非常方便。

注意一点,与前面不同的是,基于万维网的电子邮件与用户代理有关的两个协议SMTP和POP3全都变成了HTTP协议。

6. 万维网和HTTP协议

6.1 万维网的概述

计算机网络(六)——应用层——万维网的概述.png

把全球所有的网站统一在一起,就称之为万维网。所以万维网当中存储着非常多的信息、资料和资源。

如果想获取万维网当中的资源,就需要通过统一资源定位符URL来获取。举个例子,如果某个资源的URL是1号,就可以通过在万维网上搜索1号来访问该资源。

URL可以用来唯一标识资源

URL的一般形式(URL不区分大小写):<协议>://<主机>:<端口>/<路径> 其中协议常用的有http或ftp,主机就是域名或IP地址,端口就是提供访问接口的服务器端口,路径就是该资源在服务器文件里的相对路径,一般情况下端口和路径可以被省略掉。

用户通过点击超链接获取资源,这些资源通过超文本传输协议HTTP传送给使用者。这个过程就像服务器在为客户提供服务,所以万维网也是以C/S方式来工作。

6.2 超文本传输协议HTTP

计算机网络(六)——应用层——超文本传输协议HTTP.png

简单来说,HTTP协议就是规定如何上网以及服务器如何提供请求资源的一个过程。上图中是这个过程的图示。

服务器当中运行着服务器的一些进程,每一个万维网的网点都会有一个服务器的进程,这个进程会不断监听TCP的80端口,以便发现有没有万维网的客户来请求服务,一旦服务器监听到了连接请求并且和客户间建立好了一个TCP连接后,浏览器就可以开始向万维网服务器发出浏览界面的请求了,也就是开始发送一个http的请求报文来请求相关的文档。服务器收到请求报文以后,就会把请求的资源以文档的形式放入这个http响应报文当中,返回给客户端。最后就可以释放TCP连接,并在客户机界面上显示出来。

用户浏览页面有两种方法,一是输入URL,二是点击超链接。不过不论是点击超链接还是输入URL,访问的本质都是通过URL获取资源。获取资源的具体过程如上图右所示。但要补充一点,最后一步浏览器显示时,浏览器可以只下载文本部分,比如进入网易音乐的网站,进入以后可以看到很多歌曲,但是现在他们不能播放,只有点击播放按钮以后,才能播放,这个点击播放按钮的本质其实就是再次循环了上图的八个步骤。所以浏览器可以不必把界面当中的所有资源全部下载下来,可以只先下载文本部分,至于之后要下载图像、声音。音频等可以通过鼠标点击进行下载获取。

计算机网络(六)——应用层——HTTP协议特点.png

HTTP协议是无状态的,无状态指同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。也可以说HTTP协议是无记忆的。

但是在实际工作者,一些万维网站点常常希望能够识别用户,比如淘宝购物时,用户选中物品放入购物车,然后再选购其它物品时,淘宝就要记住用户身份,这样才可使用户接着选购的物品可以放入同一个购物车。为了应对这种需求,就诞生了cookie。

Cookie是存储在用户主机当中的一种文本文件,记录了一段时间内某用户的访问记录。而用户是通过识别码来标识,这个识别码通常是一连串的数字。因此用户访问的一些历史记录就可以存放在这样一个Cookie当中,这个Cookie就可以放入本地主机当中。所以在访问淘宝的时候,淘宝服务器就可以查看主机当中的记录淘宝搜索的一些历史记录的Cookie,就可以给用户提供一些更加个性化的更优质的服务。

HTTP采用TCP作为运输层协议,但HTTP协议本身是无连接的。因为通信双方在交换HTTP报文前是不需要建立HTTP连接的。

HTTP连接的方式有两种,分别是持久连接和非持久连接。在持久连接处还细分成了非流水线式的持久连接和流水线式的持久连接。

下面看一下具体的连接方式:

计算机网络(六)——应用层——HTTP协议连接方式.png

非持久连接:每个网页元素对象的传输都需要单独独立一个TCP连接。如上图左是非持久连接,首先客户要使用TCP和服务器建立连接,当三次握手的前两次完成之后,客户端就可以发送他的请求报文,作为三次握手的第三个部分的数据发给这个万维网的服务器。然后服务器收到请求后,就会返回给万维网的客户一个响应报文。另外,响应报文是有长度的,所以要经历一定时间才能收到完整的报文。所以非持久连接的耗时是2RTT+文档的传输时间。如果万维网客户要再发送一个HTTP请求,还需要再建立以个TCP连接。

持久连接:当万维网服务器在发送响应后仍然保持这条连接,使同一个客户和该服务器可以继续在这条TCP连接上传送后续的HTTP请求报文。如上图右是持久连接,它相对非持久做了一定的改善,当万维网客户要再发送一个HTTP请求时,不需要重新建立TCP连接,可以使用上一个连接继续发送。

当然持久连接还分成了非流水线式的持久连接和流水线式的持久连接,上面的例子可以看到是发了一个请求后才会返回给一个响应,等收到响应后,才能再发送一个新的请求,再收到响应,如果还想请求别的东西,只能在收到响应报文之后,才能请求,这就是非流水线式的持久连接。

而流水线式是可以连续发送的,比如主机有好久请求报文等待发送,那这就给报文就可以同时发送出去,服务器收到后会依次的返回响应的请求,因此使用流水线的方式,客户访问所有的对象,只需要花费大概一个RTT的时间,流水线方式就可以使TCP连接的空闲时间比较少,可以提高文档下载的一个效率。

下面看HTTP协议的报文结构:

计算机网络(六)——应用层——HTTP协议的报文结构.png

在HTTP协议当中会使用两种报文,一种是HTTP的请求报文,一种是HTTP的响应报文。

HTTP报文的特点是面向文本的,因此在报文中的每一个字段都是一些ASCLL码串。可以结合两个报文的形式理解。

可以看到请求报文由请求行、首部行和请求报文组成。响应报文由状态行、首部行和响应报文组成。

两个报文的第一行都叫开始行,但他们也有区别,开始行用来区分请求报文和响应报文。可以看到,请求报文开始行由方法、URL、版本和CRLF(回车换行)组成。而响应报文由版本、状态码、短语和CRLF(回车换行)组成。

在请求报文中,方法字段就是一些命令,用来告诉对所请求的对象进行哪些操作,比如获取、删除等。URL就是标识符。版本则是使用什么版本的HTTP协议。回车换行则是必备的,相当于表示请求行的结束,首部行的开始。

接下来就是首部行,请求报文和响应报文的首部行一样,都是用来说明浏览器、服务器和报文主体的一些信息。这个首部行可以有很多行,但也可以不用。在每一个首部行当中都有一个首部字段名和它的值,并在每一行结束都有一个回车换行。而且在整个首部行的结束也会有一个回车换行,用来表示首部行的结束,实体主体的开始。

实体主体在请求报文当中通常是不用的,而在响应报文当中,也有些响应报文不用。

下面看一下一个具体的请求报文的例子:

计算机网络(六)——应用层——HTTP协议请求报文的例子.png

上面是一个浏览器发出的请求报文。

第一行就是请求报文的请求行,用的是GET命令。后面的index.html就是URL,版本就是HTTP/1.1。

接下来的全是首部行的内容。Host:www.test.edu.cn指的就是现在要请求的html,它是存放于该网址上的。Connection:Close,指具体的连接方式是非持续连接。Cookie:123456,指的是用户的识别码是123456。如果出现Cookie,则说明这个用户曾经访问过这个网站。

对于响应报文来说,它的版本就是HTTP的版本,通常是HTTP/1.1。而状态码是由三个数字构成,一共有五种类型,如上图,但是具体来说一共只有33种状态码。状态码和短语的结合就说明了一个响应报文的特点。

这里补一个状态码与短语组合的例子:301 Moved Permanently。该段由状态码301和短语Moved Permanently组成,表示当前所请求网页已经转移到新的地址。所以在该段响应报文里的首部行处,就会添加一个转移地址告诉发送端要访问的网站原本地址已经转移到该新地址处,可以使用该新地址访问。

以上为第六章全部内容。