计算机网络 - 应用层

一. 网络应用模型

1. 客户/服务器模型

在客户/服务器(Client/Server,C/S)模型中,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求。其工作流程如下∶

1)服务器处于接收请求的状态。

2)客户机发出服务请求,并等待接收结果。

3)服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机。

客户程序必须知道服务器程序的地址,客户机上一般不需要特殊的硬件和复杂的操作系统。而服务器上运行的软件则是专门用来提供某种服务的程序,可同时处理多个远程或本地客户的要求。系统启动后即自动调用并一直不断地运行着,被动地等待并接收来自各地客户的请求。因此,服务器程序不需要知道客户程序的地址。

客户/服务器模型最主要的特征是∶客户是服务请求方,服务器是服务提供方。如 Web应用程序,其中总是打开的 Web服务器服务于运行在客户机上的浏览器的请求。当 Web 服务器接收到来自客户机对某对象的请求时,它向该客户机发送所请求的对象以做出响应。常见的使用客户/服务模型的应用包括 Web、文件传输协议(FTP)、远程登录和电子邮件等。

客户/服务器模型的主要特点还有∶

1)网络中各计算机的地位不平等,服务器可以通过对用户权限的限制来达到管理客户机的目的,使它们不能随意存储/删除数据,或进行其他受限的网络活动。整个网络的管理工作由少数服务器担当,因此网络的管理非常集中和方便。

2)客户机相互之间不直接通信。例如,在 Web 应用中两个浏览器并不直接通信。

3)可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数有限。

2. P2P模型(一种特殊的客户服务器方式)

在这里插入图片描述

不难看出,在C/S 模型中(见图6.1),服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。P2P 模型(见图 6.2)的思想是整个网络中的传输内容不再被保存在中心服务器上,每个结点都同时具有下载、上传的功能,其权利和义务都是大体对等的。

在P2P模型中,各计算机没有固定的客户和服务器划分。相反,任意一对计算机———称为对等方(Peer),直接相互通信。实际上,P2P模型从本质上来看仍然使用客户/服务器方式,每个结点既作为客户访问其他结点的资源,也作为服务器提供资源给其他结点访问。当前比较流行的P2P应用有 PPlive、Bittrrent 和电驴等。
与 C/S 模型相比,P2P 模型的优点主要体现如下∶

1)减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率(例如,播放流媒体时对服务器的压力过大,而通过 P2P 模型,可以利用大量的客户机来提供服务)。

2)多个客户机之间可以直接共享文档。

3)可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求。

4)网络健壮性强,单个结点的失效不会影响其他部分的结点。

P2P 模型也有缺点。在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度。例如,经常进行P2P下载还会对硬盘造成较大的损伤。据某互联网调研机构统计,当前 P2P 程序已占互联网 50% ~ 90%流量,使网络变得非常拥塞,因此各大ISP(互联网服务提供商,如电信、网通等)通常都对 P2P 应用持反对态度。

P2P网络是指在互联网中由对等结点组成的一种覆盖网络(Overlay Network),是一种动态的逻辑网络。

二. 域名系统(DNS - Domain Name System)

域名系统(Domain Name System,DNS)是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名(如 www.cskaoyan.com)转换为便于机器处理的IP地址。相对于IP地址,人们更喜欢使用具有特定含义的字符串来标识因特网上的计算机。值得注意的是,DNS系统采用客户/服务器模型,其协议运行在 UDP之上,使用 53号端口。

如果一台主机通过两块网卡连接到网络(如服务器双线接入),那么就具有两个IP地址,每个网卡对应一个MAC地址,显然这两个IP地址可以映射到同一个域名上。

此外,多台主机可以映射到同一域名上**(如负载均衡),一台主机也可以映射到多个域名上(如虚拟主机)**。

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

1. 层次域名空间(域名的结构)

因特网采用层次树状结构的命名方法。采用这种命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,即**域名(Domain Name)。

域(Domain)是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。每个域名都由标号序列组成,而各标号之间用点(".")隔开。

