Skip to content

网络应用模型

客户/服务器模型

在客户/服务器 C/S 模型中,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求

其工作流程如下:

  1. 服务器处于接收请求的状态
  2. 客户机发出服务请求,并等待接收结果
  3. 服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机

客户/服务器模型最主要的特征是:客户是服务请求方,服务器是服务提供方

  • 客户程序必须知道服务器程序的地址,客户机上一般不需要特殊的硬件和复杂的操作系统
  • 服务器上运行提供某种服务的程序,可同时处理多个远程或本地客户的要求,服务器程序不需要知道客户程序的地址

常见的 C/S 模型的应用包括 Web、文件传输协议、远程登录和电子邮件等

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

  1. 网络中各计算机的地位不平等,服务器管理用户权限,使客户机不能随意存储/删除数据,或进行其他受限的网络活动

    整个网络的管理工作由少数服务器担当,因此网络的管理非常集中和方便

  2. 客户机相互之间不直接通信

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

image-20211220202944500

P2P 模型

P2P 模型的思想是整个网络中的传输内容不再被保存在中心服务器上,每个结点的权利和义务都是大体对等的

image-20211220203019030

在 P2P 模型中,各计算机没有固定的客户和服务器划分,任意一对计算机——称为对等方,直接相互通信

P2P 模型从本质上来看仍然使用 C/S 方式,每个结点既作为客户访问资源,又作为服务器提供资源

常见的 P2P 模型的应用包括 PPliveBittorrent 和电驴等

与 C/S 模型相比,P2P 模型的优点主要体现如下:

  1. 消除了对某个服务器的完全依赖,将任务分配到各个结点上,因此大大提高了系统效率和资源利用率
  2. 多个客户机之间可以直接共享文档
  3. 可扩展性好,不限制客户机数量
  4. 网络健壮性强,单个结点的失效不会影响其他部分的结点

P2P 模型也有缺点:

  • 在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存影响整机速度
  • 经常进行 P2P 下载还会对硬盘造成较大的损伤
  • 据统计 P2P 程序已占互联网 50%~90% 的流量,使网络变得非常拥塞,因此各大 ISP 通常都对P2P应用持反对态度

域名系统

域名系统 Domain Name System,DNS 是因特网使用的命名系统,用来把域名转换为 IP 地址

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

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

层次域名空间

因特网采用层次树状结构的命名方法:任何一个连接到因特网的主机或路由器,都可以有一个唯一的层次结构名称,即域名

域是名字空间中一个可被管理的划分,域可以划分为子域,子域也可以划分,这样就形成了顶级域、二级域、三级域等

如下图域名,由三个标号组成,其中标号 com 是顶级域名,标号 cskaoyan 是二级域名,标号 www 是三级域名

image-20211221131051147

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

  1. 标号中的英文不区分大小写
  2. 标号中除连字符 - 外不能使用其他的标点符号
  3. 每个标号不超过 63 个字符,多标号组成的完整域名最长不超过 255 个字符
  4. 级别最低的域名写在最左边,级别最高的顶级域名写在最右边

顶级域名 Top Level Domain,TLD 分为如下三大类:

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

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

image-20211221131203055

域名系统中,每个域由不同的组织进行管理,每个组织将域再分成一定数目的子域并委托给其他组织去管理

如管理 CN 域的中国将 EDU.CN 子域授权给中国教育和科研计算机网来管理

域名服务器

因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模型

  • 域名到 IP 地址的解析是由运行在域名服务器上的程序完成的,一个服务器所负责管辖的范围称为区
  • 每个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射

注意:IP 到域名不是一一对应的关系,一个 IP 可以有多个域名

每个域名服务器不但能够进行一些域名到 IP 地址的解析,而且还必须具有连向其他域名服务器的信息

当自己不能进行域名到 IP 地址的转换时,能够知道到什么地方去找其他域名服务器

DNS 使用了大量的域名服务器,它们以层次方式组织,因特网上所有主机的映射分布在所有的 DNS 上

