当前位置: 首页 > news >正文

【b站-湖科大教书匠】6 应用层 - 计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_source=copy_web&vd_source=b1cb921b73fe3808550eaf2224d1c155

目录

6 应用层 

6.1 应用层概述

6.2 客户-服务器方式和对等方式

6.2.1 客户-服务器方式 C/S方式

6.2.2 对等方式 P2P方式

6.3 动态主机配置协议DHCP

6.3.1 DHCP的作用

6.3.2 DHCP的工作过程

6.3.3 DHCP中继代理

6.4 域名系统DNS

6.4.1 域名系统DNS的作用

6.4.2 域名结构-层次树状结构

6.4.3 域名服务器

6.4.4 域名解析过程

6.5 文件传送协议FTP

6.5.1 FTP的应用

6.5.2 FTP的基本工作原理

6.6 电子邮件

6.6.1 电子邮件的概念

6.6.2 电子邮件的接发过程

6.6.3 邮件发送协议SMTP工作原理

6.6.4 电子邮件的信息格式

6.6.5 邮件读取协议

6.6.6 基于万维网的电子邮件

6.7 万维网WWW

6.7.1 概念

6.7.2 浏览器历史与现状

6.7.3 万维网应用

6.7.4 万维网文档

6.7.5 超文本传输协议HTTP

6.7.6 HTTP的报文格式

1 HTTP请求报文格式

2 HTTP响应报文格式

6.7.7 浏览器使用Cookie在服务器上记录用户信息

1 Cookie的作用

2 Cookie的工作原理

6.7.8 万维网缓存与代理服务器


6 应用层 

6.1 应用层概述

具体内容如下。

 例如,

这就是推动因特网发展的万维网的应用,相关的应用层协议为超文本传送协议HTTP。

用户在浏览器地址栏输入的是见名知意的域名,而TCP/IP体系的网际层使用IP地址来标识目的主机。

从域名到IP地址的转换工作,由属于应用层范畴的域名系统DNS在后台帮用户自动完成,以方便用户使用。

除万维网应用和域名系统外,常见的应用还有动态主机配置、电子邮件、文件传送和P2Peye.com文件共享、多媒体网络应用等。

总结

6.2 客户-服务器方式和对等方式

具体内容如下。

6.2.1 客户-服务器方式 C/S方式

6.2.2 对等方式 P2P方式

总结

6.3 动态主机配置协议DHCP

具体内容如下。

6.3.1 DHCP的作用

假设有这样一个网络拓扑。

问题:应该给网络的各主机,设置怎样的网络相关配置信息,才能使他们可以正常访问网络中的Web服务器。

需要给网络中的各主机正确配置IP地址、子网掩码、默认网关、DNS服务器等相关配置信息。

可以手动给网络中的某些主机配置信息,但是如果网络的主机数量较多,则手工配置的工作量就比较大,且容易出错。

DHCP的作用

如果给网络添加一台DHCP服务器,在该服务器中设置好可为网络中其他各主机配置的网络配置信息。

网络中各主机开机后自动启动DHCP程序,向DHCP服务器请求自己的网络配置信息。这样网络中的各主机就都可以从DHCP服务器自动获取配置信息,而不用手动配置。

6.3.2 DHCP的工作过程

p69 2:00-

DHCP是TCP/IP协议体系应用层中的协议,使用运输层的UDP提供的服务。

DHCP报文的封装过程

DHCP报文在运输层被封装为UCP用户数据报。

DHCP服务器使用的UDP端口是67,DHCP客户使用的UDP端口是68,两个端口都是熟知端口。

封装有DHCP报文的UDP用户数据报,在网络层被封装为IP数据报,然后根据所使用的网络接口,封装成相应的数据链路层的帧进行发送,例如封装成以太网帧。

DHCP客户与DHCP服务器的交互过程

启用主机的DHCP后,DHCP客户广播发送DHCP发现报文。封装该报文的IP数据报的源地址为0.0.0.0,因为主机此时没有分配到IP地址。目的IP地址为广播地址255.255.255.255,之所以广播发送是因为主机不知道网络中有哪几个DHCP服务器及其IP地址。

由于是广播的IP数据报,网络中所有设备都会收到该数据报,并层层解封,解封出封装有DHCP发现报文的UDP用户数据报。

对于DHCP客户,其应用层没有监听该UDP用户数据报的目的端口67的进程,也就是没有DHCP服务器进程,因此无法交付DHCP发现报文只能丢弃。

就是说网络中的其他主机,收到前面说的主机发送的DHCP发现报文后,由于自身没有DHCP服务器进程,因此收到了广播也只能丢弃收到的DHCP发现报文。

而对于DHCP服务器,其应用程序中运行着DHCP服务器进程,因此会接受该DHCP发现报文并作出响应。

DHCP报文的格式比较复杂,对于DHCP发现报文,我们只需要知道其内部封装有事务ID和DHCP客户端的MAC地址即可。

DHCP服务器收到DHCP发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有针对该MAC地址的配置信息。如果有,则使用这些配置信息来构建并发送DHCP提供报文。如果没有,则采用默认配置信息来构建并发送DHCP提供报文。

封装该报文的IP数据报的源IP地址为DHCP服务器的IP地址,目的IP地址仍为广播地址,仍然需要广播地址的原因是主机目前还没有配置IP地址,为了使主机可以收到只能发送广播。