一个典型的例子如图 6.3 所示,它是王道论坛用于提供 WWW 服务的计算机(Web 服务器)的域名,它由三个标号组成,其中标号com 是顶级域名,标号cskaoyan是二级域名,标号 图 6.3 一个域名的例子wwW是三级[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
域名。在这里插入图片描述

​ 低 < -------------------------------------------------------------------------- 高

关于域名中的标号有以下几点需要注意∶

1)标号中的英文不区分大小写。
2)标号中除连字符(-)外不能使用其他的标点符号

3)每个标号不超过63个字符,多标号组成的完整域名最长不超过255个字符

4)级别最低的域名写在最左边,级别最高的顶级域名写在最右边

顶级域名(Top Level Domain,TLD)分为如下三大类∶
1)国家顶级域名(nTLD)。国家和某些地区的域名,如".cn"表示中国,".us"表示美国,".uk"表示英国。
2)通用顶级域名(gTLD)。常见的有".com"(公司)、".net"(网络服务机构)、".org"(非营利性组织)和".gov"(国家或政府部门)等。
3)基础结构域名。这种顶级域名只有一个,即 arpa,用于反向域名解析,因此又称反向域名。

在这里插入图片描述

国家顶级域名下注册的二级域名均由该国家自行确定。图6.4展示了域名空间的树状结构。

在域名系统中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再分成一定数目的子域,并将这些子域委托给其他组织去管理。例如,管理 CN 域的中国将EDU.CN子域授权给中国教育和科研计算机网(CERNET)来管理。

2. 域名服务器

因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模型。域名到IP 地址的解析是由运行在域名服务器上的程序完成的,一个服务器所负责管辖的(或有权限的)范围称为区(不以域为单位),各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有结点必须是能够连通的,每个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP 地址的映射。每个域名服务器不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息。当自己不能进行域名到IP地址的转换时,能够知道到什么地方去找其他域名服务器。

DNS 使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反,该映射分布在所有的 DNS 上。采用分布式设计的 DNS,是一个在因特网上实现分布式数据库的精彩范例。主要有 4 种类型的域名服务器。

1.根域名服务器

根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP 地址。根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器

因特网上有 13个根域名服务器,尽管我们将这 13 个根域名服务器中的每个都视为单个服务器,但每个"服务器"实际上是冗余服务器的集群,以提供安全性和可靠性。

需要注意的是,根域名服务器用来管辖顶级域(如.com),通常它并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询。

2.顶级域名服务器

这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。收到DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)。

3.授权域名服务器(权限域名服务器)

这就是前面已经讲过的负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。

每台主机都必须在授权域名服务器处登记。为了更加可靠地工作,一台主机最好至少有两个授权域名服务器。实际上,许多域名服务器都同时充当本地域名服务器和授权域名服务器。授权域名服务器总能将其管辖的主机名转换为该主机的 IP 地址。

4.本地域名服务器

本地域名服务器对域名系统非常重要。每个因特网服务提供者(ISP),或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。当一台主机发出 DNS 查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。事实上,我们在 Windows系统中配置"本地连接"时,就需要填写 DNS地址,这个地址就是本地 DNS(域名服务器)的地址。

在这里插入图片描述

DNS 的层次结构如图6.5 所示。

3. 域名解析过程

域名解析是指把域名映射成为IP地址或把 IP地址映射成域名的过程。前者称为正向解析,后者称为反向解析。当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS 请求报文,以 UDP 数据报方式发往本地域名服务器。

域名解析有两种方式∶ 递归查询和递归与迭代相结合的查询。

在这里插入图片描述

递归查询的过程如图 6.6(a)所示,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是递归地在其他几个域名服务器之间进行的【步骤③~⑥】。在步骤⑦中,本地域名服务器从根域名服务器得到了所需的IP 地址,最后在步骤⑧中,本地域名服务器把查询结果告诉发起查询的主机。由于该方法给根域名服务造成的负载过大,所以在实际中几乎不使用。

常用递归与迭代相结合的查询方式如图6.6(b)所示,该方式分为两个部分。

(1)主机向本地域名服务器的查询采用的是递归查询
也就是说,如果本地主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替该主机继续查),而不是让该主机自己进行下一步的查询。两种查询方式的这一步是相同的。