主要有 4 种类型的域名服务器:

image-20211221131319745

根域名服务器

根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的 IP 地址

本地域名服务器对因特网上的域名无法解析时,就首先要求助于根域名服务器,它是最重要的域名服务器

因特网上有 13 个根域名服务器,每个服务器都是冗余服务器的集群,以提供安全性和可靠性

注意:根域名服务器用来管辖顶级域(如 .com),通常它只返回相应的顶级域名服务器的 IP,而不返回代查询域名的 IP

顶级域名服务器

这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名

收到 DNS 查询请求时,就给出相应的回答,可能是代查询域名的 IP,也可能是相应的授权域名服务器的 IP

授权域名服务器

每台有域名的主机都要在授权域名服务器处登记,为了更加可靠地工作,一台主机最好至少有两个授权域名服务器

实际上,许多域名服务器都同时充当本地域名服务器和授权域名服务器(权限域名服务器)

授权域名服务器总能将其管辖的主机名转换为该主机的 IP 地址

本地域名服务器

本地 DNS 对域名系统非常重要,每个因特网服务提供者,或一所大学甚至里面的一个系,都可以有一个本地 DNS

当一台主机发出 DNS 查询请求时,这个查询请求报文就发送给该主机的本地域名服务器

我们在 Windows 系统中配置本地连接时,就需要填写 DNS 地址,这个地址就是本地 DNS 的地址

域名解析过程

域名解析:把域名映射成为 IP 地址或把 IP 地址映射成域名的过程,前者称为正向解析,后者称为反向解析

客户端需要域名解析时,用本机的 DNS 客户端构造一个 DNS 请求报文,以 UDP 数据报方式发往本地域名服务器

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

image-20211221131435930

递归查询:本地域名服务器只需向根域名服务器查询一次,后面要做的事交给根 DNS,根 DNS 又交给其它 DNS,由于该方法给根域名服务造成的负载过大,所以在实际中几乎不使用

递归与迭代相结合的查询方式:该方式分为两个部分:

  1. 主机向本地域名服务器的查询采用的是递归查询

    主机向本地 DNS 发送请求后,所有的事都交由本地 DNS 处理,由它向根 DNS 发送请求,而不是由自己发送

  2. 本地域名服务器向根域名服务器的查询采用迭代查询

    假定某客户机想获知域名为 y.abc.com 主机的 IP 地址,域名解析的过程如下:

    1. 客户机向其本地域名服务器发出 DNS 请求报文
    2. 本地域名服务器收到请求后,查询本地缓存,若没有该记录,则向根域名服务器发出解析请求报文
    3. 根域名服务器收到请求后,判断该域名属于.com 域,返回对应的顶级域名服务器 dns.com 的 IP 地址
    4. 本地域名服务器向顶级域名服务器 dns.com 发出解析请求报文
    5. 顶级域名服务器收到请求后,判断该域名属于 abc.com 域,返回对应的授权域名服务器 dns.abc.com 的 IP 地址
    6. 本地域名服务器向授权域名服务器 dns.abc.com 发起解析请求报文
    7. 授权域名服务器 dns.abc.com 收到请求后,将查询结果返回给本地域名服务器
    8. 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机

    注意:如果是 z.y.abc.com 的话授权域名服务器 dns.abc.com 会返回授权域名服务器 dns.y.abc.com 的 IP,要多迭代一次

为了提高 DNS 的查询效率,并减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存(主机也有)

因为主机名和 IP 地址之间的映射不是永久的,所以 DNS 服务器将在一段时间后丢弃高速缓存中的信息

文件传输协议

FTP 的工作原理

文件传输协议 File Transfer Protocol,FTP 是因特网上使用得最广泛的文件传输协议

FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限

屏蔽了各计算机系统的细节,因而适合于在异构网络中的任意计算机之间传送文件

