2021-05-23

Web 网络协议

网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合,可以用来拒绝错误和非法的数据包。

一、OSI七层协议

 层级应用
7应用层处理网络应用-->DNS,HTTP,邮件服务,文件传送服务等
6表示层数据表示-->编码,加密解密,压缩
5会话层主机间通信-->建立连接,保证数据传输不发生错误
4传输层进程间的连接【Segment】-->数据的整体传输和控制
3网络层寻址和最短路径【Package】-->路由器 动态分配IP
2数据链路层介质访问(接入) 【Frame】-->解决同一网络内部寻址问题(通过唯一mac地址)
1物理层二进制传输【Bit】-->通过网络寻址

OSI七层模型 分层的意义是什么?

七层的划分是为了使网络的不同功能模块(不同层次)分担期不同的职责,从而带来一下好处:

1)减轻问题的复杂程度,一旦发生网络故障,可迅速定位故障所处的层次,便于查找和纠错;

2)在各层分别定义标准接口,使具备相同对等层的不同网络设备能实现互操作,各层之间则相对独立,一种高层协议可放在多种底层协议上运行;

3)能有效刺激网络革新,因为每次更新都可以在小范围内进行,不许对整个网络懂大手术;

4)有利于研究和教学。

二、HTTP组成

1、请求报文

1.1、请求头

主要关注字段 
Accept:/用来告知客户端可以处理的内容类型
token:null鉴权,后端返回的token信息 ​
Set-cookies前端缓存信息,session_id(鉴权)会放在这里
Content-Type:application/json;charset=utf-8前端告诉后端请求参数编码的格式

2、响应报文

2.1、响应头关注字段

Content-Type:application/json; charset=utf-8:告诉前端后端支持的编码格式 ​

Set-cookie:告诉前端如何设置缓存信息

主要关注字段 
Content-Type:application/json; charset=utf-8告诉前端后端支持的编码格式
Set-cookie告诉前端如何设置缓存信息

3、请求体

3.1、get请求

参数拼接在接口地址后面

3.2、post请求

参数放在请求体body里面

3.3、get与post区别

参数传递:get参数在url地址后面,post参数放在body里面 ​

安全性:get相对不那么安全,post相对安全 ​

请求参数长度限制(后端可修改):协议本身并没有做长度限制,是后端服务器做了限制 ​ 内存问题 ​

幂等性:get请求都是幂等,post请求不幂等(后端要做幂等处理)

3.4、HTTP 请求方法

序号方法描述
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

 

4、响应体

get与post无区别,该怎么返回就怎么返回

 

5、响应状态码

【1】1xx:服务器已经收到了请求,需要客户端继续操作

(1)100:客户端应该继续请求

(2)101:切换到更高级的协议

【2】 2xx:HTTP成功状态码
(1)200:请求成功,一般用于get,和post

(2)201:请求已经成功,并创建了新的资源

(3)202:请求已经接受,但未处理完成

(4)204:服务器处理成功,但是并未返回内容

(5)206:服务器成功处理了部分请求,get请求,常用与资源下载

【3】3xx:资源重定向

(1)301:请求资源被永久移动到新的url,返回替代该资源的url,浏览器会自动重定向到新的url,后续资源的访问将使用新的替代

(2)302:临时移除,301是永久移除,资源只是临时移动到新的url,客户端继续使用原有的url

(3)303:查看该资源的其他地址

(4)304:请求的资源未修改,当服务器返回304,此时服务器不会返回任何资源,客户端将使用本地缓存资源。

(5)305:请求的资源必须通过代理访问

(6)307:临时重定向,与302类似

【4】4xx:客户端错误

(1)401:请求需要用户的身份认证

(2)402:保留状态码,并未使用

(3)403:服务器已经收到了客户端的请求,但是拒绝执行这个请求

(4)404:服务器无法找到客户端需要访问的资源

(5)407:请求需要代理进行身份认证,与401类似

(6)408:服务器等待客户端发送的请求时间过长,超时

【5】5xx:服务端错误

(1)500:服务器内部错误,无法完成请求

(2)501:服务器不支持请求的功能,无法完成请求

(3)502:网关或者是代理服务器执行请求的时候,收到了一个无效的响应

(4)503:服务器故障,暂时无法处理客户端的请求