2)本地域名服务器向根域名服务器的查询采用迭代查询
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP地址,要么告诉本地域名服务器∶"你下一步应当向哪个顶级域名服务器进行查询"。然后让本地域名服务器向这个顶级域名服务器进行后续的查询,如图 6.6(b)所示。同样,顶级域名服务器收到查询报文后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应向哪个权限域名服务器查询。最后,知道所要解析的域名的IP地址后,把这个结果返回给发起查询的主机。

下面举例说明域名解析的过程。假定某客户机想获知域名为y.abc.com主机的IP地址,域名解析的过程(共使用了8个 UDP报文)如下∶

① 客户机向其本地域名服务器发出 DNS 请求报文(递归查询)。
② 本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS客户的身份向根域名服务器发出解析请求报文(迭代查询)。
③ 根域名服务器收到请求后,判断该域名属于.com 域,将对应的顶级域名服务器 dns.com的 IP 地址返回给本地域名服务器。
④ 本地域名服务器向顶级域名服务器 dns.com 发出解析请求报文(迭代查询)。
⑤ 顶级域名服务器dns.com 收到请求后,判断该域名属于abc.com域,因此将对应的授权域名服务器 dns.abc.com 的 IP 地址返回给本地域名服务器。
⑥ 本地域名服务器向授权域名服务器 dns.abc.com发起解析请求报文(迭代查询)。
⑦ 授权域名服务器 dns.abc.com 收到请求后,将查询结果返回给本地域名服务器。
⑧ 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。

为了提高 DNS 的查询效率,并减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存(存储在本机的DNS高速缓存当中)。当一个 DNS 服务器接收到DNS 查询结果时,它能将该 DNS 信息缓存在高速缓存中。这样,当另一个相同的域名查询到达该 DNS 服务器时,该服务器就能够直接提供所要求的IP地址,而不需要再去向其他 DNS 服务器询问。因为主机名和IP地址之间的映射不是永久的,所以 DNS 服务器将在一段时间后丢弃高速缓存中的信息。

I 一台具有单个DNS 名称的机器可以有多个IP地址吗?为什么?

可以,IP地址由网络号和主机号两部分构成。如果一台机器有两个以太网卡,那么它可以同时连到两个不同的网络上(网络号不能相同,否则会发生冲突);如果是这样的话,那么它需要两个IP 地址。

I 一台计算机可以有两个属于不同顶级域的DNS 名字吗?如果可以,试举例说明。

可以,例如 www.cskaoyan.com和www.skaoyan.cn属于不同的顶级域(.com和.cn),但它们可以有同样的IP地址。用户输入这两个不同的DNS 名字,访问的都是同一台服务器。

I DNS 使用 UDP而非TCP,如果一个DNS **分组丢失,没有自动恢复,那么这会引起问题吗?**如果会,应该如何解决?

DNS使用传输层的 UDP而非 TCP,因为它不需要使用TCP在发生传输错误时执行的自动重传功能。实际上,对于DNS 服务器的访问,多次DNS 请求都返回相同的结果,即做多次和做一次的效果一样。因此DNS 操作可以重复执行。当一个进程做一次DNS请求时,它启动一个定时器。如果定时器计满而未收到回复,那么它就再请求一次,这样做不会有害处。

三. 文件传输协议(FTP – Fie TransferProtocol)

1. FTP 的工作原理

文件传输协议(Fie TransferProtocol,FTP)是因特网上使用得最广泛的文件传输协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。它屏蔽了各计算机系统的细节,因而适合于在异构网络中的任意计算机之间传送文件。

FTP提供以下功能∶

提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力
② 以用户权限管理的方式提供用户对远程 FTP服务器上的文件管理能力。
③以匿名 FTP 的方式提供公用文件共享的能力。

FTP采用客户/服务器的工作方式,它使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户进程提供服务。

FTP的服务器进程由两大部分组成∶一个主进程,负责接收新的请求;另外有若干从属进程,负责处理单个请求。

其工作步骤如下∶

① 打开熟知端口 21(控制端口),使客户进程能够连接上。

② 等待客户进程发连接请求。

③ 启动从属进程来处理客户进程发来的请求。主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后即终止。

④ 回到等待状态,继续接收其他客户进程的请求。

FTP服务器必须在整个会话期间保留用户的状态信息。特别是服务器必须把指定的用户账户与控制连接联系起来,服务器必须追踪用户在远程目录树上的当前位置。

