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

news2024/11/24 14:32:15

目录

一.应用层的基本概念

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.coloradmin.cn/o/1522485.html

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

相关文章

基于Java的无代码动态表单系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 动态类型模块2.2 动态文件模块2.3 动态字段模块2.4 动态值模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 动态类型表3.2.2 动态文件表3.2.3 动态字段表3.2.4 动态值表 四、系统展示五、核心代码5.1 查询档案类型5.…

农发行鱼台县支行组织开展3.15金融消费者权益保护教育宣传活动

为切实提升消费者金融素养及风险防范意识,3月15日农发行鱼台县支行组织开展以“金融消保在身边 保障权益防风险”为主题的“3.15”金融消费者权益保护教育宣传活动。 本次活动,该行重点围绕普及消费者八项基本权利、宣传金融纠纷多元化解机制、强化“三适当“原则、夯实诚信文…

sparksession对象简介

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

【LeetCode热题100】146. LRU 缓存(链表)

一.题目要求 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c…

RISC-V 编译环境搭建:riscv-gnu-toolchain 和 riscv-tools

RISC-V 编译环境搭建&#xff1a;riscv-gnu-toolchain 和 riscv-tools 编译环境搭建以及说明 操作系统&#xff1a;什么系统都可以 虚拟机&#xff1a;VMmare Workstation Pro 17.50.x (版本不限) 编译环境&#xff1a;Ubuntu 18.04.5 CPU&#xff1a;i7-8750h(虚拟机分配4核…

Vue+SpringBoot打造教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

数据结构的概念大合集04(队列)

概念大合集04 1、队列1.1 队列的定义1.2队列的顺序存储1.2.1 顺序队1.2.2 顺序队的基本运算的基本思想1.2.3 顺序队的4要素的基本思想 1.3 环形队列1.3.1 环形队列的定义1.3.1 环形队列的实现 1.4 队列的链式存储1.4.1 链队1.4.2 链队的实现方式1.4.3 链队的4要素的基本思想 1.…

inux(CentOS)/Windows-C++ 云备份项目(项目文件操作工具类设计,完成项目基本文件操作-读写-压缩-目录操作)

文章目录 1. 项目文件操作工具类设计 1. 项目文件操作工具类设计 根据前面的分析&#xff0c;这个文件类的基本属性如下&#xff1a; 文件大小信息文件最后修改时间文件最后一次访问时间&#xff0c;方便文件的热点管理文件名称&#xff0c;需要从http 请求行上的uri中获取基…

【机器学习-02】矩阵基础运算---numpy操作

在机器学习-01中&#xff0c;我们介绍了关于机器学习的一般建模流程&#xff0c;并且在基本没有数学公式和代码的情况下&#xff0c;简单介绍了关于线性回归的一般实现形式。不过这只是在初学阶段、为了不增加基础概念理解难度所采取的方法&#xff0c;但所有的技术最终都是为了…

FFmpeg转码参数说明及视频转码示例

-b : 设置音频或者视频的转码码率 -b:v 只设置视频码率 -b:a 只设置音频码率 -ab: 只设置音频码率, 默认码率大小为: 128k bit/s -g: 设置视频GOP大小,表示I帧之间的间隔,默认为12 -ar: 设置音频采样率,默认0 -ac: 设置音频通道数量 默认0 -bf: 设置连…

服务器机器学习环境搭建(包括AanConda的安装和Pytorch的安装)

服务器机器学习环境搭建 1 服务器与用户 在学校中&#xff0c;我们在学校中是以用户的身份进行访问学校的服务器的。整体框架大致如下&#xff1a; 我们与root用户共享服务器的一些资源&#xff0c;比如显卡驱动&#xff0c;Cuda以及一些其他的公共软件。 一般情况下&#…

Vue2在一个页面内动态切换菜单显示对应的路由组件

项目的需求是在一个页面内动态获取导航菜单&#xff0c;导航菜单切换的时候显示对应的路由页面&#xff0c;类似于tab切换的形式&#xff0c;切换的导航菜单和页面左侧导航菜单是同一个路由组件&#xff0c;只是放到了一个页面上&#xff0c;显示的个数不同&#xff0c;所有是动…

Docker----Dockerfile构建微服务镜像

目录 一、关键步骤 二、具体步骤 1、准备后端jar包(这里以java后端演示) 2、编写Dockerfile 3、构建镜像 4、运行镜像容器 5、测试是否成功 一、关键步骤 1、准备后端jar包(这里以java后端演示) 2、编写Dockerfile 3、构建镜像 4、运行镜像容器 5、测试是否成功 二…

C#,图论与图算法,图(Graph)的数据结构设计与源代码

因为后面即将发布的大量有关“图”的算法与源代码都需要用到下面的这些基础数据&#xff0c;为避免大家去下载&#xff0c;特意先发布于此。 一、图&#xff08;Graph&#xff09;的基础知识 图&#xff08;Graph&#xff09;是一组对象的图示&#xff0c;其中一些对象对通过链…

STM32(TIM定时器中断)

理论知识 定时器定时中断 接线图 定时器工作配置步骤 定时中断和内外时钟源选择 定时器中需要使用的函数 程序实现效果&#xff1a; void TIM_DeInit(TIM_TypeDef* TIMx); **// 恢复定时器的缺省配置**void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef*TIM…

jupyter中pip安装包会安装到别的环境。

文章目录 1. 查看jupyter当前环境和默认环境的路径和python版本2.安装包到正确的环境 如果你在 Jupyter Notebook 中使用 pip 安装包&#xff0c;它默认会将包安装到 Jupyter Notebook 所在的Python 环境。这可能会导致安装的包与你期望的环境不匹配。 1. 查看jupyter当前环境和…

RK3568平台开发系列讲解(基础篇)内核是如何发送事件到用户空间

🚀返回专栏总目录 文章目录 一、相关接口函数二、udevadm 命令三、实验沉淀、分享、成长,让自己和他人都能有所收获!😄 一、相关接口函数 kobject_uevent 是 Linux 内核中的一个函数, 用于生成和发送 uevent 事件。 它是 udev 和其他设备管理工具与内核通信的一种方式。…

mybatis源码阅读系列(二)

前言 上一篇文章mybatis源码阅读系列&#xff08;一&#xff09;介绍了mybatis和原生jdbc的区别&#xff0c;并通过代码展示了两者的运行过程和结果&#xff0c;下面让我们继续详细了解下mybatis的执行过程&#xff1b; package com.wyl.mybatis.service;import com.wyl.mybat…

给定参数c和长度为n的递增数组a(ai <= c), 对于0<=x<=y<=c, 求(x,y)的对数,满足x+y不是数组a中的元素且y-x不是a中元素

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5, …

微信小程序关闭首页广告

由于之前微信小程序默认开启了首页广告位。导致很多老人误入广告页的内容&#xff0c;所以想着怎么屏蔽广告。好家伙&#xff0c;搜索一圈&#xff0c;要么是用户版本的屏蔽广告&#xff0c;或者是以下一个模棱两可的答案&#xff0c;要开发者设置一下什么参数的&#xff0c;如…