FTP 提供以下功能:

  1. 提供不同种类主机系统之间的文件传输能力
  2. 以用户权限管理的方式提供用户对远程 FTP 服务器上的文件管理能力
  3. 以匿名 FTP 的方式提供公用文件共享的能力

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

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

其工作步骤如下:

  1. 打开控制端口 21,使客户进程能够连接上
  2. 等待客户进程发连接请求
  3. 启动从属进程来处理客户进程发来的请求(处理完客户请求后终止)
  4. 回到等待状态,继续接收其他客户进程的请求

FTP 服务器必须在整个会话期间保留用户的状态信息,服务器必须追踪用户在远程目录树上的当前位置

控制连接与数据连接

FTP 在工作时使用两个并行的 TCP 连接:一个是控制连接端口号 21,一个是数据连接端口号 20

使用两个不同的端口号可使协议更加简单和更容易实现

image-20211221192942605

控制连接

服务器监听 21 号端口,等待客户连接,建立在这个端口上的连接称为控制连接

控制连接用来传输控制信息(如连接请求、传送请求等),并且控制信息都以 7 位 ASCII 格式传送

FTP 客户发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件

在传输文件时还可以使用控制连接(如中止传输的命令),因此控制连接在整个会话期间一直保持打开状

数据连接

服务器端的控制进程在接收到 FTP 客户发来的文件传输请求后,就创建数据传送进程和数据连接

数据连接用来连接客户端和服务器端的数据传送进程,数据传送进程完成文件的传送后关闭数据传送连接并结束运行

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

  • PORT 模式的工作原理:

    客户端要读取数据时,客户端随机开放一个端口,并发送命令告知服务器

    服务器收到 PORT 命令和端口号后,通过 20 端口和客户端开放的端口连接,发送数据

  • PASV 模式的工作原理:客户端要读取数据时,发送 PASV 命令到服务器,服务器在本地随机开放一个端口,并告知客户端,客户端连接到服务器开放的端口进行数据传输

  • 可见,用 PORT 模式还是 PASV 模式,选择权在客户端

主动模式传送数据是服务器连接到客户端的端口;被动模式传送数据是客户端连接到服务器的端口


因为 FTP 使用了一个分离的控制连接(两个连接),所以也称 FTP 的控制信息是带外传送 Out-of-band 的

使用 FTP 时,若要修改服务器上的文件,则需要先将文件传送到本地,修改完再发回去,来回传送耗费很多时间

而网络文件系统 NFS 则在该文件的某个特定位置开始读写数据,仅发送用户当前使用的小块数据

电子邮件

电子邮件系统的组成结构

电子邮件是一种异步通信方式,通信时不需要双方同时在场

电子邮件把邮件发送到收件人使用的邮件服务器,并放到收件人邮箱中,收件人可以随时到邮件服务器进行读取

一个电子邮件系统应具有三个最主要的组成构件:用户代理 User Agent、邮件服务器、电子邮件使用的协议

  1. 用户代理:用户与电子邮件系统的接口

    向用户提供很友好的接口来发送和接收邮件,至少应当具有撰写、显示和邮件处理的功能

    通常情况下,用户代理就是一个运行在 PC 上的程序,常见的有 Outlook 和 Foxmail

  2. 邮件服务器:它的功能是发送和接收邮件,还要向发信人报告邮件传送的情况,如已交付、被拒绝、丢失等

    邮件服务器采用 C/S 方式工作,但它必须能够同时充当客户和服务器

    负责发送邮件的 SMTP 进程就是 SMTP 客户,而负责接收邮件的 SMTP 进程就是 SMTP 服务器

  3. 电子邮件使用的协议:由邮件发送协议和读取协议组成

    邮件发送协议:用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,如 SMTP

    邮件读取协议:用于用户代理从邮件服务器读取邮件,如 POP3

    注意:SMTP 用的是推的通信方式,SMTP 客户将邮件推送到 SMTP 服务器;POP3 用的是拉的通信方式,用户代理从邮件服务器拉取用户邮箱中的邮件