2. 控制连接与数据连接

FTP在工作时使用两个并行的TCP连接(见图6.7)∶

一个是控制连接(端口号21),一个是数据连接(端口号 20)。使用两个不同的端口号可使协议更加简单和更容易实现。

I 之所以这样设计,是因为使用两条独立的连接可使FTP变得更加简单、更容易实现、更有效率。同时在文件传输过程中,还可以利用控制连接控制传输过程,如客户可以请求终止、暂停传输等。
在这里插入图片描述

1,控制连接 (传请求)

服务器监听 21 号端口,等待客户连接,建立在这个端口上的连接称为控制连接,控制连接用来传输控制信息(如连接请求、传送请求等),并且控制信息都以7位 ASCI 格式传送。FTP客户发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。在传输文件时还可以使用控制连接(如客户在传输中途发一个中止传输的命令),因此控制连接在整个会话期间一直保持打开状态。
2,数据连接 (传文件)

服务器端的控制进程在接收到FTP客户发来的文件传输请求后,就创建"数据传送进程"和"数据连接"。数据连接用来连接客户端和服务器端的数据传送进程,数据传送进程实际完成文件的传送,在传送完毕后关闭"数据传送连接"并结束运行。

数据连接有两种传输模式∶主动模式 PORT 和被动模式 PASV。

(主动)PORT 模式的工作原理∶ 客户端连接到服务器的 21 端口,登录成功后要读取数据时,客户端随机开放一个端口,并发送命令告知服务器,服务器收到 PORT 命令和端口号后,通过 20 端口和客户端开放的端口连接,发
送数据。

(被动)PASV模式的不同点是:客户端要读取数据时,发送 PASV 命令到服务器,服务器在本地随机开放一个端口(一般大于1024,不是确定的),并告知客户端,**客户端再连接到服务器开放的端口进行数据传输。可见,是用 PORT模式还是PASV模式,选择权在客户端。

简单概括为,主动模式传送数据是"服务器"连接到"客户端"的端口;被动模式传送数据是"客户端"连接到"服务器"的端口。

因为 FTP 使用了一个分离的控制连接,所以也称 FTP 的控制信息是带外(Out-of-band)传送的。使用 FTP时,若要修改服务器上的文件,则需要先将此文件传送到本地主机,然后再将修改后的文件副本传送到原服务器,来回传送耗费很多时间。

网络文件系统(NFS)采用另一种思路,它允许进程打开一个远程文件,并能在该文件的某个特定位置开始读写数据。这样,NFS可使用户复制一个大文件中的一个很小的片段,而不需要复制整个大文件。

3. FTP传输模式

文本模式:ASCII模式,以文本序列传输数据。

二进制模式:Binary模式,以二进制序列传输数据。

四. 电子邮件

1. 电子邮件系统的组成结构

在这里插入图片描述

自从有了因特网,电子邮件就在因特网上流行起来。电子邮件是一种异步通信方式,通信时不需要双方同时在场。电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可以随时上网到自己使用的邮件服务器进行读取。一个电子邮件系统应具有图6.8所示的三个最主要的组成构件,即用户代理(UserAgent)、邮件服务器和电子邮件使用的协议,如 SMTP、POP3(或 IMAP)等。

用户代理(UA用户与电子邮件系统的接口。用户代理向用户提供一个很友好的接口来发送和接收邮件,用户代理至少应当具有撰写、显示和邮件处理的功能。通常情况下,用户代理就是一个运行在PC上的程序(电子邮件客户端软件),常见的有Outook和Foxmail等。

邮件服务器∶它的功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等)。邮件服务器采用客户/服务器方式工作,但它必须能够同时充当客户和服务器。

例如,当邮件服务器A向邮件服务器B发送邮件时,A就作为 SMTP客户,而B是SMTP服务器;反之,当B向A发送邮件时,B就是SMTP客户,而A 就是SMTP服务器。

邮件发送协议和读取协议邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,如SMTP;邮件读取协议用于用户代理从邮件服务器读取邮件,如POP3

在这里插入图片描述

