计算机网络(7)----应用层

目录

一.应用层的基本概念

1.应用层的基本概述

2.网络应用模型

(1)客户/服务器模型

(2)P2P模型

二.应用程序相关

1.DNS系统

(1)域名与域名服务器

(2)域名解析过程(递归查询与迭代查询)

2.文件传输协议FTP

(1)FTP服务器和用户端

(2)FTP工作原理

•主动方式

•被动方式

(3)FTP的传输模式(了解)

3.电子邮件

(1)电子邮件包含的信息

(2)电子邮件系统的组成结构

(3)简单邮件传送协议SMTP

(4)邮局协议POP3

(5)基于万维网的电子邮件

4.万维网和HTTP协议

(1)万维网

(2)超文本传输协议HTTP


一.应用层的基本概念

1.应用层的基本概述

应用层对应用程序的通信提供服务。在应用层的协议需要规定:

1.应用进程交换的报文类型,请求还是响应?

2.各种报文类型的语法,如报文中的各个字段及其详细描述。

3.字段的语义,即包含在字段中的信息的含义。

4.进程何时、如何发送报文,以及对报文进行响应的规则。

在这些协议的基础上,应用层需要实现以下功能:

1.文件传输、访问和管理

2.电子邮件

3.虚拟终端(通常用于服务器管理、远程登录等场景,能够方便地远程控制计算机而无需物理接入)

4.查询服务和远程作业登录

2.网络应用模型

应用层最长用的网络应用模型分别为客户/服务器(Client/Server)模型以及P2P(Peer-to-peer)模型。

(1)客户/服务器模型

服务器是提供计算服务的设备。

1.永久提供服务

2.具有永久性的访问地址/域名

客户机是请求计算服务的主机。

1.与服务器通信,使用服务器提供的服务

2.间歇性接入网络

3.可能使用动态IP地址

4.不与其他客户机直接通信(主机发送的数据需要通过服务器再转发给另外一台主机)

使用客户/服务器的相关应用:Web,文件传输FTP,远程登录,电子邮件

(2)P2P模型

1.在P2P模型中不存在永远在线的服务器,只有主机,每个主机既可以提供服务,也可以请求服务(相当于每台主机既是客户机也是服务器)。

2.任意端系统/节点之间可以直接通讯。

3.节点间歇性接入网络。

4.节点可能改变IP地址。

5.可扩展性好:P2P系统具有自管理的特点,节点之间可以动态地加入或离开网络,系统可以自适应地调整网络拓扑结构和资源分配。这种自管理性使得系统在规模扩大时更容易维护和管理。

6.网络健壮性强: P2P系统没有单点故障,节点之间可以直接通信和共享资源,不依赖于中心服务器(节点之间是对等的关系)。即使某些节点离线或发生故障,其他节点仍然可以继续工作,保持系统的可用性和正常运行。

使用P2P模型的相关应用:文件共享、区块链、内容分发网络、即时通讯和视频流媒体等。

二.应用程序相关

1.DNS系统
(1)域名与域名服务器

发送方主机如果要发送数据给特定主机就需要知道这一主机的IP地址,同理如果某人要访问一个网站,也需要通过IP地址进行访问,但是IP地址较为复杂,通过IP地址寻找网站很困难,所以出现了"域名"

域名:

http://www.fuyeor.com

https://www.baidu.com/

•域名中的字符只能是A-z、0-9、及“-”。

•每个点分割开的字符称为一个标号,每个标号不能超过63个字符,但是为了记忆方便最好不要超过12个字符。

•域名标号的级别高低是自左向右由低到高,最高级的标号被称为顶级域名,其次为二级域名

•除了顶级域名,二级域名,三级域名....之外,还有一个根域名,根域名的表示其实是com后的一个“.”,即www.cskaoyan.com.

•顶级域名包括三种类型:

国家顶级域名:cn,us,uk

