常用网络协议
2023-03-24 08:59:32 0 举报
AI智能生成
常用应用层协议,传输层协议,以及开发中用到相关协议总结
作者其他创作
大纲/内容
应用层协议
HTTP
HTTP1.1特点
默认都是长连接
HTTP2.0特点
1.数据都是二进制传输
2.多路复用:多个请求可以复用一个TCP连接
3.请求头压缩
4.服务器可以给客户端推送消息
5.HTTP2.0对安全协议做了升级,数据传输更加安全
http1.1,2.0版本区别
请求头压缩
HTTP2.0服务器客户端都会维护一个请求头索引表;对于之前出现过的请求头,再次发送的时候会直接传递请求头的索引键;HTTP2.0没有请求头压缩
服务端推送
http2.0服务器可以主动给客户端推送数据;
HTTP2.0之前服务器是不能主动给客户端推送数据;
传输格式不同
Http2.0之前都是文本直接传输,文本的格式有很多种;
HTTP2.0之后内容都是转成2进制进行传输
头阻塞问题
Http1.1所有请求都是串行执行;如果前面的请求阻塞了,那么后面的请求也是跟着阻塞,这就是头阻塞问题。Http2.0多路复用也就是多个请求可以在同一个链接上并行执行,根据数据的帧就知道对应某个请求;某个任务阻塞或者是资源消耗大不会影响其他任务
安全性更高
HTTP2.0升级了很多安全协议,使数据传输更加安全
Http1.0和Http1.1区别
HTTP1.0一次http请求就需要建立一次链接,请求完成链接断开
http1.1默认的是长连接,传输层的一次连接可以做多次HTTP请求
报文数据结构
请求报文
请求行
内容
请求方法
路径
协议版本
换行符
回车符+换行符
请求头结束之后会有一空行和请求正文隔开
请求头
请求头字段名称以及对应的值(一个键值对占一行)
换行符
回车符+换行符
请求正文
相应报文
状态行
内容
协议版本
状态码
状态码描述符
换行符
回车符+换行符
响应头部
请求头字段名称以及对应的值(一个键值对占一行)
常见头部
换行符
回车符+换行符
响应正文
http协议弊端
HTTP的消息冗长繁琐
有太多的无用的请求头数据
容易遭到黑客攻击
http复用
一个客户端的多个Http请求复用一个tcp连接
与Tcp复用的区别:tcp复用是多个客户端的请求复用一个tcp连接:http复用是一个客户端的多个http请求复用一个tcp连接;
http内容缓存
把热点图片,静态页面等数据缓存在负载均衡服务器上;
Http压缩
客户端服务端都支持压缩,服务端把数据压缩,再发送给客户端,客户端再解压;
优点:减少了数据包在网络传输的大小
注意事项:一般情况下都是使用负载均衡服务器来做数据的压缩处理,减少web服务器压力;
Http获取数据方式
轮询polling
特点:客户端定时给服务器发送请求,不管是否有数据,都会立即相应
缺点:会浪费大量的请求资源,而获取不到数据
长轮询 long polling
特点:客户端给服务器发送HTTP请求,直到服务端有数据才会相应
HTTP重要头信息
HTTP请求头
Connection:keep-alive
标记请求方式为长连接
Upgrade-lnsecure-Requests
升级为https请求
Content-Length
表示请求消息正文的长度
Accept-Charset
浏览器可接受的字符集
HTTP响应头
Allow
允许的请求方法
Content-Encoding
文档的编码(Encode)方法
Content-Length
表示内容长度
HTTP请求方式
种类
GET
向特定的资源发出请求
PSOT
向指定资源提交数据进行处理请求
DELETE
请求服务器删除Request-URL所标识的资源
PUT
向指定资源位置上传其最新内容
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回
OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法
TARCE
回显服务器收到的请求,主要用于测试或诊断
post/get区别
从语义角度说get请求获取数据;post请求是提交数据
get请求回退的时候无害,也就是再获取一次数据;post请求就会重新提交一次表单
get请求会被浏览器主动缓存;post请求不会被主动缓存;
get请求只能进行URL编码;post请求支持多种编码方式
get请求的请求参数有长度限制;post请求参数没有长度限制;
get请求相对post请求来说不安全,get请求把请求参数拼接在请求路径中;post请求是把参数request body 里面;
get请求,post请求都有各自特定的请求头和响应头
HTTPS
SSL
概述
SSL协议是web浏览器与web服务器之间进行信息交换的协议
SSL协议特点
保密:在握手协议中定义了会话密钥后,所有的消息都被加密。
鉴别:可选的客户端认证,和强制的服务器端认证。
完整性:传送的消息包括消息完整性检查(使用MAC)。
TSL
在SSL基础之上做了优化,弥补了安全漏洞;
工作流程
1.客户端请求建立SSL连接,把自己支持的加密方式发送给服务器
2.网站把自己的公钥和证书发送给客户端
3.客户端把检查证书是否合法;
4.客户端随机生成一个数字作为之后数据交互的密钥;
5.用服务器发送过来的公钥加密生成的密钥,并发送给服务器
6.服务器用客户端生成发送过去的密钥加密发送内容;
7.客户端收到数据类容,然后用生成的密钥解密
HTTPS工程概述
1.用非对称的方式加密数据传输的密钥
2.用对称加密的方式加密传输的数据
SSL加速器
负载均衡服务器上SSL加速芯片专门来处理SSL加密信息;节省了大量的服务器资源
WebSocket
websocket特点
1.只需要一次握手就可以建立持久化的通信
2.客户端和服务器完成连接之后;数据传输不需要再经过中间的代理服务器
3.服务器可以主动给客户端推送数据
推送数据实现方式,回调客户端
webSocket协议使用
利用HTTP建立连接
请求头设置
Upgrade: websocket
告诉服务器应用层服务器换成了websocket协议
Connection: Upgrade
告诉中间代理服务器,建立连接之后,数据传输不需要在经过代理服务器,直接发送给客户端
websocket+http协议关系
1.同属于应用层协议;都是基于tcp,udp传输协议
websocket协议建立连接和断开连接的时候都是依赖于HTTP协议;中间的数据传输与HTTP协议已经没有关系;
Http,tcp,Socket关系
Http和tcp关系
TCP是传输层协议,HTTP是应用层协议;应用层协议是需要依赖传输层协议传输数据
tcp和Socket关系
socket通信是传输层协议的一种实现;
socket通信的时候可以设置参数
传输层协议是TCP/UDP协议
通信的同步异步
同步
客户端发送请求只会必须等到服务器响应才能发送下一个请求
异步
客户端发送请求,比不等到响应,就可以发送下一个请求
数据读写阻塞非阻塞
阻塞
客户端发送请求,直到服务端有数据才会返回,否则就会一直阻塞在网路读取
非阻塞
客户端发送请求,即使得不到结果,也哦度会都直接返回;
Http和socket关系
socket连接是传输层协议的一种实现;HTTP协议是需要建立在传输层实现之上。
传输协议
udp相对于TCP的优势
1.传输协议简单;
2.传输速度快;
3.网络拥塞少;
tcp/udp区别
1.TCP传输需要建立稳定的连接,消耗系统资源多;udp不需要简历稳定连接,消耗系统资源少
2.TCP数据传输可靠,避免数据丢失,数据重复问题;udp是尽最大努力交付,不能避免数据乱序丢失
3.UDP更适合做高速传输和实时性强的通信;UDP传输速度大于TCP传输
4.TCP只能是一对一通信;UDP可以是一对一,多对一,一对多通信
tcp保证消息可靠性
防丢失:
1.数据包会被拆分成合适大小的数据块发送
3.消息接收方有消息接收确认机制
2.发送超时,发送丢失会重新发送
防阻塞
1.拥塞机制:减少数据量的发送
2.滑动窗口流量控制,接收方来不及接收数据,会让发送方降低发送的速度
3.停止等待协议:发送方发送完一组数据之后,会停下来等到接收方确认消息再发送
防篡改
1.校验和,确认数据在传输过程中没有被篡改
确保消息顺序性
1.发送方发送消息会有一个包的编号,通过包的编号排序,确保消息顺序性
tcp粘包/拆包
粘包拆包原因概述:
TCP协议数据传输没有消息保护边界;UDP是由消息边界保护,所以TCP会存在粘包,拆包问题
粘包
粘包原因
每次数据的发送都必须先发送到固定大小的缓冲池,如果发送的消息大小小于缓冲池大小,那么就会是多条消息集中一起直到缓冲池满了,才发送出去,这样就是一次数据传输发送了多条消息,就是粘包了
发送端粘包
接收方就必须要要学会怎么拆包才能获取到目标数据
拆包
拆包原因
每次数据的发送都必须先发送到固定大小的缓冲池,如果数据包大于缓冲池大小,那么数据包就会被拆分成多个,分词发送,这样就会造成拆包
发送端拆包
接受方就必须要知道怎么粘包来获取一个完整的数据
粘包拆包解决方式
解决思路:通过应用层协议的设置解决
具体解决方式
1.固定每次发送数据包的大小,客户端每次只按照长度读取;
2.设置消息边界,在消息末尾设置特殊标记字符,表示消息结束;
把消息拆成消息头和消息体,在消息头里面设置消息的长度大小
tcp三次握手/四次挥手
三次握手
1.客户端先发送Tcp的 syn (synchronize 标示)的数据包 已经一个初始化seq 序列号 给 服务端;
2.服务端接受到了 syn (synchronize) 数据包 和序列号数据包后,会给客户端把刚刚发送过来的syn(synchronize 同步) 标示的数据包,以及ack(acknowledement回函) 数据包,确认号 seq+1 ,自己初始化的seq 序列号 这些数据发送给客户端。
3.客户端收到所有的数据之后,把客户端发送过来的 ack acknowledement(回函) 数据包 ;服务端发送给客户端的回函 作为序列号 ;服务端发送给客户端的序列号 + 作为回函 发送给客户端
四次挥手
挥手步骤
1.客户端给 服务端发送 Fin (finish结束) 标示 的数据, 以及一个seq序列号数据发送给服务端;此时客户端是 Fin-wait -1 状态
2.服务端接收 到数据后, 给客户端发送,ACK(回函,Fin 的数据作为ack的数据),以及回函号 = seq+1,以及自身的 seq服务端回去通知应用进程,服务端的状态编程 close-wait状态;在这个中间,服务器如果还有一些数据没有发送给客户端,服务器还是可以给客户端发送数据的。
3.服务端没有数据要发送给客户端的时候,服务端会发出, Fin ,ACK 数据, ack 的编号为之前发过的编号,以及一个序列号给客户端,此时客户端状态编程 Fin-wait -2 状态;
4.客户端收到服务端发送的信息之后,会回复 服务员, ACK= 服务端发送的ACK数据,序列号为 服务端的 ack 编号,以及自己的一个序列号;此时,客户端还会延迟 一个两倍 的报文寿命时间,再结束,服务端收到了数据后,再会结束;
为啥需要四次
保证数据的传输的完整性
tcp连接复用
概述
客户端的多个http请求的数据传输是建立在通过一个tcp连接上
实现方式
一个客户端和代理服务器连接,代理服务器再去请求真实服务器;此时代理服务器会和真实服务器建立长连接,其他客户端发送到代理服务器的请求,直接复用这个长连接和真实服务器数据交互;
tcp缓冲
解决的问题:后端服务器网速与客户端网速不匹配,造成服务端资源浪费。客户端网速慢,后端网速快,客户端的慢网速请求,容易拖垮后端服务器;
把客户端的tcp请求全部缓冲在负载均衡服务器里面;将客户端与服务器的一个tcp连接变成了两个tcp连接,分别来适应客户端,服务端的不同的网速;
tcp冷热连接
冷连接
每次Http请求,都是先建立tcp连接,用完就断开连接;下次请求再建立连接;这样一个tcp连接只是为一个http请求服务,不能复用,就是冷连接;
热连接
多个http请求复用一个tcp连接,这就是热连接;Http复用,tcp复用的tcp连接都是热连接;
tcp长连接短连接
短连接
服务器和客户端之间完成一次请求操作客户端或者服务器都可以断开TCP连接
优点
存在连接都是有用连接,不需要额外的控制手段
缺点
需要频繁的建立连接,销毁连接
长连接
服务器和客户端之间完成一次请求之后不会主动断开连接,之后的读写操作都可以复用这个连接
长连接保活
服务器会提供报货功能,当客户端已经消失且连接没有断开,服务端会保留一个半连接,永远等待客户端的数据。
优点
避免频繁的建立连接,断开连接,造成性能好时间的消耗
缺点
建立过多的长连接对服务器的资源也是一种消耗,长连接越多,服务器资源消耗也越大;
协议常见问题
1.建立TCP连接后是否会在一个 HTTP 请求完成后断开?
http1.1之后一个TCP链接可以复用,发送多个http请求
HTTP1.1之前是一个http请求需要对应一个TCP链接
2.一个 TCP 连接可以对应几个 HTTP 请求?
HTTP1.1之前是一个TCP对应一个HTTP;HTTP1.1之后默认是长连接,一个TCP可以用多个HTTP请求
3.一个 TCP 连接中多个HTTP 请求发送是否可以一起发送?
HTTP2.0一个Tcp连接可以处理多个请求,多路复用且不阻塞;HTTP1.1也可以,请求都是线性去执行的,会存在头阻塞问题;
4.HTTP/1.1 时代,浏览器是如何提高页面加载效率的?
1.使用长连接
2.一个页面建立多个连接
5.为什么有的时候刷新页面不需要重新建立 SSL 连接
因为TCP可以是不断开的,所以就不需要重新建立SSL连接
6.浏览器对同一 Host 建立 TCP 连接到数量有没有限制?
谷歌浏览器默认一个host最多建立6个TCP连接;
可以建立多个连接,不同的浏览器有不同的最大限制个数;
其他协议
2c协议
AMQP协议
ZAB协议
概述
ZAB协议是paxos协议的简化版本
实现的功能
确保已经在leader服务器上提交的失误最终被所有的服务器提交
确保再leader重启之后继续同步之前没有完成的数据
实现了leader选举
实现了在最快速度同步到半数节点,并会尽快的把数据同步到所有节点
子主题
0 条评论
下一页