注意,SMTP用的是"推"(Push)的通信方式,即用户代理向邮件服务器发送邮件及在邮件服务器之间发送邮件时,SMTP客户将邮件"推"送到SMTP服务器。而POP3用的是"拉"(Pul)的通方式,即用户读取邮件时,用户代理向邮件服务器发出请求,"拉"取用户邮箱中的邮件。电子邮件的发送、接收过程可简化为如图6.9 所示。

下面简单介绍电子邮件的收发过程。
① 发信人调用用户代理来撰写和编辑要发送的邮件。用户代理用 SMTP把邮件传送给发送端邮件服务器。
② 发送端邮件服务器将邮件放入邮件缓存队列中,等待发送。
③ 运行在发送端邮件服务器的 SMTP 客户进程,发现邮件缓存中有待发送的邮件,就向运行在接收端邮件服务器的 SMTP 服务器进程发起建立 TCP 连接。

④ TCP 连接建立后,SMTP客户进程开始向远程 SMTP服务器进程发送邮件。当所有待发送邮件发完后,SMTP 就关闭所建立的 TCP 连接。
⑤ 运行在接收端邮件服务器中的 SMTP 服务器进程收到邮件后,将邮件放入收信人的用户邮箱,等待收信人在方便时进行读取。
⑥ 收信人打算收信时,调用用户代理,使用POP3(或IMAP)协议将自己的邮件从接收端邮件服务器的用户邮箱中取回(如果邮箱中有来信的话)。

2. 电子邮件格式与 MIME

1.电子邮件格式

一个电子邮件分为信封和内容两大部分,邮件内容又分为首部和主体两部分。RFC 822 规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。用户写好首部后,邮件系统自动地将信封所需的信息提取出来并写在信封上,用户不需要亲自填写信封上的信息。

邮件内容的首部包含一些首部行,每个首部行由一个关键字后跟冒号再后跟值组成。有些关键字是必需的,有些则是可选的。最重要的关键字是To和 Subject

To是必需的关键字**,后面填入一个或多个收件人的电子邮件地址。电子邮件地址的规定格式为∶收件人邮箱名@邮箱所在主机的域名,如abc@cskaoyan.com,其中收信人邮箱名即用户名,abc在cskaoyan.com这个邮件服务器上必须是唯一的。这也就保证了abc@cskaoyan.com这个邮件地址在整个因特网上是唯一的。

Subject 是可选关键字,是邮件的主题,反映了邮件的主要内容。

在这里插入图片描述

当然,还有一个必填的关键字是 From,但它通常由邮件系统自动填入。首部与主体之间用一个空行进行分割。典型的邮件内容如下∶

2.多用途网际邮件扩充(MIME)

由于SMTP只能传送一定长度的ASCII码,许多其他非英语国家的文字(如中文、俄文,甚至带重音符号的法文或德文)就无法传送,且无法传送可执行文件及其他二进制对象,因此提出了多用途网络邮件扩充(Multipurpose Internet Mail Extensions,MIME)。

MIME并未改动SMTP或取代它。MIME的意图是继续使用目前的格式,但增加了邮件主体的结构,并定义了传送非ASCII码的编码规则。也就是说,MIME 邮件可在现有的电子邮件程序和协议下传送。MIME 与 SMTP 的关系如图6.10 所示。

MIME 主要包括以下三部分内容∶
①5个新的邮件首部字段,包括 MIME版本、内容描述、内容标识、传送编码和内容类型。
② 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。