通用顶级域名:com(企业域名),net(提供互联网服务机构),org(非营利性组织),gov(政府),int(国际组织),aero(航空),museum(博物馆),travel(路由)
基础结构域名/反向域名:arpa(反向解析,从IP地址到域名

•二级域名包括两种类型:

类别域名:ac(科研机构),com(企业),edu(教育机构),gov(政府机构),mil(中国国防机构),net(提供互联网服务机构,org(非盈利性组织)

行政区域名:用于我国各省、自治区、直辖市 bj(北京),js(江苏)

自己注册的域名:cctv,cskaoyan

注:二级域名与顶级域名有部分相同,但是我们可以用国家顶级域名加以区分,例如com.cn,就是中国的某企业。

•在二级域名下可以注册三级域名,例如pku.edu.cn中的pku就是北大申请的三级域名。

www.pku.edu.cn中的www就是第四级域名,常见的四级域名还有

mail(提供邮件有关的服务器对应的域名)        ftp(提供文件传输功能的服务器对应的域名)

每个域名对应一个IP地址DNS服务器将用户输入的域名映射到相应的IP地址,使得用户可以通过域名来访问特定的网络资源,而无需记住复杂的IP地址。

DNS服务器有多种类型:

根域名服务器:根域名服务器是最高层次的域名服务器,也是最重要的域名服务器,他知道每一个顶级域名服务器以及其对应的IP地址。
•假设某台主机要访问一个网站(www.cskaoyan.com),那么这个主机会发给本地域名服务器一个DNS查询请求,试图寻找这个域名对应的IP地址,但是由于这个主机是第一次访问这个网站,本地域名服务器不知道域名对应IP地址,就会向根域名服务器请求帮助

•根域名服务器知道的是顶级域名服务器以及对应的IP地址,他会根据域名www.cskaoyan.com,将com这个顶级域名服务器对应的IP地址告诉本地域名服务器(迭代),或者他会继续往下查询,从顶级域名服务器---->权限域名服务器进行更加详细的查询,直到查询到这个网站对应的IP地址,再返回给本地域名服务器(递归)。这是两种查询的方法,下面会有详细地讲解。

在因特网中有13个不同IP地址地根域名服务器,分别是a.rootserevers.net......m.rootserevers.net

这些域名服务器并不是仅仅由13台主机构成的,而是很多台主机共用一个域名。

顶级域名服务器

负责管理该顶级域名服务器注册的所有二级域名。也就是顶级域名知道他分支的权限域名服务器对应的IP地址。

权限域名服务器

负责一个区的域名服务器。

如上图所示,abc.com是一个公司注册的域名,如果公司规模变大了,并且扩展出新的区y.abc.com,那么abc.com与y.abc.com是同等的关系,他们都是域名服务下的一个分支。一个分支就是一个域,一个域中又可以分区,这里的abc.com与y.abc.com就是分区的结果。

一个分区对应一个权限域名服务器

虽然这两个域名服务器一个只有二级域名,一个有三级域名,但是他们在权限域名服务器中是平等的关系,对应的是两台权限域名服务器。

本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文就发给本地域名服务器。这种类型的服务器离主机比较近,一般不超过几个路由器的距离。若一台主机要查询的另一台主机和自己属于同样的ISP(因特网服务提供商),那么本地域名服务器就能立刻将其域名转化为IP地址,而不需要询问其他服务器了。

注:域名服务器的层次结构只有根域名服务器,顶级域名服务器和权限域名服务器,没有本地域名服务器。

(2)域名解析过程(递归查询与迭代查询)

在域名解析的最开始,主机需要向本地域名服务器发送域名解析请求,这样的过程使用的是递归查询

递归查询就是当本地域名服务器查询不到域名对应的IP地址,就会请求根域名服务器,根域名服务器只能解析顶级域名,找到对应的顶级域名服务器后,顶级域名服务器依旧不能解析域名就继续请求权限域名服务器。

权限域名服务器找到域名对应的IP地址后,IP地址会按照权限域名服务器--->顶级域名服务器--->根域名服务器--->本地域名服务器--->主机的路线返回给主机。

迭代查询就是本地域名服务器,查询不到域名对应的IP地址,就会请求根域名服务器,根域名服务器只能解析顶级域名,将对应顶级域名服务器的IP地址再返回给本地域名服务器,本地域名服务器继续寻找相应的顶级域名服务器,如果顶级域名服务器仍不能解析出网站对应的IP地址,就会再将对应的权限域名服务器的IP地址给本地域名服务器,本地域名服务器再找权限域名服务器解析地址,最后权限域名服务器会将解析的IP地址返回给本地域名服务器,本地域名服务器再将IP地址返回给主机。

可以看到无论是迭代查询还是递归查询,都需要经过很多次的DNS查询,为了提高DNS查询的效率,引入了“高速缓存”

高速缓存可以用来存放最近查过的域名,以及从哪里获得域名信息的记录,例如在迭代查询中,域名以及IP地址的映射关系会存放在本地域名服务器中,若再次访问同一个网站,就会先搜索本地域名服务器的高速缓存,如果有对应的映射关系,就会直接把域名对应的IP地址返回给主机。

若高速缓存中没有该域名对应的IP地址,但是有相应的顶级域名服务器的IP地址,那么本地域名服务器就不需要向根域名服务器发送请求了,直接找相应的顶级域名服务器即可。

为了保证高速缓存的内容正确,高速缓存需要定期更新,也就是会为每一项内容设置一个定时器,并且处理超过合理时间的项。

不仅本地域名服务器中有高速缓存,主机中也有,许多主机会在开机时从本地域名服务器中下载域名和对应IP地址的数据库放到本机的高速缓存中,所以要访问一个网站,最先看的应该是主机的高速缓存,如果没有,再查看本地域名服务器的高速缓存。

所以使用高速缓存可以减轻域名服务器的负荷,同时使得DNS服务器查询请求和回答报文的次数减少,提高了域名解析的效率。

2.文件传输协议FTP

文件传送协议有很多,比较主要的就是文件传送协议FTP(File Transfer Protocol),以及简单文件传送协议TFTP(Trivial File Transfer Protocol)。

TFTP是一种用于在客户机和服务器之间进行不复杂、开销不大的文件传输的协议。TFTP基于UDP协议进行文件传输,使用端口号69。TFTP没有复杂的交互存取接口和认证控制,适用于不需要复杂交互的环境。例如将某个程序或文件同时下载到许多机器就会经常使用TFTP

这里重点讲FTP:

FTP拥有提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。上传和下载就是FTP最主要的功能。

(1)FTP服务器和用户端

FTP是基于客户/服务器(C/S)的协议。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器。连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

在主机中中下载FTP软件,就能实现FTP客户端与服务器之间的文件传送。

(2)FTP工作原理

1.客户端首先登录FTP软件,通常需要输入FTP的地址,用户名以及密码,有时也可以采用匿名登陆的方式。

匿名登陆:互连网中有很大一部分 FTP服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权。

Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous"登陆FTP服务,就可访问远程主机上公开的文件。

2.FTP使用TCP实现可靠传输。可靠传输的两端就是客户端以及FTP服务器(都可以有一个或多个),一个FTP服务器的进程可以为多个用户进程提供服务,FTP服务器的进程由两大部分组成,一个主进程以及n个从属进程。

主进程负责接收客户的请求,首先FTP服务器会打开一个熟知端口(21),等待客户端发送连接请求,连接成功后,就会启动n个从属进程,每个从属进程都可以处理单个用户请求。

如下图所示,控制进程与数据传送进程都属于从属进程,控制进程会建立一个控制连接,数据传送进程会建立一个数据连接。只要客户端与服务器端建立会话,控制连接就会始终保持打开,客户会通过控制连接将请求发送给服务器端的控制进程,控制连接相当于数据传送的准备工作,当服务器端收到这一请求后,就会创建数据传送进程,并且创建数据连接,而数据连接才用于真正的数据传输,当数据传送完毕,传送连接就会关闭。

注意:

TCP数据传送端口不一定是20,是否使用TCP 20端口建立数据连接与传输模式有关。

主动方式使用TCP 20端口
被动方式由服务器和客户端自行协商决定(端口>1024)

•主动方式

当客户进程向服务器进程发送建立连接的请求时,会寻找服务器控制进程端口,即21号端口,并且会告诉服务器自己这一进程的端口号,用于建立数据连接。

接着服务器会用自己传送数据的端口(20号端口),与客户刚刚提供的端口号建立数据传送连接,接着就可以进行数据传输了。

“主动”是因为建立连接后,服务器端会告诉客户端自己数据传送的端口是多少(20号端口),以此与客户端之间建立连接。

•被动方式

当客户进程向服务器进程发送建立连接的请求时,会寻找服务器控制进程端口,即21号端口,接下来客户端会向服务器端发送一个命令,询问服务器端用于数据传输的端口号。

服务器端就会返回给客户端一个大于1024的端口,作为被动方式下数据连接的端口号。接下来只需要等待客户端建立数据传输的连接并且发送数据了。

“被动”是因为服务器总是被动接收客户端的数据连接。

(3)FTP的传输模式(了解)

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

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

3.电子邮件
(1)电子邮件包含的信息

电子邮件包含两种信息:

信封:信封的主要信息为收件人的邮箱,例如abc@163.com,@前面的字符就是收件人在163,也就是网易下注册的用户名,163指的就是网易的邮箱服务器。
内容:内容包括首部和主体,当我们添加首部信息后,就会自动生成邮件首部

当然首部还可能有其他信息,这取决于不同的邮件系统。

主体部分就是写信的内容。

(2)电子邮件系统的组成结构

用户代理:用户代理是用户与电子邮件系统的接口,通常情况下是运行在电脑中的程序,所以用户代理又可以称为电子邮件客户端软件,常见的用户代理:Foxmail,Outlook

用户代理有以下功能:

1.撰写:为用户提供编辑信件的环境。

2.显示:用户写完的信可以显示在屏幕上,也可以看到接收的信件的内容。

3.处理:发送或接收邮件。

4.通信:利用邮件发送协议将信件发送到指定的邮件服务器,接收方利用接收邮件的协议从邮件服务器中读取邮件。

邮件服务器:需要保持不间断工作,并且有大容量的邮件信箱用于保存邮件。

邮件服务器有以下功能:

1.发送和接收邮件。这里的发送、接收和用户代理的发送、接收不同:

用户代理的发送邮件是指把邮件从客户端发送到邮件服务器,邮件服务器的发送邮件是指把邮件从发送方的邮件服务器发送到接收方的邮件服务器。接收同理。

2.向发件人报告邮件传送结果。即发出去的邮件是被成功接收,拒绝接受还是丢失了。

注:邮件服务器使用的是C/S模式。

协议:

SMTP协议(发):用在将邮件发送出去,也就是将邮件推出去的情况。从客户主机发送到用户代理使用的是SMTP协议,从发送方邮件服务器发送到接收方邮件服务器使用的也是SMTP协议。

POP3、IMAP(收):从接收方邮件服务器读取邮件的过程就可以使用这两种协议。

发送方通过用户代理将写好的邮件发送给发送方邮件服务器,邮件服务器将邮件放到邮件缓存中,当可以发送时,发送方邮件服务器会从邮件缓存中取出信件,发送给接收方的邮件服务器,这两个过程使用的都是SMTP协议。

当用户要阅读邮件时,他就会通过用户代理,并且使用POP3(或IMAP)协议,从接收方邮件服务器中读取邮件。

(3)简单邮件传送协议SMTP

SMTP建立在TCP连接之上,使用的是25号端口,采用C/S方式。SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息(14条命令(几个字母)和21种应答信息(三位数字代码+简单文字说明))。负责发送邮件的SMTP进程就是SMTP客户,负责接收邮件的进程就是SMTP服务器。

SMTP通信的三个阶段

1.连接建立

发送方将邮件发送到发送方邮件服务器(SMTP客户),发送方邮件服务器每隔一定时间就会对邮件缓存中的邮件进行扫描,如果有邮件,就使用SMTP协议,通过25号端口与接收方邮件服务器(SMTP服务器)建立连接。连接建立后,接收方邮件服务器会发送应答信息---220 Service ready,告诉发送方接受服务就绪。接下来,SMTP客户就会向SMTP服务器发送HELLO命令,并且附上发送方的主机名:

SMTP服务器若有能力接收邮件,回答"250 OK"

否则,回答“421 Service not available”

若一定时间内发送不了邮件,发送方邮件服务器就会把这一情况告诉发送方。

2.邮件发送

注:以下A代表发送方邮件服务器,B代表接收方邮件服务器

•发送方邮件服务器会发送以下命令:

这里是发送方电子邮件的地址。

•接收方邮件服务器收到命令后,会告知发送方邮件服务器是否已经准备好接收邮件,也就是做以下回应:

若准备好接收邮件就返回250 OK,如果没有准备好就返回数字+一定的英文说明。

•收到250 OK后,发送方邮件服务器会发送RCPT命令(可以有多个RCPT命令),RCPT命令是收件人的英文缩写。

•每发送一个命令接收方邮件服务器都会有信息回应,即告诉发送方邮件服务器是否有这个用户。若收件人地址正确,返回250 OK,如果地址错误,则返回550 No such user here

•发送方邮件服务器发送DATA命令,告诉接收方邮件服务器要开始传输邮件的内容了

•接收方邮件服务器回应以下内容,表示同意传输:

•发送方邮件服务器发送邮件内容,内容结尾还需附上<CR><LF>,表示传输结束。

•接收方邮件服务器收到以<CR><LF>结尾的邮件内容后,回复发送方邮件服务器250 OK,表示接收接收。

3.连接释放

邮件发完,SMTP客户发送QUIT命令,SMTP服务器返回“221”,表示同意释放TCP连接。

SMTP协议的缺点:

1.SMTP不能传送可执行文件或者其他二进制对象。

2.SMTP仅限于传送7位ASCII码,不能传送其他非英语国家的文字。

3.SMTP服务器会拒绝超过一定长度的邮件。

因此出现了通用因特网邮件扩充MIME

MIME是在SMTP协议之上进行扩充的手段,工作原理如下图所示:

MIME会将用户发送的非ASCll码转化为7位的ASCll码,进而通过SMTP协议发送。

MIME使电子邮件系统可以支持声音、图像、视频、多种国家语言等多种数据类型的传输,即使得传输内容更加丰富。

MIME最早使用于邮件系统,但是现在逐步应用于浏览器,成为互联网的一个标准。服务器会将多媒体数据类型告诉浏览器,这种通知手段就是要说明多媒体数据的MIME类型,浏览器就可以知道自己接收的信息哪些是MP3文件,MP4文件或是JPG文件,服务器就会将MIME标识符放到要传送的数据中,告诉浏览器使用哪种插件读取相关的文件。

(4)邮局协议POP3

POP3建立在TCP之上,端口号为110,采用C/S方式(客户/服务器模式),提供服务的就是接收方邮件服务器(POP3服务器),用户代理作为POP3的客户(POP3客户)

当接收方把邮件从邮件服务器读取出来后,对邮件的处理方式有两种:

1.下载并保留(在服务器中):用户读取完这一邮件后,邮件仍会保留在接收方邮件服务器中。

2.下载并删除:用户读取完这一邮件后,邮件会从接收端的邮件服务器中删除。

由于POP3功能有限,所以出现了IMAP(网际报文存取协议):

IMAP和POP3一样,是在接收方邮件服务器和用户代理之间使用的协议。IMAP协议比POP协议复杂。当用户Pc上的IMAP客户程序打开IMAP服务器的邮箱时,用户可以看到邮箱的首部(也就是可以看到是谁发来的邮件,邮件主题等等),若用户需要打开某个邮件,该邮件才上传到用户的计算机上。

IMAP可以让用户在不同的地方使用不同的计算机随时上网阅读处理邮件,还允许只读取邮件中的某一个部分(例如,可以先看正文,有WiFi的时候再下载附件)。

(5)基于万维网的电子邮件

用户通过浏览器登录邮件服务器万维网网站 就可以撰写、收发、阅读和管理电子邮件。 这种工作方式与IMAP很类似,不同的是 用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。 邮件服务器网站通常提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。

使用基于万维网的电子邮件,与用户代理相关的环节(从用户代理到发送方邮件服务器,接收方邮件服务器到用户代理)使用的是HTTP协议。从发送方邮件服务器发送到接收方邮件服务器使用的还是SMTP协议。

4.万维网和HTTP协议
(1)万维网

万维网WWW(World Wide Web)是一个大规模的、联机式的信息储藏所/资料空间(资源(文字,视频,音频)),是无数个网络站点和网页的集合。

如何定位万维网中的某个资源呢?这就需要使用统一资源定位符URL,统一资源定位符URL可以唯一标识一个资源。

URL的一般形式:

<协议>://<主机>:<端口>/<路径>

协议:常用的有http,ftp

主机:也就是域名或者IP地址

端口和路径:有时可以被省去。

例如:http://www.pku.edu.cn

注:URL不区分大小写。

用户可以通过点击超链接"(http://www.baidu.com)获取资源,这些资源通过超文本传输协议(HTTP)传送给使用者。万维网以客户/服务器方式工作,用户使用的浏览器就是万维网客户程序,万维网文档所驻留的主机运行服务器程序。HTTP是嫁接于服务器端口和浏览器端口的一种信息传输媒介。

万维网使用超文本标记语言HTML,HTML可以创建超链接(超文本链接),允许用户在不同页面之间进行导航和跳转。通过超链接,用户可以点击文本、图像或其他元素来访问其他页面或资源。

(2)超文本传输协议HTTP

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

如图所示

•用户浏览页面的方法有两种:1.输入URL        2.点击超链接

•每一个万维网的网点都会运行一个服务器进程,这一进程会不断监听TCP的80号端口,以发现是否有万维网的客户请求服务,一旦服务器监听到了用户的请求,并且建立好了TCP连接后,浏览器就会向万维网服务器发送浏览界面的请求了,即发送一个HTTP请求报文请求相关文档。

•服务器收到相关请求后,就会把请求的资源以文档的形式放入HTTP响应报文中,返回给客户端。

•最后释放TCP连接,相关的界面会在客户机上显示出来。

具体过程:
1.浏览器分析URL

2.浏览器向DNS请求解析IP地址

3.DNS解析出IP地址

4.浏览器与服务器建立TCP连接

5.浏览器发出取文件命令

6.服务器响应

7.释放TCP连接

8.浏览器显示

注:浏览器可以先只下载文本部分,若用户接下来要下载音频,视频等,就可以点击图标

只要单击一次图标,浏览器会再重复以上过程,将客户请求的文件发给服务器,服务器响应后,再将相应的文件显示在屏幕中。

HTTP协议的特点:

HTTP协议是无状态的。无状态是指协议对于事务处理没有记忆功能。缺少状态意味着假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面信息时,应答就较快。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。

但是在实际工作中,一些万维网站点常常希望能够识别用户,由此产生了Cookie

Cookie是存储在用户主机中的文本文件,记录一段时间内某用户(使用识别码识别,如“123456”)的访问记录。通过Cookie,网站可以为提供个性化服务。

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

HTTP的连接方式有两种:

非持久连接:

首先万维网客户与服务器建立TCP连接,即使用3次握手,前两次握手完成后,万维网用户就可以发送HTTP请求报文,作为最后一次握手的数据发给万维网服务器,服务器收到请求报文后,会给客户(浏览器)发送HTTP响应报文。所以非持久连接的总时间就是:

2*RTT+文档传输时间

当万维网用户还要发送请求报文时,需要再次建立TCP连接,重新进行三次握手。所以可以看出非持久连接时间消耗较长。

持久连接:

持久连接也需要经过3次握手,但是如果再次发送新的请求报文时,就不需要建立新的TCP连接了,浏览器在之前建立好的连接之上直接向服务器发送请求报文即可。

持久连接又分为流水线式连接以及非流水线式连接

以上讲到的就是非流水线式的连接:即浏览器发送一个请求后,服务器才会进行响应,浏览器收到响应后,才能继续发送下一个请求。就像数据链路层的停等协议一样。

流水线式的连接:流水线式的连接支持连续发送,例如浏览器想请求多个资源,那么请求报文就能同时发送出去,服务器收到后,就会依次返回相应的响应报文。

采用这种方式,客户访问所有的资源只需要花费大约1个RTT时间。带流水线的持久连接中服务器空等请求的时间较少,能有效提高文档下载的效率。

HTTP协议的报文结构

HTTP报文分为请求报文和响应报文,他是面向文本的,因此在报文中的每一个字段都是一些ASCIl码串。

1.开始行

报文的开始行可以用来区分是请求报文还是响应报文:

请求报文的开始行(请求行):

请求方法:表示对资源期望进行何种操作,常用的如 GET、POST

请求目标:通常是一个 URL ,表明了要操作的资源。

版本号:表示报文使用的 HTTP 协议版本。

CRLF 换行:标识请求行的结束,首部行的开始。

响应报文的开始行(状态行):

协议版本:指明了报文使用的 HTTP 协议版本
状态码:状态码是一个三位数字,用来表示处理的结果,下面列出了状态码的类别(总共5种类别,33种状态码):

常见的状态码:

202 Accepted(接受)       

301 Moved Permanently(请求的网页转移到了新的地址):如果出现了这样的状态码,那么在首部行的“首部字段”中会标识relocation表示新的地址,并且在"值"中存放新的URL

404 Not Found(表示找不到网页:可能是请求中有错误的语法)

短语(状态描述):这个是作为状态码的补充,是一段更详细的文字,帮助人们理解原因。

CRLF 换行:标识请求行的结束,首部行的开始。

2.首部行

说明浏览器、服务器和报文主体的一些信息。整个首部行结束后也会用CRLF换行来标识首部行的结束以及实体主体的开始。

3.实体主体

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

某浏览器发出的请求报文:

GET:表示请求读取URL标识的资源

index.html:URL

HTTP/1.1:版本

Host:表示要访问的资源在www.test.edu.cn这样一个域名上

Connection:Close表示非持续连接

Cookie:用户的标识为123456,出现了Cookie就表示这个用户(浏览器)曾经访问过这一资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 第一届VCTF 纳新赛 Web方向 题解WP

hackjs 题目描述&#xff1a;A baby oldjs, just warm up. 附件给源码 const express require(express) const fs require(fs) var bodyParser require(body-parser); const app express() app.use(bodyParser.urlencoded({extended: true })); app.use(bodyParser.json…

CI/CD实战-git工具使用 1

版本控制系统 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 git官网文档&#xff1a;https://git-scm.com/book/zh/v2 Git 有三种状态&#xff1a;已提交&#xff08;committed&#xff09;、已修改&#xff08;modified&#xff09; 和 已暂存&#xff08;sta…

嵌入式硬件设计(一)|利用 NodeMCU-ESP8266 开发板和继电器结合APP“点灯•blinker”制作Wi-Fi智能开关(附有关硬件详细资料)

概述 本文主要讲述利用 NodeMCU-ESP8266 开发板和继电器通过手机 APP “ 点灯 • Blinker ” 制作一款能够由手机控制的WiFi 智能开关&#xff0c;从而实现智能物联。NodeMCU 是基于 Lua 的开源固件&#xff0c;ESP8266-NodeMCU是一个开源硬件开发板&#xff0c;支持WiFi功能&a…

OpenCV4.9.0开源计算机视觉库在 Linux 中安装

返回目录&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 环境变量参考 下一篇&#xff1a;将OpenCV与gcc和CMake结合使用 引言&#xff1a; OpenCV是一个开源的计算机视觉库&#xff0c;由英特尔公司所赞助。它是一个跨…

深度学习-基于机器学习的情绪分析研究

概要 互联网技术的迅速发展使得社交平台逐渐成为热点事件中社会情感的枢纽。社会热点事件的舆论监管的其中一个重要环节就是能够准确分析民众的社会情绪。本文旨在探索可以基于文本大数据彻底分析民众对热点事件的社会情绪的模型和方法。先是从社交平台上借助文本大数据、对数据…

(一)Neo4j下载安装以及初次使用

&#xff08;一&#xff09;下载 官网地址&#xff1a;Neo4j Graph Database & AnamConnect data as its stored with Neo4j. Perform powerful, complex queries at scale and speed with our graph data platform.https://neo4j.com/ &#xff08;二&#xff09;安装并配…

ideaSSM失物招领管理系统网页模式开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea ssm 失物招领管理系统是一套完善的完整信息管理系统&#xff0c;结合SSM框架完成本系统SpringMVC spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数…

YOLOv8训练好模型后,追加轮数继续训练、或者提前终止训练,缩减训练轮数

一、前言 而且此教程适用的情况是你已经训练好了此模型&#xff0c;想继续追加一些轮数。比如训练进度是120/120&#xff0c;已经完成了&#xff0c;继续追加10轮&#xff0c;或者你原先定的是200轮&#xff0c;希望缩减到150轮&#xff0c;可以使用我说的这个方法。为什么缩减…

深度学习-2.7 机器学习目标与模型评估方法

文章目录 深度学习目标与模型评估方法1. 深度学习目标与模型评估方法2. 手动实现训练集和测试集切分3. Dataset和DataLoader基本使用方法与数据集切分函数1.Dataset和DataLoader的基本使用方法2.建模及评估过程 4. 实用函数补充 深度学习目标与模型评估方法 1. 深度学习目标与…

LeetCode 7 / 100

哈希表、双指针 哈希表两数之和字母异位词分组最长连续序列 双指针移动零盛最多水的容器三数之和接雨水 LeetCode 1.两数之和 LeetCode 49. 字母异位词分组 LeetCode 128. 最长连续序列 LeetCode [283. 移动零](https://leetcode.cn/problems/move-zeroes/?envTypestudy-plan-…

Spring Cloud Alibaba微服务从入门到进阶(五)(负载均衡-Ribbon)

负载均衡有两种形式&#xff0c;服务器端负载均衡/客户端负载均衡 1、服务器端负载均衡 因为Nginx是部署在服务器端的&#xff0c;所以用Nginx实现的负载均衡被称为服务器端负载均衡 2、客户端负载均衡 手写一个客户端侧负载均衡器 使用Ribbon实现负载均衡 Ribbon是Netflix…

sparksession对象简介

什么是sparksession对象 spark2.0之后&#xff0c;sparksession对象是spark编码的统一入口对象&#xff0c;通常我们在rdd编程时&#xff0c;需要SparkContext对象作为RDD编程入口&#xff0c;但sparksession对象既可以作为RDD编程对象入口&#xff0c;在sparkcore编程中可以通…

牛客网-SQL大厂面试题-2.平均播放进度大于60%的视频类别

题目&#xff1a;平均播放进度大于60%的视频类别 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start…

macbook删除软件只需几次点击即可彻底完成?macbook删除软件没有叉 苹果笔记本MacBook电脑怎么卸载软件? cleanmymac x怎么卸载

在MacBook的使用过程中&#xff0c;软件安装和卸载是我们经常需要进行的操作。然而&#xff0c;不少用户在尝试删除不再需要的软件时&#xff0c;常常发现这个过程既复杂又耗时。尽管MacOS提供了一些基本的macbook删除软件方法&#xff0c;但很多时候这些方法并不能彻底卸载软件…

Learn OpenGL 15 面剔除

面剔除 尝试在脑子中想象一个3D立方体&#xff0c;数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了&#xff0c;你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体&#xff0c;但你永远不能看到3个以上的面。所以我们为什么要浪费时间…

html编辑器

HTML 编辑器推荐 html可以使用记事本编辑 但是更建议使用专业的 HTML 编辑器来编辑 HTML&#xff0c;我在这里给大家推荐几款常用的编辑器&#xff1a; VS Code&#xff1a;https://code.visualstudio.com/WebStorm: https://www.jetbrains.com/webstorm/Notepad: https://no…

基于Matlab的车牌识别算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

用云服务器构建gpt和stable-diffusion大模型

用云服务器构建gpt和stable-diffusion大模型 一、前置知识二、用云端属于自己的聊天chatGLM3step1、项目配置step2、环境配置1、前置知识2、环境配置流程 step3、创建镜像1、前置知识2、创建镜像流程 step4、通过 Gradio 创建ChatGLM交互界面1、前置知识2、创建ChatGLM交互界面…

Android 面试题及答案整理,最新面试题

Android中Intent的作用及分类 Intent在Android中用作组件之间传递信息&#xff0c;它可以用于启动活动(activity)、服务(service)和发送广播(broadcast)。Intent主要分为显式Intent和隐式Intent两大类。 1、显式Intent&#xff1a; 直接指定了要启动的组件名称&#xff08;比如…

【C语言初阶(五)】数组

❣博主主页: 33的博客❣ ▶文章专栏分类: C语言从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; 目录 1. 前言2.一维数组的概念3.一维数组的创建和初始化3.1数组的创建3.2数组的初始化3.3数组的类型 4.一维数组的使用4.1数组下标4.2数组元素打印4.4数组元…