这样一来,网络中的所有设备都会收到该IP数据包。并对其层层解封出封装有DHCP提供报文的UDP用户数据报。

对于DHCP服务器,其实应用层没有监听该UDP用户数据报目的端口68的进程,也就是dhcp客户进程,因此无法交付DHCP提供报文只能丢弃。

而对于DHCP客户,其应用层运行着DHCP客户进程,因此会接受该DHCP提供报文并作出相应处理。

DHCP客户会根据DHCP提供报文中的事务ID来判断该报文是否是自己所请求的报文。换句话说,如果该事务ID与自己之前发送的DHCP发现报文中封装的事务ID相等,就表明这是自己所请求的报文,就可以接收该报文,否则就要丢弃该报文。

DHCP提供报文中还封装有配置信息,例如IP地址、子网掩码、地址租期、默认网关以及DNS服务器。

需要注意的是,DHCP服务器从自己的IP地址池中挑选租用给主机的IP地址,会使用ARP确保所选IP地址未被网络中其他主机占用。

在本例中,DHCP客户会收到两个DHCP服务器发来的DHCP提供报文。DHCP客户从中选择一个,一般来说选择先到的那个,并向所选择的DHCP服务器发送DHCP请求报文

封装该报文的IP数据报的源地址仍为0.0.0.0,因为此时DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器,它首先需要征得该服务器的同意之后才能正式使用向该DHCP服务器租用的IP地址。

目的IP地址仍为广播地址,这样做的目的是不用向网络中的每一个DHCP服务器单播发送DHCP请求报文来告知他们是否请求他们作为自己的DHCP服务器。

DHCP请求报文装封装有事务ID,DHCP客户端的MAC地址,接受的租约中的IP地址,提供此租约的DHCP服务器端的IP地址等信息。

在本例中假设DHCP客户选择DHCP服务器1作为自己的DHCP服务器,并且DHCP服务器1接受该请求。于是DHCP服务器1给DHCP客户发送DHCP确认报文。

封装该报文的IP数据报的源IP地址为DHCP服务器1的IP地址,目的IP地址为广播地址。

DHCP客户收到该确认报文号,就可以使用所租用到的IP地址了。

需要注意的是在使用租用到的IP地址之前,主机还会使用ARP检测该IP地址是否已被网络中其他主机占用。若被占用,DHCP客户会给DHCP服务器发送DHCP报文来谢绝IP地址租约并重新发送DHCP发现报文;若未被占用,则可以使用租约中的IP地址与网络中的其他主机通信了。

当然,租用期过了一半时,DHCP客户会向DHCP服务器发送DHCP请求报文来请求更新租用期。封装该报文的IP数据报的源IP地址为DHCP客户之前租用到的IP地址,目的IP地址为DHCP服务器1的地址。

DHCP服务器若同意则发回DHCP确认报文。这样DHCP客户就得到了新的租用期。

DHCP服务器若不同意则发回DHCP否认报文。这时DHCP客户必须立即停止使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址。

DHCP服务器若未作出响应,则租用期过了87.5%时,DHCP客户必须重新发送DHCP请求报文,然后继续等待DHCP服务器可能做出的反应。

若DHCP服务器未作出反应,则当租用期到期后,DHCP客户必须立即停止使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址。

DHCP客户可以随时提前终止DHCP服务器所提供的租用期,这时只需要向DHCP服务器发送DHCP释放报文段即可。

综上所述,这部分是DHCP客户寻找DHCP服务器。

这部分是DHCP服务器向DHCP客户提供IP地址租用。

这部分是DHCP客户接受IP地址租约。

这部分是DHCP服务器确认IP地址租约。

这部分是DHCP客户进行IP地址续约。

这部分是DHCP客户可以随时解除IP地址租约。

需要注意的是,DHCP服务器在给DHCP客户挑选IP地址时。需要ARP来确保所挑选的IP地址未被网络中其他主机占用。而DHCP客户在使用所租用的IP地址之前,也会使用ARP来检测该IP地址是否已被网络中其他主机占用。

6.3.3 DHCP中继代理

有这样一个网络拓扑,请大家思考一下该网络中的各主机是否可以通过DHCP来自动获取到网络配置信息?


答案是否定的。

原因很简单,该网络中的主机广播发送DHCP发现报文,但该广播报文不会被路由器转发,而是丢弃。

解决方法是给该路由器配置DHCP服务器的IP地址,并使之成为DHCP中继代理。

这样,该网络中的各主机就可以通过DHCP来自动获取到网络配置信息了。

当该路由器收到广播的DHCP发现报文后,会将其单播转发给DHCP服务器。DHCP客户和DHCP服务器通过该路由器的后续交互过程,我们就不再赘述了。

需要DHCP中继代理的主要原因是,我们并不愿意在每一个网络上都设置一个DHCP服务器,因为这样会使DHCP服务器的数量太多。

总结

6.4 域名系统DNS

具体内容如下。

6.4.1 域名系统DNS的作用

如下图所示,因特网中的某台主机要访问某台Web服务器。

我们只需在用户主机中运行某个浏览器软件,在其地址栏中输入要访问的Web服务器的域名,并按下回车键即可访问到Web服务器所提供的内容。

这是大家最常用的一种网络应用。

接下来我们在用户主机中使用ping命令来测试一下用户主机与Web服务器的连通性

可以看到,我们ping的是Web服务器的域名,但ping命令实际上拼的是Web服务器的IP地址

