Open soulJF999 opened 3 years ago
UDP 1.面向无连接 不需要和TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以发送了。 2.有单播、多播和广播的功能 3.UDP是面向报文的 4.不可靠性 体现在无连接上,通信都不需要建立连接 不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了 5.头部开销小,传输数据报文时是很高效的 只有8字节,相比TCP的至少二十字节要少得多,在传输数据报文时是很高效的
TCP 1.面向连接,指发送数据之前必须在两端简历连接。 2.仅支持单播传输,只能进行点对点的数据传输 3.面向字节流 4.可靠传输 对于可靠传输、判断丢包、误码靠的是TCP的段编号以及确认号 5.提供拥塞控制 6.提供全双工通信
http1.x有以下几点致命缺陷: 1.协议规定客户端对同一域的并发连接最多只能2个(浏览器实现一般是2-8个),但是现在网页平均一个页面需要加载40个资源 2.线头阻塞问题:同一个连接的请求,需要一个接一个串行发送和接收 3.基于文本协议,请求和响应的头信息非常大,并且无法压缩 4.不能控制响应优先级,必须按照请求顺序响应 5.只能单向请求,也就是客户端请求什么,服务器只能返回什么 6.明文传输--带来的不安全性:在传输数据时,所有传输的内容都是明文,客户端和服务端都无法验证对方的身份,这在一定程度上无法保证数据的安全性 7.无状态特性--带来的巨大HTTP头部
HTTP2使用了多路复用、HPACK头压缩、流+二进制帧和流优先级等技术手段解决上述问题 1.二进制传输 HTTP2传输数据量的大幅减少,主要有两个原因:以二进制方式传输和Header压缩。HTTP2采用二进制格式传输数据,而非HTTP1.x里纯文本形式的报文,二进制协议解析起来更高效。HTTP2将请求和响应数据分割为更小的帧,并且它们采用二进制编码。 HTTP2中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
2.Header压缩 在客户端和服务端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送 首部表在HTTP2的连接存续期内始终存在,由客户端和服务器共同渐进地更新; 每个新的首部键值对要么被追加到当前表的末尾,要么替换表中之前的值
3.多路复用 在HTTP2中,有了二进制分帧之后,HTTP2不再依赖TCP链接去实现多流并行了,在HTTP2中 同域名下所有通信都在单个连接上完成 单个连接可以承载任意数量的双向数据流 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
同个域名只需要占用一个TCP连接,使用一个连接并行发送多个请求和响应,这样整个页面资源的下载过程只需要一次慢启动,同时也避免了多个TCP连接竞争带宽所带来的问题 并行交错地发送多个请求/响应,请求/响应直接互不影响 在HTTP/2中,每个请求都可以带一个31bit的优先级,0表示最高优先级,数值越大优先级越低。有了这个优先级,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。
4.Server Push HTTP2还在一定程度上改变了传统的工作模式,服务器不再是完全被动地响应请求,也可以新建“流”主动向客户端发送消息
5.提高安全性