image-20211222160814393

电子邮件的发送、接收过程可简化为如图所示:

image-20211222160940649

电子邮件的收发过程:

  1. 发信人用用户代理来撰写和编辑邮件,用户代理用 SMTP 把邮件传送给发送端邮件服务器
  2. 发送端邮件服务器将邮件放入邮件缓存队列中,等待发送
  3. 发送端邮件服务器的 SMTP 客户进程,发现邮件缓存中有待发送的邮件,向接收端 SMTP 服务器发起建立 TCP 连接
  4. 连接建立后,向接收端 SMTP 服务器发送邮件,发完后关闭 TCP 连接
  5. 接收端 SMTP 服务器收到邮件后,将邮件放入收信人的用户邮箱,等待收信人在方便时进行读取
  6. 收信人打算收信时,调用用户代理,使用邮件读取协议,将邮件从接收端邮件服务器的用户邮箱中取回

电子邮件格式与 MIME

电子邮件格式

一个电子邮件分为信封和内容两大部分,邮件内容又分为首部和主体两部分

RFC 822 规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写

用户写好首部后,邮件系统自动地将信封所需的信息提取出来并写在信封上,用户不需要亲自填写信封上的信息

邮件内容的首部包含一些首部行,首部行由关键字: 值组成,有些关键字是必需的,有些则是可选的:

  1. To 是必需的关键字,后面填入一个或多个收件人的电子邮件地址

    电子邮件地址的格式:收件人邮箱名@邮箱所在主机的域名,其中收信人邮箱名在邮件服务器上必须是唯一的

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

  3. From 是必填的关键字 ,发送者的邮箱地址,由邮件系统自动填入

首部与主体之间用一个空行进行分割,典型的邮件内容如下:

From:hoopdog@hust.edu.cnTo:abc@cskaoyan.comSubject:Say hello to Internet}blahblah}

多用途网际邮件扩充 MIME

由于 SMTP 只能传送一定长度的 ASCII 码,为了传输非 ASCII 码的数据,提出了多用途网络邮件扩充 MIME

MIME 的意图是继续使用目前的格式,但增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则

MIME 并未改动 SMTP 或取代它,MIME 邮件可在现有的电子邮件程序和协议下传送:

image-20211222161205419

MIME 主要包括以下三部分内容:

  1. 5 个新的邮件首部字段:MIME 版本、内容描述、内容标识、传送编码、内容类型
  2. 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化
  3. 定义了传送编码,可对任何内容格式进行转换,而内容不会被邮件系统改变

SMTP 和 POP

SMTP

简单邮件传输协议 SMTP 是提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的 SMTP 进程交换信息

SMTP 用的是 TCP 连接,端口号为 25,SMTP 通信有以下三个阶段:

连接建立

发件人的邮件发送到发送方邮件服务器的邮件缓存中

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

SMTP 不使用中间的邮件服务器,接收方邮件服务器出故障不能建立连接时,发送方的邮件服务器等待一段时间后再次连接

邮件传送

连接建立后,就可开始传送邮件:

  1. 邮件的传送从 MAIL 命令开始,格式为 MAIL 发件人的地址

  2. 若 SMTP 服务器已准备好接收邮件,则回答 250 mail accepted

  3. SMTP 客户端发送一个或多个 RCPT 命令,格式为 RCPT TO:<收件人地址>

  4. 每发送一个 RCPT 命令,都应有相应的信息从 SMTP 服务器返回,如 250 recipient accepted 或 550 no such user here

    RCPT 命令的作用是,防止发送了很长的邮件后才知道地址错误,进而避免浪费通信资源

  5. 获得 OK 的回答后,客户端就使用 DATA 命令,表示要开始传输邮件的内容

  6. 正常情况下 SMTP 服务器回复的信息是 354 Start mail input; end with <CRLF>.<CRLF>,<CRLF>表示回车换行

  7. 此时 SMTP 客户端就可开始传送邮件内容

  8. 传输完成后用 <CRLF>.<CRLF> 表示邮件内容的结束