这与我们之前课程中所介绍的TCP/IP体系采用IP地址进行寻址的知识是一致的,也就是说,即使不使用域名,也可以通过IP地址来寻址目的主机

但域名与IP地址相比,便于人们记忆。

因此,对于大多数网络应用,我们一般使用域名来访问目的主机,而不是直接使用IP地址来访问。

对于本例,简单来说,当我们在浏览器地址栏中输入某个Web服务器的域名时,用户主机会首先在自己的DNS的高速缓存中,查找该域名所对应的IP地址。

如果没有找到,则会向网络中的某台DNS服务器查询。

DNS服务器装有域名和IP地址映射关系的数据库

当DNS服务器收到DNS查询报文后,在其数据库中进行查询,之后将查询结果发送给用户主机。

现在,用户主机中的浏览器可以通过Web服务器的IP地址对其进行访问了。

请同学们思考一下因特网是否可以只使用一台DNS服务器?

尽管理论上是可行的,但在实践中这种做法并不可取。

因为因特网的规模很大,这样的域名服务器肯定会因为超负荷而无法正常工作,而且一旦域名服务器出现故障整个因特网就会瘫痪。

早在1983年,因特网就开始采用层次结构的命名树作为主机的名字也就是我们所谓的域名,并使用分布式的域名系统DNS使大多数域名都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。

由于域名系统是分布式系统,即使单个域名服务器出现了故障,也不会妨碍整个系统的正常运行。

6.4.2 域名结构-层次树状结构

6.4.3 域名服务器

6.4.4 域名解析过程

 高速缓存

练习题

A

练习题2

A

答错啦o(╥﹏╥)o

正确答案C

总结

6.5 文件传送协议FTP

具体内容如下。

6.5.1 FTP的应用

本例也可以采用普通的个人计算机作为FTP服务器计算机。

为了简单起见,我们假设FTP客户计算机与FTP服务器计算机处于同一个局域网中(因特网改为交换机)。

我们在FTP服务器计算机中,创建FTP服务器,可以使用第三方的FTP服务器软件,也可以使用操作系统自带的FTP服务器软件,例如我们可以在Windows系统中,使用其自带的FTP服务器功能,创建一个FTP服务器站点,具体方法比较简单,请同学们在网上自行查阅。

假设这是所创建的FTP服务器的IP地址。

我们可以在FTP客户计算机中使用浏览器软件,通过该地址来访问FTP服务器。需要注意的是,这里使用的是文件传送协议FTP,而不是浏览器最常用的超文本传送协议HTTP。

我们也可以在FTP客户计算机中使用Windows系统自带的命令行工具,通过该地址来访问FTP服务器。例如,这是连接FTP服务器,采用匿名登录,因此无需输入密码。登录成功后可以列出FTP服务器当前目录下的所有文件和文件夹。可从FTP服务器下载文件。也可向FTP服务器上传文件。

命令行方式,需要用户记住相关命令,这对普通用户而言并不友好。

因此,大多数用户在FTP客户计算机上使用第三方的FTP客户工具软件。通过友好的用户界面来完成FTP服务器的登录以及文件的上传和下载。

FTP的常见用途是在计算机之间传输文件,尤其适用于批量传输文件。

FTP的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器。

6.5.2 FTP的基本工作原理

练习题

A

练习题2

C

竟然是这样的。

总结

6.6 电子邮件

具体内容如下。

6.6.1 电子邮件的概念

这是发送方使用的邮件服务器,例如QQ邮件服务器。这是接收方使用的邮件服务器,例如谷歌邮件服务器。

邮件服务器是电子邮件系统的基础设施,因特网上所有的服务提供商都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。

如图所示,我们可以简单的认为邮件服务器中有很多邮箱,还有用来缓存再转发邮件的缓存。

发送方需要用户代理通过邮件发送协议,例如SMTP,将邮件发送给发送方邮件服务器

发送方邮件服务器同样通过邮件发送协议,将该邮件发送给接收方邮件服务器

接收方方便的时候需要用户代理通过邮件读取协议,例如POP3,从接收方邮件服务器读取邮件

也就是说,电子邮件所接的协议包括邮件发送协议和邮件读取协议两类。

6.6.2 电子邮件的接发过程

发送方的用户代理作为SMTP客户发送方邮件服务器中的SMTP服务器进行TCP连接,然后基于这条连接使用SMTP协议,来发送邮件给发送方邮件服务器。

发送方邮件服务器中的SMTP客户接收方邮件服务器中的SMTP服务器进行TCP连接,然后基于这条连接使用SMTP协议来发送已收到的待转发邮件给接收方邮件服务器。

接收方的用户代理作为POP3客户与接收方邮件服务器中的POP3服务器进行TCP连接,然后基于这条连接需要POP3协议从接收方邮件服务器读取邮件。

可以看到这是邮件发送协议的使用范围,包含发送方用户代理到发送方邮件服务器以及发送方邮件服务器到接收方邮件服务器这两个部分。

这是邮件读取协议的使用范围,只有接收方用户代理到接收方邮件服务器这一部分。

6.6.3 邮件发送协议SMTP工作原理

SMTP的基本工作原理。

我们以发送方邮件服务器使用SMTP协议给接收方邮件服务器发送待转发的邮件为例。

发送方邮件服务器周期性地扫描邮件缓存,如果发现有待转发的邮件,则发送方邮件服务器中的SMTP客户会与接收方邮件服务器中的SMTP服务器进行TCP连接,端口号为25。