(5)504:网关或者是服务器代理,无法从远处服务器获取请求

(5)505:服务器不支持请求的HTTP协议的版本,无法处理请求

 

三、TCP三次握手和四次挥手

1、TCP三次握手

第一次握手

  • 1、【客户端】向【服务端】发送连接请求报文,标记 ACK=1, SYN=1,客户端序列号 seq=x,客户端进入等待状态

第二次握手

  • 1、【服务端】收到请求报文,将收到的报文缓存起来,缓存客户端 seq=x

  • 2、【服务端】向【客户端】发送确认报文,生成一个【服务端】seq=y,标记 ACK=1,SYN=1,【服务端】自己的序列号 seq=y,确认序列号 ACK_Number=x+1,发送给【客户端】

第三次握手

  • 1、【客户端】收到服务端发送的确认报文,将收到的报文存起来,缓存【服务端】seq=y

  • 2、【客户端】发送确认报文给【服务端】,标记 ACK=1,SYN=0,【客户端】自己的序列号 seq=x+1,确认序列号 ACK_Number=y+1

  • 3、【客户端】、【服务端】都会进入 ESTABLISHED (连接已建立状态)

2、TCP四次挥手

第一次挥手

  • 1、【客户端】向【服务端】发送释放连接报文,并停止发送数据,主动关闭 TCP 连接

  • 2、标记 FIN=1,【客户端序列号】seq=x,该序号等于前面已经传送过去的数据的最后一个字节的序号加 1

  • 3、这时,客户端 FIN—WAIT-1 (终止等待 1)状态,等待服务端确认

第二次挥手

  • 1、【服务端】收到释放连接报文,将收到的报文缓存起来,缓存【客户端】seq=x

  • 2、【服务端】向【客户端】发出确认释放报文,标记 ACK=1,【服务端序列号】seq=y,确认序列号 ACK_Number=a+1

  • 3、此时【服务端】进入CLOSE—WAIT(关闭等待)状态

  • 4、此时 TCP 服务器进程应该通知上层的应用进程,因为【客户端】到【服务端】这个方向的连接就释放了,这时 TCP 处于半关闭状态,即【客户端】已经没有数据要发了,但【服务端】若发送数据,【客户端】仍要接受,也就是说从【服务端】到【客户端】这个方向的连接并没有关闭,这个状态可能会持续一些时间。

第三次挥手

  • 1、【客户端】收到【服务端】确认报文,并缓存起来

  • 2、此时【客户端】进入 FIN—WAIT(终止等待 2)状态,等待【服务端】发起释放连接报文

  • 3、如果【服务端】没有数据要发送给【客户端】了,【服务端】的应用进程就会通知 TCP 释放连接

  • 4、此时【服务端】向【客户端】发送释放连接报文,标记 FIN=1,确认序列号ACK_Number=a+1(与第二次挥手的确认号一致),【服务端序号】seq=z+1(z为半关闭状态发送的数据的最后一个字节的序号)

  • 5、此时【服务端】进入最后确认状态,等待【客户端】确认

第四次挥手

  • 1、【客户端】收到【服务端】释放连接请求,必须发出确认

  • 2、【客户端】向【服务端】发送确认报文,标记 ACK=1,确认号序列号ACK_Numbe=z+1+1,【客户端序号】seq=x+1(x 为第一次挥手的 seq)

  • 3、此时【客户端】进入等待状态,必须经过时间等待计时器设置的时间 2 倍 MSL(报文最大生存时间)后,【客户端】才进入 CLOSED 状态,MSL 叫做最长报文寿命,RFC 建议设为 2 分钟,实际应用中是 30 秒。在这 2 倍 MSL 期间【客户端】进入 TIME—WAIT 状态后,要经过 4 分钟才能进入到 CLOSED 状态。

  • 4、【服务端】只要收到了【客户端】的确认后,就进入了 CLOSED 状态

  • 5、当【客户端】和【服务端】都进入 CLOSED 状态后,连接就完全释放了

3、为什么握手三次,挥手四次

1)TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。

2)TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"握手"传输的。

4、理解

  1. ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1
  2. FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
  3. SYN:在建立连接时使用,用来同步序号。
  • 当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;

  • 当 SYN=1,ACK=1 时,表示对方同意建立连接。

  • SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值