如上图所示,计算机网络大致可以分为七层。
协议:定义了两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
HTTP协议组成:
HTTP的三种连接模型:
- short-lived connection:早期HTTP使用的连接模型,连接生命周期短暂。每次发起一个请求都会创建一个新的连接,效率较低。(HTTP/1.0默认使用短连接)
- persistent connection:保持连接去完成多次连续请求,减少了不断重新打开连接的时间。(HTTP/1.1默认使用长连接)
- HTTP pipelining:流水线技术处理多个请求。但实际上几乎没有浏览器会用此方案,因为管线无法解决队头堵塞(Head of Line Blocking),还会有潜在的安全问题,同时性能提升不高。
HTTP 2
HTTP/2中定义了许多帧类型,可以实现多路复用。HTTP/2使用帧的方式可以调整响应传输的优先级,进行头部压缩,Server Push等。
(Server Push指的是,服务器还没有收到浏览器的请求就把各种资源推送给浏览器例如:浏览器只请求. html,但是服务器把.html、.css、.js等全部发送给浏览器。这样的话,只需要一轮 HTTP 通信,浏览器就得到了全部资源,提高了性能。)
HTTP2的分帧功能可以解决HTTP层面的队头阻塞,但是==无法解决TCP的队头阻塞==,因为这个队头阻塞是TCP实现可靠传输的副作用,无法解决。 (具体来说,HTTP2分帧发送请求可以客户端让请求乱序发送,同时服务器也能乱序发送应答,这避免了前一个响应阻塞会影响后一个响应,也就是说解决了HTTP层面的队头阻塞;但是TCP引入了滑动窗口,(具体原理不详述)当序号大的数据先到达后,仍然不能被应用程序读取,需要等到序号靠前的数据到了之后,才能被应用程序读取,这也出现了队头阻塞。) 此外,HTTP2还需要3个RTT启动,会有延迟影响效率。这个延迟为TCP和TLS的固有延迟。
HTTP3
HTTP3设计了QUIC(Quick UPD Interet Connection)协议,QUIC第一次访问只需要1个RTT。后续访问时是0 RTT。
CDN
CDN即内容分发网络,是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。CDN从物理层面解决了HTTP协议之外的问题。 DNS(Domain Name System),域名系统,是域名和IP相互映射的分布式数据库,使用户可以通过域名更方便地访问互联网。 IP(Internet Protocol),网络互联协议。IP地址:用来识别网络上的设备,IP地址由网络地址和主机地址两部分组成。
- CDN的加速资源是跟域名绑定的。
- 通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP 。
- 通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
Websocket
- 有状态的持久连接
- 服务端可以主动推送消息
- 用Websocket发送消息延迟比HTTP低 Websocket是由HTTP协议升级而来。