之后SMTP客户就可以基于这条TCP连接给SMTP服务器发送SMTP命令,共14条,SMTP服务器也会给SMTP客户发送相应的应答,共21种。

SMTP客户与服务器之间通过命令与应答的交互方式最终实现SMTP客户发送邮件给SMTP服务器。

具体过程省略,可见p72.

6.6.4 电子邮件的信息格式

6.6.5 邮件读取协议

6.6.6 基于万维网的电子邮件

练习题

D

答对啦

练习题2

A

答对啦

I

II  III 正确

IV  用户代理从邮件服务器读取邮件时,使用的是POP3协议,还可以使用功能更强的IMAP协议。因此IV错误

练习题3

D

总结

6.7 万维网WWW

6.7.1 概念

6.7.2 浏览器历史与现状

 浏览器历史

 浏览器现状。

6.7.3 万维网应用

举例说明万维网应用。

在用户主机中,使用浏览器来访问湖南科技大学的万维网服务器,也就是访问湖南科技大学的官方网站。

在浏览器的地址栏中输入湖南科技大学官方网站的域名,并按下回车键后。

浏览器将发送请求报文给服务器。

服务器收到请求报文后,执行相应操作,然后给浏览器发回响应报文。

浏览器解析并渲染响应报文中的内容,这样就可以看到网站首页了。

为了方便访问在世界范围的文档,万维网使用统一资源定位符来指明因特网上任何种类资源的位置。

统一资源定位符的一般形式由以下四个部分组成,分别是协议、主机、端口、路径。

前面在浏览器地址栏中输入的是湖南科技大学官方网站的域名,目的是获取网站首页的内容,其对应的统一资源定位符如图所示。

当点击网页中的某个超链接时将跳转到另一个网,可以看到,这是该网页相应的统一资源定位符,其中,协议、主机和端口与网站首页相同,不同的是路径和网页文件

6.7.4 万维网文档

这是湖南科技大学官方网站的首页,将其另存为文件。

可以看到有一个扩展名为HTML的文件和一个文件夹。

打开该文件夹看看其内容。

这三个扩展名为htm的文件是HTML文档。

这五个扩展名为JS的文件是Java script文档。

这两个扩展名为CSS的文件是CSS文档。

其他的JPG文件和PNG文件是图片文件。

HTML是超文本标记语言的英文缩写词,使用多种标签来描述网页的结构和内容。

CSS是层叠样式表的英文缩写词,从审美的角度来描述网页的样式。

JavaScript是一种脚本语言,用来控制网页的行为。

由HTML, CSS, JavaScript编写的万维网文档浏览器内核负责解释和渲染

举例。

这是用HTML编写的最简单的HTML文档。

用浏览器打开该HTML文档,可以看到浏览器渲染出了一个非常简单的网页。

在HTML文档中需要两个html标签来定义HTML文档的范围,在其内部使用两个head标签定义HTML文档的首部,使用两个body标签定义HTML文档的主体。

首部中两个title标签之间的内容,被渲染为网页的标题。两个p标签之间的内容被渲染为一个文本段落。

通过本例可以看出HTML适用多种标签来描述网页的结构和内容,但是所呈现出来的内容样式过于简单,或者说不够美观。

可以在CSS文档中定义一些所需要的样式,对网页显示内容进行美化。

例如,编写这样一个CSS文档,在其中定义了一种样式,即颜色为深粉色,字体大小为36像素。

然后在之前编写好的HTML文档的首部,使用link标签将该CSS文档引入。

将样式名称指定给主体中需要更改样式的p标签。

现在,在浏览器中进行刷新,就可以看到浏览器重新渲染出了网页内容,可以看到Hello world段落的颜色和字体大小都发生了相应的变化。

接下来再给该网页添加一个按钮。

在之前的HTML文档的主体中使用button标签来添加一个按钮。

为该按钮指定一个发生单击事件时应该调用的处理函数,然后用JavaScript的脚本语言来编写一个JS文档。在该文档中,编写单击事件处理函数的具体实现代码。

在HTML文档的首部使用script标签将该JS文档引入。

在事件处理函数中,通过元素的id来找到相应的元素,也就是显示Hello world的p标签,然后更改其显示内容。

现在我们在浏览器中进行刷新就可以看到我们所添加的按钮。当我们用鼠标点击该按钮时,Hello world变成了谢谢你的赞。

通过上述举例,相信大家对HTML文档CSS文档JavaScript文档已经有了初步的认识。

至于这些文档的具体编写,属于web前端开发的基础,并不属于本课程的教学大纲,我们就要不再深入介绍了。

需要大家注意的是,这些文档都部署在服务器端,有一些是web前端人员开发设计好的静态页面,有一些是服务器后端程序根据用户需求自动生成的动态页面。它们都需要从服务器传送给用户的浏览器进行解析和渲染。这就要不得不提到TCP/IP体系应用层中的一个非常重要的协议-超文本传输协议HTTP。

6.7.5 超文本传输协议HTTP

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

使用用户主机来访问湖南科技大学的万维网服务器,可以看成是用户主机中的浏览器进程,即客户进程,与服务器中的服务器进程基于因特网通信。

浏览器进程,首先发起与服务器进程的TCP连接,使用熟知端口号80。基于这条已建立好的TCP连接,浏览器进程向服务器进程发送HTTP请求报文。服务器进程收到后执行相应操作,然后给浏览器进程发回响应报文。