② [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。

3. 邮件发送协议SMTP 和 邮件读取POP3

1.SMTP — Simple Mail Transfer Protocol 和MIME(发送邮件协议)

简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一种提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的SMTP进程交换信息。由于 SMTP 使用客户/服务器方式,因此负责发送邮件的SMTP进程就是 SMTP客户,而负责接收邮件的 SMTP进程就是SMTP服务器。SMTP用的是 TCP 连接,端口号为 25。SMTP 通信有以下三个阶段。
(1)连接建立

发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP客户就每隔一定时间对邮件缓存扫描一次。如发现有邮件,就使用 SMTP的熟知端口号(25)与接收方邮件服务器的 SMTP服务器建立TCP连接。连接建立后,接收方SMTP服务器发出220 Service ready(服务就绪)。然后 SMTP 客户向 SMTP 服务器发送HELO命令,附上发送方的主机名。

SMTP不使用中间的邮件服务器。TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管它们相隔多远,不管在传送过程中要经过多少个路由器。当接收方邮件服务器因故障暂时不能建立连接时,发送方的邮件服务器只能等待一段时间后再次尝试连接。
(2)邮件传送

连接建立后,就可开始传送邮件。邮件的传送从 MAIL 命令开始,MAIL 命令后面有发件人的地址。如 MAIL FROM∶hoopdog@hust.edu.cn。若 SMTP服务器已准备好接收邮件,则回答250 OK。接着 SMTP客户端发送一个或多个RCPT(收件人recipient** 的缩写)命令,格式为RCPT TO∶<收件人地址>。每发送一个RCPT命令,都应有相应的信息从SMTP服务器返回,如250 OK或 550 No such user here(无此用户)。

RCPT 命令的作用是,先弄清接收方系统是否已做好接收邮件的准备,然后才发送邮件,以便不至于发送了很长的邮件后才知道地址错误,进而避免浪费通信资源。

获得 OK 的回答后,客户端就使用DATA命令,表示要开始传输邮件的内容。正常情况下MTP 服务器回复的信息是354 Start mail input; end with .。表示回车换行。此时 SMTP客户端就可开始传送邮件内容,并用.表示邮件内容的结束。

(3)连接释放

邮件发送完毕后,SMTP 客户应发送 QUIT 命令。SMTP 服务器返回的信息是 221(服务关闭),表示 SMTP 同意释放TCP 连接。邮件传送的全部过程就此结束。

2. POP3 ---- Post Ofice Protocol和IMAP (读取邮件协议)

邮局协议(Post Ofice Protocol,POP)是一个非常简单但功能有限的邮件读取协议,现在使用的是它的第3个版本POP3。POP3采用的是"拉"(Pull)的通信方式,当用户读取邮件时,用户代理向邮件服务器发出请求,"拉"取用户邮箱中的邮件。

POP也使用客户/服务器的工作方式,在传输层使用TCP,端口号为110接收方的用户代理上必须运行 POP客户程序,而接收方的邮件服务器上则运行POP服务器程序。POP有两种工作方式∶"下载并保留"和"下载并删除"。在"下载并保留"方式下,用户从邮件服务器上读取邮件后,邮件依然会保存在邮件服务器上,用户可再次从服务器上读取该邮件;而使用"下载并删除"方式时,邮件一旦被读取,就被从邮件服务器上删除,用户不能再次从服务器上读取。POP3协议在传输层是使用明文来传输密码的。)

另一个邮件读取协议是因特网报文存取协议(IMAP),它比 POP复杂得多,IMAP为用户提供了创建文件夹、在不同文件夹之间移动邮件及在远程文件夹中查询邮件等联机命令,为此 IMAP服务器维护了会话用户的状态信息。IMAP 的另一特性是允许用户代理只获取报文的某些部分,例如可以只读取一个报文的首部,或多部分MME 报文的一部分。这非常适用于低带宽的情况,用户可能并不想取回邮箱中的所有邮件,尤其是包含很多音频或视频的大邮件。

在这里插入图片描述

此外,随着万维网的流行,目前出现了很多基于万维网的电子邮件,如Hotmail、Gmail等。这种电子邮件的特点是,用户浏览器与 Hotmail 或 Gmail的邮件服务器之间的邮件发送或接收使用的是HTTP,而仅在不同邮件服务器之间传送邮件时才使用 SMTP。

五. 万维网 (WWW)

1. WWW 的概念与组成结构

万维网(World Wide Web,WWW)并非是一种特殊的计算机网络,而是一个大规模的、分布式的、联机式的信息存储空间,在这个空间中∶一样有用的事物称为一样资源",并由一个全域"统一资源定位符"(URL)标识。这些资源通超文本传输协议(HTTP)传送给使用者,而后者通过单击链接来获取资源。

万维网使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(即"链接到另一个站点"),从而主动地按需获取丰富的信息。超文本标记语言(HyperText Markup Language,HTML)使得万维网页面的设计者可以很方便地用一个超链接从本页面的某处链接到因特网上的任何一个万维网页面,并能够在自己的计算机屏幕上显示这些页面。万维网的内核部分是由三个标准构成的∶