连接释放

邮件发送完毕后,SMTP 客户发送 QUIT 命令

SMTP 服务器返回的信息是 221,表示 SMTP 同意释放 TCP 连接,邮件传送的全部过程就此结束

具体过程

A: 220 beta.gov simple mail transfer service ready
B: HELO alpha.edu
A: 250 beta.gov
B: MAIL FROM:<smith@alpha.edu>
A: 250 mail accepted
B: RCPT TO:<jones@beta.gov>
A: 250 recipient accepted
B: RCPT TO:<green@beta.gov>
A: 550 no such user here
B: RCPT TO:brown@beta.gov
A: 250 recipient accepted
B: DATA
A: 354 start mail input; end with <CR><LF>.<CR><LF>
B: Date:Fri 27 May 2011 14:16:21 BJ
B: From:smith@alpha.edu
B: …
B: \r\n.\r\n
A: 250 OK
B: QUIT
A: 221 beta.gov service closing transmission channel.

POP3 和 IMAP

邮局协议 Post Office Protocol,POP 是一个非常简单但功能有限的邮件读取协议,现在使用的是它的第 3 个版本 POP3:

  • POP3 采用的是拉的通信方式,当用户读取邮件时,用户代理向邮件服务器发出请求,拉取用户邮箱中的邮件
  • POP 也使用 C/S 的工作方式,在传输层使用 TCP,端口号为 110
  • 接收方的用户代理上必须运行 POP 客户程序,而接收方的邮件服务器上则运行 POP 服务器程序
  • 选择题:POP3 协议在传输层使用明文来传输密码,并不对密码进行加密

POP 有两种工作方式:下载并保留和下载并删除:

  • 下载并保留:读取邮件后,邮件依然会保存在邮件服务器上,用户可再次从服务器上读取该邮件
  • 下载并删除:邮件一旦被读取,就被从邮件服务器上删除,用户不能再次从服务器上读取

另一个邮件读取协议是因特网报文存取协议 IMAP,它比 POP 复杂得多:

  • IMAP 为用户提供了创建文件夹、在文件夹间移动邮件、在文件夹中查询邮件等联机命令,它维护了会话用户的状态信息

  • IMAP 允许用户代理只获取报文的某些部分,如可以只读取一个报文的首部,或多部分 MIME 报文的一部分

    这非常适用于低带宽的情况,用户可能并不想取回邮箱中的所有邮件,尤其是包含很多音频或视频的大邮件

随着万维网的流行,目前出现了很多基于万维网的电子邮件,如 HotmailGmail 等:

  • 用户浏览器与 HotmailGmail 的邮件服务器之间的邮件发送或接收使用的是 HTTP
  • 仅在不同邮件服务器之间传送邮件时才使用 SMTP

万维网 WWW

WWW 的概念与组成结构

万维网 World Wide Web,WWW 是一个分布式、联机式的信息存储空间,在这个空间中:一个有用的事物称为一个资源

这些资源由全域统一资源定位符 URL 标识,并通过超文本传输协议 HTTP 发给使用者,使用者通过单击链接来获取资源

万维网使用链接可以方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息

超文本标记语言 HTML 使得万维页面可以使用超链接方便地链接其他万维页面,并在计算机屏幕上显示这些页面

万维网的内核部分是由三个标准构成的:

  1. 统一资源定位符 URL:负责标识万维网上的各种文档,每个文档具有唯一的标识符 URL

    对因特网上可得到的资源的位置和访问方法的一种简洁表示,相当于一个文件在网络上的名字

  2. 超文本传输协议 HTTP:使用 TCP 的应用层协议,是万维网客户程序和服务器程序之间交互所必须遵守的协议

  3. 超文本标记语言 HTML:一种文档结构的标记语言,它使用一些约定的标记对页面上的各种信息、格式进行描述