HTTP 1.0采用非持续连接方式,在该方式下。每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后,就立即关闭连接。

举例说明。这是客户与服务器之间通过三报文握手进行TCP连接。

在这三个报文中的最后一个报文的数据载荷部分,携带有HTTP请求报文。服务器收到后,给客户发回HTTP响应报文。

这是一次请求和响应所耗费的时间,记为往返时间RTT。这又是一次请求和响应所耗费的时间RTT。这是文档的传输时延。

可以看到请求一个万维网文档所需的时间为两倍的RTT加文档的传输时延。

每请求一个文档就要有两倍RTT的开销。

若一个网页上有很多引用对象。例如图片等,那么请求每一个对象都需要额外花费两倍的RTT的时间。

为了减少时延,浏览器通常会建立多个并行的TCP连接,同时请求多个对象,但是这会大量占用万维网服务器的资源,特别是万维网服务器往往同时服务于大量客户的请求,这会使其负担很重。

HTTP 1.1采用持续连接方式,在该方式下,万维网服务器在发送响应后,仍然保持这条连接,使同一个客户和该服务器可以继续在这条连接上,传送后续的HTTP请求报文和响应报文。

这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。

为了进一步提高效率,HTTP1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。

6.7.6 HTTP的报文格式

1 HTTP请求报文格式

2 HTTP响应报文格式

状态码 

 常见状态行

浏览器实际的显示信息

6.7.7 浏览器使用Cookie在服务器上记录用户信息

1 Cookie的作用

2 Cookie的工作原理

用户主机中的浏览器进程,首先与万维网服务器中的服务器进程建立TCP连接。

当用户的浏览器进程初次向服务器进程发送HTTP请求报文时,服务器进程就会为其产生一个唯一的Cookie识别码,并以此为索引在服务器的后端数据库中创建一个项目,用来记录该用户访问该网站的各种信息。接着就会给浏览器进程发回HTTP响应报文。在响应报文中包含有一个首部字段为Set-Cookie的首部行,该字段的取值就是Cookie识别码。

当浏览器进程收到该响应报文之后,就在一个特定的Cookie文件中添加一行,记录该服务器的域名和Cookie的识别码。

当用户再次使用浏览器访问这个网站时,每发送一个HTTP请求报文,浏览器都会从Cookie文件中取出该网站的Cookie识别码,并放到HTTP请求报文的Cookie首部行。服务器根据Cookie识别码就可以识别出该用户,并返回该用户的个性化网页。

6.7.8 万维网缓存与代理服务器

具体内容如下。

假设这是因特网上的某台万维网服务器,为了与万维网代理服务器的名称区分,我们简称该服务器为原始服务器。这是校园网中的某台万维网代理服务器,我们简称其为代理服务器。

当校园网中的某台主机要访问因特网上的原始服务器时,它首先会向校园网中的代理服务器发送请求。

若代理服务器中存放有所请求的对象,则代理服务器会向该主机发回包含所请求对象的响应。

若代理服务器中没有所请求的对象,则代理服务器会向因特网上的原始服务器发送请求。原始服务器将包含有锁请求对象的响应发回给代理服务器。

代理服务器将该响应存入Web缓存,然后给主机发回该响应。

可以想象,如果Web缓存的命中率比较高,则路由器R1和R2之间的链路上的通信量将大大减少。因而可以减少校园网各主机访问因特网的时延。

可能会有以下疑问。

这是原始服务器中的某个文档,这是该文档在代理服务器中的副本。

假设原始服务器中的该文档已被更改,之后,校园网中的某台主机要请求该文档。

它首先向校园网中的代理服务器发送请求。代理服务器找到该文档后,将其封装在响应报文中发回给主机,这样主机所请求到的文档,与原始服务器中的文档就不一致了。

实际上,原始服务器通常会为每个响应的对象设定一个修改时间字段和一个有效日期字段。

当校园网中的某台主机要请求原始服务器中的该文档时,它首先向校园网中的代理服务器发送请求。

若代理服务器中的该文档未过期,则代理服务器将其封装在响应报文中发回给主机。

若代理服务器中的该文档已过期,则代理服务器会向因特网上的原始服务器发送请求。

在请求报文中,包含有一个首部字段为if-modified-since的首部行,该字段的取值就是该文档的修改日期。

原始服务器根据该文档的修改日期,就可判断出代理服务器中存储的该文档是否与自己存储的该文档一致。

如果一致,则给代理服务器发送不包含实体主体的响应报文,状态码为304,短语文not modified.


代理服务器重新更新该文档的有效日期,然后将该文档封装在响应报文中发回给主机。

如果不一致,则给代理服务器发送封装有该文档的响应报文,如图所示。

这样代理服务器就更新了该文档。

然后将更新后的该文档封装在响应报文中发回给主机。

练习题

D

错啦,是C

练习题2

2个?

错啦,是4个。

答案

注意:由于rfc.html页面中引用另外2个JPEG小图像,则浏览器会继续依次请求这两个对象。

注意非流水线方式的概念。

总结

完结撒花~

相关文章:

【b站-湖科大教书匠】6 应用层 - 计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 6 应用层 6.1 应用层概述 6.2 客户-服务器方式和对等方…...

QT串口和数据库通信

创建串口 串口连接客户端并向服务器发送消息 client.pro #------------------------------------------------- # # Project created by QtCreator 2024-07-02T14:11:20 # #-------------------------------------------------QT core gui network QT core gui…...