1)统一资源定位符(URL)。负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内具有唯一的标识符 URL。

2)超文本传输协议(HTTP**)。一个应用层协议,它使用 TCP 连接进行可靠的传输,HTTP是万维网客户程序和服务器程序之间交互所必须严格遵守的协议。

3)超文本标记语言(HTML**)。一种文档结构的标记语言,它使用一些约定的标记对页面上的各种信息(包括文字、声音、图像、视频等)、格式进行描述。URL 是对可以从因特网上得到的资源的位置和访问方法的一种简洁表示。URL 相当于一个文件名在网络范围的扩展。URL 的一般形式是∶

<协议>∶//<主机>∶<端口>/<路径>。
<协议>:指用什么协议来获取万维网文档,常见的协议有 http、ftp 等;

<主机>:是存放资源的主机在因特网中的域名或IP地址;

**<端口>和<路径>**有时可省略。在 URL中不区分大小写。

万维网以客户/服务器方式工作。浏览器是在用户主机上的万维网客户程序,而万维网文档所驻留的主机则运行服务器程序,这台主机称为万维网服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。工作流程如下∶

1)Web 用户使用浏览器(指定 URL)与Web 服务器建立连接,并发送浏览请求。

2)Web 服务器把 URL 转换为文件路径,并返回信息给 Web浏览器。

3)通信完成,关闭连接。

万维网是无数个网络站点和网页的集合,它们在一起构成了因特网最主要的部分(因特网也包括电子邮件、Usenet 和新闻组)。

2. 超文本传输协议(HTTP)

HTTP 定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的(Transaction-oriented)应用层协议,它规定了在浏览器和服务器之间的请求和响应的格式与规则,是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

1.HTTP的操作过程

从协议执行过程来说,浏览器要访问WWW服务器时,首先要完成对WWW服务器的域名解析。一旦获得了服务器的IP地址,浏览器就通过 TCP 向服务器发送连接建立请求。
在这里插入图片描述

万维网的大致工作过程如图6.11 所示。每个万维网站点都有一个服务器进程,它不断地监听TCP的端口80(默认),当监听到连接请求后便与浏览器建立 TCP连接。然后,浏览器就向服务器发送请求获取某个Web 页面的HTTP请求。服务器收到请求后,将构建所请求 Web 页的必需信息,并通过HTTP 响应返回给浏览器。浏览器再将信息进行解释,然后将 Web 页显示给用户。最后,TCP 连接释放。

在浏览器和服务器之间的请求与响应的交互,必须遵循规定的格式和规则,这些格式和规则就是HTTP。因此HTTP有两类报文∶请求报文(从Web客户端向 Web服务器发送服务请求)和响应报文(从Web服务器对 Web客户端请求的回答)。

用户单击鼠标后所发生的事件按顺序如下(以访问清华大学的网站为例)∶

1)浏览器分析链接指向页面的 URL(tp//www.tsinghua.edu.cn /chn/index.html)。
2)浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
3)域名系统 DNS 解析出清华大学服务器的IP 地址
4)浏览器与该服务器建立 TCP 连接(默认端口号为 80)。
5)浏览器发出HTTP 请求GET/chn/index.html。
6)服务器通过 HTTP

响应把文件 index.html 发送给浏览器
7)释放 TCP 连接。
8)浏览器解释文件 index.html,并将 Web 页显示给用户。

2.HTTP 的特点

HTTP使用 TCP作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP本身是无连接的(务必注意)。也就是说,虽然HTTP使用了 TCP 连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接

HTTP是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。

HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP 请求。在实际应用中,通常使用 Cookie 加数据库的方式来跟踪用户的活动(如记录用户最近浏览的商品等)。

Cookie 的工作原理∶当用户浏览某个使用 Cookie的网站时,该网站服务器就为用户产生一个唯一的识别码,如"123456",接着在给用户的响应报文中添加一个Set-cookie 的首部行"Setcookie∶123456"。用户收到响应后,就在它管理的特定 Cookie文件中添加这个服务器的主机名和 Cookie 识别码,当用户继续浏览这个网站时,会取出这个网站的识别码,并放入请求报文的Cookie 首部行"Cookie∶123456",服务器根据请求报文中的Cookie 识别码就能从数据库中查询到该用户的活动记录,进而执行一些个性化的工作,如根据用户的历史浏览记录向其推荐新产品等。