URL 的一般形式是:<协议>://<主机>:<端口>/<路径>

  1. <协议>:用什么协议来获取万维网文档,常见的协议有 HTTP、FTP 等
  2. <主机>:存放资源的主机在因特网中的域名或 IP 地址
  3. <端口> 和 <路径> 有时可省略
  4. 注意:URL 中不区分大小写

万维网以 C/S 方式工作,浏览器是万维网客户程序,万维网文档所驻留的主机(万维网服务器)则运行服务器程序

客户程序向服务器程序发出请求,服务器程序返回客户所要的万维网文档,工作流程如下:

  1. Web 用户使用浏览器与 Web 服务器建立连接,并发送浏览请求
  2. Web 服务器把 URL 转换为文件路径,并返回信息给 Web 浏览器
  3. 通信完成,关闭连接

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

超文本传输协议 HTTP

HTTP 定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器

从层次的角度看,HTTP 是面向事务的应用层协议,它规定了在浏览器和服务器之间的请求和响应的格式与规则

这是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础

HTTP 的操作过程

从协议执行过程来说,浏览器要访问 WWW 服务器时,首先要完成对 WWW 服务器的域名解析

一旦获得了服务器的 IP 地址,浏览器就通过 TCP 向服务器发送连接建立请求

万维网的大致工作过程如下:

  1. 每个万维网站点都有一个服务器进程,它不断地监听 TCP 的端口 80
  2. 当监听到连接请求后便与浏览器建立 TCP 连接
  3. 浏览器就向服务器发出 HTTP 请求
  4. 服务器收到请求后,将构建所请求 Web 页的必需信息,并通过 HTTP 响应返回给浏览器
  5. 浏览器对信息进行解释,然后将 Web 页显示给用户
  6. 最后,TCP 连接释放

image-20211222214649474

HTTP 有两类报文:请求报文(浏览器 → 服务器)和响应报文(服务器 → 浏览器)

用户在浏览器输入 http://www.tsinghua.edu.cn/chn/index.htm 并回车后发生的事件如下:

  1. 浏览器分析链接指向的页面的 URL
  2. 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址
  3. 域名系统 DNS 解析出 IP 地址并发送给浏览器
  4. 浏览器与服务器建立 TCP 连接(默认 80 端口)
  5. 浏览器发出 HTTP 请求GET /chn/index.htm
  6. 服务器通过 HTTP 响应把文件 index.htm 发送给浏览器
  7. 释放 TCP 连接
  8. 浏览器解释文件 index.htm,并将 Web 页显示给用户

HTTP 的特点

HTTP 使用 TCP 作为运输层协议,以便不必考虑数据在传输过程中被丢弃后要怎样被重传

HTTP 本身是无连接的,即通信的双方在交换 HTTP 报文之前不需要先建立 HTTP 连接

HTTP 是无状态的,即一个客户两次访问一个服务器得到的响应相同,因为服务器不会去记忆访问的客户

HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的 HTTP 请求

在实际应用中,通常使用 Cookie 加数据库的方式来跟踪用户的活动,Cookie 的工作原理:

  1. 用户浏览使用 Cookie 的网站时,该网站服务器就为用户产生一个唯一的识别码,如 123456

    接着在响应报文中添加一个首部行 Set-cookie: 123456

  2. 用户收到响应后,就在它管理的特定 Cookie 文件中添加这个服务器的主机名和 Cookie 识别码

  3. 当用户再浏览这个网站时,会取出这个网站的识别码,并放入请求报文的 Cookie 首部行 Cookie: 123456

  4. 服务器根据请求报文中的 Cookie 识别码从数据库中查询到该用户的活动记录,进而执行一些个性化的工作

  5. 注意:Cookie 内放的唯一识别码叫 SessionID,Cookie 不是唯一的,且可以放很多东西