WebKitWebKit简介及工作流程

简介 引擎能够解析HTML、CSS、JavaScript等网页标准,从而将互联网内容呈现给用户。 WebKit的主要特点包括: 开源性:它是一个开源项目,任何人都可以查看、修改和贡献代码。跨平台:WebKit可以在多个操作系统上运行&am…...

架构分析(CPU:ARM vs RISC-V)

ARM N2 ARM V2 对比 N2和V2,整体架构具有一致性。保证 SiFive P870 P870 Pipeline Veyron V1...

使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

前言 RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 特点 成熟,稳定消息持久化灵活的消息路由高性能,高可用性,可扩展性高支…...

前端八股速通(持续更新中...)

1、深拷贝和浅拷贝的区别 浅拷贝:浅拷贝是拷贝一层,引用类型共享地址。 如果属性是基本类型,拷贝的就是基本类型的值。 如果属性是引用类型,拷贝的就是内存地址。 意思是,当进行浅拷贝时,对于对象的每一…...

【语音识别和生成】语音识别和语音合成技术

语音识别和生成:语音识别和语音合成技术 目录 引言语音识别技术 语音识别的基本原理语音识别系统的组成语音识别的关键技术 语音合成技术 语音合成的基本原理语音合成系统的组成语音合成的关键技术 语音识别和生成的应用 智能助理智能家居语音翻译医疗健康教育和学…...

Redis#架构师面试题

1、Redis锁存在哪些问题及如何解决? 1、死锁问题 加过期时间设定 2、原子性问题 通过“set…nx...ex…”命令,将加锁、过期命令编排到一起,它们是原子操作了,可以避免死锁。 3、释放其他线程的锁问题 当过期时间设置小于线程…...

关于#define的使用方法总结

文章目录 #define 预处理指令一、#define宏定义二、查看预处理文件三、#define 的使用方法四、C语言宏中“#”和“##”的用法五、常见的宏定义总结六、常考题目 #define 预处理指令 #define 是 C 和 C 编程语言中的预处理指令,用于定义宏(macro&#xf…...

Unity顶点动画(Vertex Animation):创造动态视觉效果

在Unity中,顶点动画(Vertex Animation)是一种强大的技术,它允许开发者直接在顶点级别上操作和变形网格,从而实现各种动态视觉效果。顶点动画不依赖于骨骼绑定,因此非常适合模拟布料、流体、面部表情等复杂的动画效果。本文将探讨顶…...

WSL for Windows

1、安装 超详细Windows10/Windows11 子系统(WSL2)安装Ubuntu20.04(带桌面环境)_wsl安装ubuntu20.04-CSDN博客https://blog.csdn.net/weixin_44301630/article/details/122390018 注意,安装之后首次启动 Ubuntu 时&…...

Matlab freqz 代码简单实现

相关代码打开matlab源码也可以看到,这里做了简单实现,与源码并不完全一样。 实现代码 [h2 w2] freqzfir(data); [h1 w1] freqz(data); h2h2; h12 [h1, h2];[h4 w4] freqziir(b,a, 2001,true); [h3 w3] freqz(b,a, w4, whole); h4 h4; h34 h…...

待办app哪款好?高效待办软件推荐

在快节奏的现代生活中,一款高效的待办事项管理软件对于提升工作效率和个人时间管理至关重要。面对市场上众多的待办app,哪款才是你的最佳选择呢?经过深入体验和对比,我发现敬业签这款高效待办软件是个不错的选择。 敬业签的快速记…...

【OSCP系列】OSCP靶机-BTRsys-2.1(原创)

OSCP系列靶机—BTRsys-2.1 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、主机发现 二、端口扫描 1、快速扫描 2、全端口扫描 3、服务系统探测 4、漏洞探测 80端口扫到了一些目录,有wordpress框…...

攻坚克难岁月长,自主腾飞世界强——回顾近代中国数据库的发展与飞跃

前言 最近看了《中国数据库前世今生》纪录片,感触颇深,也是一直在思考到底该用何种方式起笔来回顾这段筚路蓝缕却又充满民族自豪感的历程。大概构思了一周左右吧,我想,或许还是应该从那个计算机技术在国内刚刚萌芽的年代开始讲起…...

WEB前端12-axios基础

Vue2-axios基础 1.axios基本概念 在现代的前端开发中,处理网络请求是至关重要的一部分。Axios 是一个流行的基于 Promise 的 HTTP 客户端,它可以在浏览器和 Node.js 环境中使用。它的设计简单易用,支持并行请求、拦截器、CSRF 防护等特性&a…...

Ubuntu 防火墙设置

目录 1. 安装防火墙 2. 开启和关闭防火墙 3. 开放端口和服务规则 4. 关闭端口和删除服务规则 5. 查看防火墙状态 1. 安装防火墙 如果已经安装就忽略 # 安装ufw(Uncomplicated Firewall),这是Ubuntu上管理防火墙的一个简单工具 sudo ap…...

JL 跳转指令的理解

一般情况下,JU 和 JC 是最常见的跳转指令;但有时会用到JL 指令,JL 说起来更像是一组指令,类似C,C# 语言中的 switch case 语句,但是有个明显的不同,前者的判断条件可以是任意合理数字,后者范围…...

vue大屏展示组件库datav

