关于 Request Header Connection:keep-alive
-
关于 Connection 字段理解:
参考 MDN:
1)Connection: developer.mozilla.org/en-US/docs/…
2)Keep-Alive: developer.mozilla.org/en-US/docs/…Connection 头(header)决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。
timeout:指定了一个空闲连接需要保持打开状态的最小时长(以秒为单位
max:在连接关闭之前,在此连接可以发送的请求的最大值。Connection: keep-alive Keep-Alive: timeout=5, max=1000在 HTTP/1.1 协议中,默认开发 keep-alive,除非显示的关闭它
Connection: close及通常我们所说的开启一个长连接;
-
深挖一下这些设置背后的含义: HTTP 协议不存在长链接,这个设置是针对 TCP 连接复用;多次 HTTP 之间重用同一个 TCP 连接,从而减少创建/关闭多个 TCP 连接的开销(包括响应时间、CPU 资源、减少拥堵等);
位码即 tcp 标志位,有 6 种标示:
- SYN(synchronous 建立联机);
- ACK(acknowledgement 确认)
- PSH(push 传送)
- FIN(finish 结束)
- RST(reset 重置)
- URG(urgent 紧急)
TCP 连接建立:三次握手,确认双方序列号。(需要同步)
1) 客户端发送建立连接信号,同时附带序列号:SYN=1, seq=x; 2)服务端接受后,确认连接信号,同时附带服务端序列号:SYN=1,ACK=1,ack=x+1,seq=y; 3)客户端收到服务端确定连接信号和序列号后,检查ack 值是否正确;若正确,则发送确认信息,ACK=1,ack=y+1;(服务端收到后验证,正确就直接建立联系。所以也就不再需要后续回应了)TCP 结束连接:四次握手
1)客户端发送结束连接,设置序列号:FIN=1, seq=x;
2) 服务端接受到信息后,进行确认答复: ACK=1,ack=x+1;
3) 服务端发送结束信息,设置序列号:FIN=1, seq=y
4) 客户端接受到信息后,进行确认答复:ACK=1, seq=y+1要说这两种方式,说明无论是连接的建立和结束都是消耗; 所以,可以的情况下,尽可能的复用连接;
-
从 TCP 连接到传输层 TCP 协议-及进程间的逻辑通信协议,‘端对端’通信协议。 TCP 协议和 UDP 协议都是传输层协议。
作用/目的: 为网络用户的分布式应用进程,提供可靠/不可靠的数据传输,实现不同主机上进程的交付; 功能: 1)寻址:在不同主机中才找到应用进程的地址; 2)分段/重组:承上启下,对来自应用层的数据报文进行分段,再想下传输;对于来自网络层的数据分组,重组为报文段向上传输; 3)多路复用/多路分解: ‘多路分解’:及把网络中一个主机可能收到的不同主机的信息交付给正确的应用进程; ‘多路复用’:从源主机多个应用上收集到的信息,处理后统一通过网络层传输; (除了传输层,物理层也有多路复用的概念。应用层 HTTP2.0 协议也实现了多路复用) 4)传输层连接管理:如建立连接,数据传输,监控/释放连接等; 5)差错和流量控制:差错控制很好理解,就是数据校验; ‘流量控制’则是接受端不断的把自身缓存区还能接受的数据量大小不断的通知到发送端,发送端再不断的调整数据发送速度及流控制。 通过这个缓存区还能接受的数据量大小也就是数据大小限制,用窗口大小来表达;拥塞控制: 及滑动窗口协议: 上面说到‘流量控制’是不断的将窗口大小反馈给发送端。而拥塞控制则是怎么去有效合理的设置窗口的大小;
大概思想是:先慢开始,一步步尝试增大;当碰到数据丢失(及瓶颈后),马上合理的降低窗口大小;TCP:是面向连接的,高可用的,提供流量,差错,拥塞控制的传输层协议;
UDP:是面向无连接,不可靠,没有流量控制的传输层协议;提供小型数据且速度更快的传输服务;