HTTP 既可以使用非持久连接,也可以使用持久连接(HTTP/1.1 支持):

  • 非持久连接:每个网页元素的传输都需要单独建立一个 TCP 连接,第三次握手中捎带了客户对万维网文档的请求

    请求一个万维网文档所需的时间是该文档的传输时间加上两倍往返时间 RTT(建立连接 + 请求和接收文档)

    每个对象都导致 2 × RTT 的开销,且每建立新的 TCP 连接都要分配缓存和变量,使万维网服务器的负担很重

    image-20211222214849978

  • 持久连接:万维网服务器在发送响应后仍然保持这条连接,以便可以继续在这条连接上传送后续的 HTTP 请求和响应报文

    image-20211222214922153

持久连接又分为非流水线和流水线两种方式:

  1. 非流水线方式:客户在收到前一个响应后才能发出下一个请求,上图就是非流水线方式

    服务器发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源

  2. 流水线方式:客户每遇到一个对象引用就立即发出一个请求不需要等待响应,HTTP/1.1 的默认方式

如果所有的请求和响应都是连续发送的:

  1. 流水线方式:所有引用的对象共计经历 1 个 RTT 延迟
  2. 非流水线方式:每个引用都必须有 1 个 RTT 延迟

HTTP 的报文结构

HTTP 是面向文本的,因此报文中的每个字段都是一些 ASCII 码串,并且每个字段的长度都是不确定的

有两类 HTTP 报文:

  • 请求报文:从客户向服务器发送的请求报文
  • 响应报文:从服务器到客户的回答

image-20211222215021476

HTTP 请求报文和响应报文都由开始行、首部行、实体主体组成,这两种报文格式的区别就是开始行不同

  1. 开始行:用于区分是请求报文还是响应报文

    • 在请求报文中的开始行称为请求行,请求行有三个内容:请求方法、请求资源的 URL、HTTP 的版本
    • 在响应报文中的开始行称为状态行,状态行有三个内容:HTTP 版本、结果状态码,状态码相应的短语

    开始行的三个字段之间用空格分隔,最后的 CR 和 LF 分别代表回车和换行

    请求方法是对所请求对象进行的操作,这些方法实际上也就是一些命令:

    image-20211222215137245

  2. 首部行:用来说明浏览器、服务器或报文主体的一些信息,首部可以有几行,但也可以不使用

    在每个首部行中都有首部字段名和它的值,每一行在结束的地方都要有回车和换行

    整个首部行结束时,还有一空行将首部行和后面的实体主体分开

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

下图为使用 Wireshark 捕获的 HTTP 请求报文,结合前面的内容对请求报文进行分析

image-20211222215216323

  1. 数据链路层:

    1 ~ 6 字节为目的 MAC 地址,如果是主机发的话它是默认网关地址,即 00-0f-e2-3f-27-3f

    7 ~ 12 个字节为本机 MAC 地址,即 00-27-13-67-73-8d

    13 ~ 14 个字节 08 00 为类型字段,表示上层使用的是 IP 数据报协议

  2. 网络层:15 ~ 34 个字节为 IP 数据报的首部(20B

    27 ~ 30 个字节为源 IP 地址,即 db-df-d2-70(219.223.210.112)

    31 ~ 34 个字节为目的 IP 地址,即 71-69-4e-0a(113.105.78.10)

  3. 传输层:35~54 个字节为 TCP 报文段的首部(20B

  4. 应用层:55 个字节开始是 TCP 数据部分,即从应用层传递下来的数据

    GET 对应请求行的方法,/face/20.gif 对应请求行的 URL,HTTP/1.1 对应请求行的版本

    还有首部行,如 Host: bbs.szhome.com\r\n 表示服务器的主机,一般会带有这个首部行

应用层协议小结

image-20211223182951324


📝 个人补充与原笔记精华

NOTE

因为主机名和 IP 地址之间的映射不是永久的,所以 DNS 服务器将在一段时间后丢弃高速缓存中的信息。

NOTE

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

Released under the MIT License.