主要用于构建大屏数据展示页面,具有多种类型组件可供使用。详情参考 datav官网 一、安装 npm 安装 npm install jiaminghi/data-viewyarn安装 yarn add jiaminghi/data-view二、使用 在main.js中注册为全局组件 import dataV from jiaminghi/data-view Vue.us…...

Vue.js 与 Ajax(vue-resource)的集成应用

Vue.js 与 Ajax(vue-resource)的集成应用 Vue.js 是一款流行的前端JavaScript框架,以其简洁、灵活和高效的特点而受到开发者的喜爱。在实际开发中,与后端服务的通信是不可或缺的,而Ajax技术是实现这一功能的关键。在V…...

【讲解下AI Native应用中的模型微调】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

【SOC 芯片设计 DFT 学习专栏 -- DFT DRC规则检查】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权,请联系删除 转自: 芯爵ChipLord 2024年07月10日 12:00 浙江 文章目录 概述DRC的概念Tessent DRC检查的概述时钟相关检查扫描相关检查BIST规则检查预DFT时钟规则检查 …...

深度学习:如何计算感受野

感受野(Receptive Field)是卷积神经网络(CNN)中的一个重要概念,用于描述输入图像中的一个像素在输出特征图中影响的区域大小。在设计和理解卷积神经网络时,计算感受野有助于理解网络如何对输入数据进行处理…...

【状语从句】

框架 概念,特点主将从现连接词时间条件地点结果方式让步原因目的比较省略倒装 解读 1【概念,特点】 一个完整的句子,去修饰另一个完整句子中的动词,称为状语从句;特点:从句完整,只用考虑连接词是…...

阿里云服务器安装Anaconda后无法检测到

前言 问题如标题所言,就是conda -V验证错误,不过后来发现其实就是虽然安装时,同意了写入环境变量,但是其实还没有写入,需要手动写入。下面也会重复一遍安装流程。 安装 到[Anaconda下载处](Download Now | Anaconda)查…...

在没有源程序的情况时,如何通过控制鼠标按钮控制电脑exe程序?

有时候想控制第三方软件,但是没有源程序,可以控制鼠标键盘自动操作软件达到我们想要的目的 首先建一个功能类包含窗口控制,鼠标控制和输入控制等 csharp using System; using System.Collections.Generic; using System.Linq; using System.…...

如何排查GD32 MCU复位是由哪个复位源导致的?

上期为大家讲解了GD32 MCU复位包括电源复位和系统复位,其中系统复位还包括独立看门狗复位、内核软复位、窗口看门狗复位等,在一个GD32系统中,如果莫名其妙产生了MCU复位,如何排查具体是由哪个复位源导致的呢? GD32 MC…...

【C算法】编程初学者入门训练140道(1~20)

牛客编程初学者入门训练150题 BC1 实践出真知BC2 我是大VBC3 有容乃大BC6 小飞机BC7 缩短二进制BC8 十六进制转十进制BC9 printf的返回值BC10 成绩输入输出BC11 学生基本信息输入输出BC12 字符圣诞数BC13 ASCII 码BC14 出生日期输入输出BC15 按照格式输入并交换输出BC16 字符转…...

消息队列-rabbitmq(生产者.消费者. 消息.可靠性)

生产者者的可靠性 为了保证我们生产者在发送消息的时候消息不丢失,我们需要保证发送者的可靠性 1.生产者重试 假如发送消息的时候消息丢失 ,我们可以使用发送者 重试机制,尝试重新发送消息 实现该机制非常简单,只需要在yml文…...

《InheriBT行为树》For Unity

InheriBT: Unity Editor中的行为树编辑框架 行为树(Behavior Tree)是一种广泛应用于人工智能(AI)领域的决策模型,特别是在游戏开发中。行为树通过分层结构和节点的组合,实现了复杂行为的简洁表达。然而&am…...

黑马头条Day11- 实时计算热点文章、KafkaStream

一、今日内容 1. 定时计算与实时计算 2. 今日内容 KafkaStream 什么是流式计算KafkaStream概述KafkaStream入门案例SpringBoot集成KafkaStream 实时计算 用户行为发送消息KafkaStream聚合处理消息更新文章行为数量替换热点文章数据 二、实时流式计算 1. 概念 一般流式计…...

pnpm 设置国内源

pnpm config set registry https://registry.npmmirror.com/...

链表分割 C语言

链表分割_牛客题霸_牛客网 (nowcoder.com) ( 点击前面链接即可查看题目) /* struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {} };*/ #include <cstddef> class Partition { public:ListNode* partition(ListNode* pHea…...

python编程,设计一个详细的软件 与SADS 相似

软件功能模块&#xff1a; 用户界面模块&#xff08;UI Module&#xff09; 项目管理界面模型构建界面分析和设计界面结果展示和报告生成界面 数据库模块&#xff08;Database Module&#xff09; 材料数据库结构组件数据库设计标准和规范数据库用户项目数据存储 模型构建模块&…...

META 备受期待的 Llama 3 405B 即将发布

本心、输入输出、结果 文章目录 META 备受期待的 Llama 3 405B 即将发布前言Llama 3 405B或许会彻底改变专用模型的数据质量Llama 3 405B将形成新的模型生态系统:从基础模型到专家组合Llama 3 405B有最高效 API 的竞争Llama 3 405B 基准测试META 备受期待的 Llama 3 405B 即将…...

c# Math.Round()四舍五入取整数