HTTP 既可以使用非持久连接,也可以使用持久连接(HTTP/1.1 支持)。对于非持久连接,每个网页元素对象(如JPEG图形、Flash等)的传输都需要单独建立一个TCP 连接,如图 6.12 所示(第三次握手的报文段中捎带了客户对万维网文档的请求)。也就是说,请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间RTT(一个RTT用于TCP连接,另一个RTT用于请求和接收文档)。每个对象引用都导致2×xRTT的开销,此外每次建立新的 TCP 连接都要分配缓存和变量,使万维网服务器的负担很重。

所谓持久连接,是指万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP 请求和响应报文,如图6.13 所示。
在这里插入图片描述

**持久连接又分为非流水线和流水线两种方式。**对于非流水线方式,客户在收到前一个响应后才能发出下一个请求,服务器发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。HTTP/1.1 的默认方式是使用流水线的持久连接,这种情况下,客户每遇到一个对象引用就立即发出一个请求,因而客户可以逐个地连续发出对各个引用对象的请求。如果所有的请求和响应都是连续发送的,那么所有引用的对象共计经历 1个 RTT 延迟,而不是像非流水线方式那样每个引用都必须有1个RTT 延迟。这种方式减少了TCP连接中的空闲时间,提高了效率。

3.HTTP 的报文结构

HTTP是面向文本的(Text-Oriented,因此报文中的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。有两类 HTTP 报文∶

● 请求报文∶ 从客户向服务器发送的请求报文,如图6.14(a)所示。

● 响应报文∶ 从服务器到客户的回答,如图 6.14(b)所示

HTTP请求报文和响应报文都由三个部分组成。从图6.14可以看出,这两种报文格式的区别就是开始行不同。

在这里插入图片描述

开始行用于区分是请求报文还是响应报文。在请求报文中的开始行称为请求行,而在响应报文中的开始行称为状态行。开始行的三个字段之间都以空格分隔,最后的"CR""LF"代表*"回车""换行""。请求报文的"请求行"有三个内容∶方法、请求资源的URL及**HTTP的版本。其中,"方法"是对所请求对象进行的操作,这些方法实际上也就是一些命令。表 6.1 给出了HTTP请求报文中常用的几个方法。

首部行****∶ 用来说明浏览器、服务器或报文主体的一些信息。首部可以有几行,但也可以不使用。在每个首部行中都有首部字段名和它的值,每一行在结束的地方都要有"回车"和"换行"。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
在这里插入图片描述

实体主体在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段。

图 6.15 所示为使用Wireshark捕获的HTTP请求报文的示例,下面结合前几章的内容对请求报文(图中下部分)进行分析。

根据帧的结构定义,在图6.15 所示的以太网数据帧中,第 1~6个字节为目的MAC地址(默认网关地址),即 00-0f-e2-3f-27-3f;第7~12个字节为本机 MAC地址,即00-27-13-67-73-8d;第 13~14个字节08~00为类型字段,表示上层使用的是IP数据报协议。第15~34个字节(共20B)为IP数据报的首部,其中第27~30个字节为源IP地址,即db-df-d2-70,转换成十进制为219.223.210.112;第31~34个字节为目的P地址,即71-69-4e-0a,转换成十进制为113.105.78.10。第 35~54个字节(共 20B)为 TCP 报文段的首部。从第 55 个字节开始才是TCP 数据部分(阴影部分),即从应用层传递下来的数据(本例中即请求报文),GET对应请求行的方法,/face/20.gif对应请求行的URL,HTTP/1.1 对应请求行的版本,左边数字是对应字符的 ASCII码,如’G’=0x47、‘E’=0x45、T’=0x54等。图 6.15的请求报文中首部行字段内容的含义,建议读者自行了解,也可以自己动手抓包分析。

在这里插入图片描述

下角开始的"⋯??! gs⋯E.?.@…0⋯pgi"等是上面介绍过的第1~54个字节中对应的 ASCI码字符,而这些字符在这里不代表任何意义。

在这里插入图片描述

常见应用层协议小结如表6.2 所示。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值