可以使用Math.Round()方法进行四舍五入取整数的操作。 以下是使用Math.Round()方法的实现方法&#xff1a; 将浮点数直接作为参数传递给Math.Round()方法&#xff0c;并指定要保留的小数位数。此方法将返回最接近的整数值。 double number 3.89; int roundedNumber (int)Mat…...

【C++BFS算法】886. 可能的二分法

本文涉及的点 CBFS算法 LeetCod886. 可能的二分法 给定一组 n 人&#xff08;编号为 1, 2, …, n&#xff09;&#xff0c; 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人&#xff0c;那么他们不应该属于同一组。 给定整数 n 和数组 dislikes &#xff0c;其…...

【MySQL】记录MySQL加载数据(LOAD DATA)

MySQL LOAD DATA 一、背景二、模拟生成用户信息三、加载到mysql表3.1、建表语句3.2 加载数据3.3、查看结果 一、背景 现在有个需求是将用户信息存入student.data文件中&#xff0c;在现在load到数据库中 二、模拟生成用户信息 假设用户信息&#xff0c;包含姓名&#xff0c;…...

6 网络

6 网络 1、概念2 IP地址3、套接字4、TCP协议4.1 TCP协议的基本特征4.2 建立连接4.4 终止连接4.5 编程模型 5、UDP协议5.1 UDP协议的基本特性5.2 常用函数5.3 UDP通信模型 6、域名解析 1、概念 计算机网络是实现资源共享和信息传递的计算机系统 ISO/OSI网络协议模型 TCP/IP协…...

SQL中CASE WHEN的用法

CASE WHEN的用法 1. CASE WHEN数据转换 说明&#xff1a;使用CASE WHEN我们可以将范围的数据转换成特定的值来表达; 假如&#xff1a;有一个员工表Employee(employee_id,department_id.salary,name,age)&#xff1b; 需求&#xff1a;需要根据薪资情况来评定等级&#xff1a;…...

CTF-Web习题:[GXYCTF2019]Ping Ping Ping

题目链接&#xff1a;[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机&#xff0c;得到如下页面&#xff0c;类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果&#xff0c;可以猜测php脚本命令是ping -c 4 $ip&#xff0c;暂时不知道执行的函数…...

python+vue3+onlyoffice在线文档系统实战20240725笔记,首页开发

解决遗留问题 内容区域的高度没有生效&#xff0c;会随着菜单的高度自动变化。 解决方案&#xff1a;给侧边加上一个最小高度。 首页设计 另一种设计&#xff1a; 进来以后&#xff0c;是所有的文件夹和最近的文件。 有一张表格&#xff0c;类似于Windows目录详情&…...

映美精彩色相机IFrameQueueBuffer转halcon的HObject

1.之前写了黑白IFrameQueueBuffer转halcon的HObject&#xff0c;下载这边文件写&#xff0c;彩色IFrameQueueBuffer转halcon的HObject 2.相机的部署跟黑白的一样&#xff0c;不同的是取图的格式改变 if (CamerTakeImageOne._camer_take_image_static._camer_is_exit){textbox_m…...

写代码对人的影响

1 代码是需要跑起来的&#xff0c;不能你写了一段代码运行不了 2 代码过程中有大量的bug&#xff0c;经常异常报错&#xff0c;你需要花费时间去解决 对人的影响就是解决问题的态度得到强化&#xff0c;解决问题要比坚持正确困难&#xff0c;坚持正确只是需要自然而然的努力&…...

Hive-基础介绍

简介 Apache Hive是一款数据仓库系统 功能 可以将存储在Hadoop(HDFS)中的数据映射为一张数据库表。核心是将HQL语句转化为MapRece程序&#xff0c;然后提交到Hadoop执行。 组件 用户接口&#xff1a;CLI(shell命令行)、WebGUI、Thrift Server元数据存储(Metastore)&#x…...

网站如何从0-1搭建部署蓝图介绍

第一步&#xff1a;网站规划 确定网站目的&#xff1a;明确网站的目标和预期的受众。内容规划&#xff1a;决定网站将包含哪些内容和功能。技术需求分析&#xff1a;确定所需的技术栈&#xff0c;例如前端和后端技术。 第二步&#xff1a;设计 草图和布局&#xff1a;绘制网…...

面向对象(封装)练习题 巩固一下啦!

# 设计一个类&#xff0c;用来描述手机 class Phone:# 提供私有成员变量&#xff1a;__is_5g_enable__is_5g_enable False # 5g状态# 提供私有成员方法&#xff1a;__check_5gdef __check_5g(self):if self.__is_5g_enable:print("5g开启")else:print("5g关闭…...

一些问题 7/28

get post可以public吗 在Java Servlet中&#xff0c;doGet()和doPost()方法的访问修饰符通常是public&#xff0c;因为这些方法需要被Servlet容器&#xff08;如Tomcat&#xff09;调用。 如果将这些方法声明为private或protected&#xff0c;Servlet容器将无法访问它们&…...

昇思MindSpore 应用学习-基于MobileNetv2的垃圾分类

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写&#xff08;Python语言&#xff09;&…...

matlab 常用数据类型的转换

目录 一、数据类型1、整型2、浮点型3、逻辑型4、元胞数组5、结构体 二、数据类型转换三、图像数据类型转换四、参考链接 一、数据类型 1、整型 int和unit都是整型&#xff0c;只是前一个有符号&#xff0c;后一个没有符号&#xff0c;比如在16位系统中&#xff0c;int范围是-3…...