TCP 三次握手、TCP 四次挥手

三次握手可以两次吗
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。在 S ACK 的时候,C 可能已经关闭无法接受信息,导致网络资源浪费。
四次挥手可以三次吗
当服务端收到客户端的 SYN 连接请求报文后,可以直接发送 SYN+ACK 报文。其中 ACK 报文是用来应答的,SYN 报文是用来同步的。但是关闭连接时,当服务端收到 FIN 报文时,很可能并不会立即关闭,所以只能先回复一个 ACK 报文。只有等到服务端所有的报文都发送完了,才能发送 FIN 报文,因此不能一起发送。所以需要四次挥手。
HTTP 报文组成部分
请求报文:请求行、请求头、空行、请求体
响应报文:状态行、响应头、空行、响应体
HTTP/2 特性
减少传输数据量:通过二进制传输 和 Header 压缩实现
多路复用:使用同一个 TCP 连接来传输一个域名下的所有请求,请求还可以有优先级
服务端推送:能够在客户端发送第一个请求到服务端时,提前把一部分内容推送给客户端,放入缓存当中,这可以避免客户端请求顺序带来的并行度不高,从而导致的性能问题。
丢包重传会导致所有请求阻塞,这种情况下性能反而不如 HTTP/1。基于 QUIC 的 HTTP/3 可以彻底解决 TCP 的队头阻塞问题
HTTPS 的工作原理
输入 HTTPS 网址,连接 443 端口,发送一个密文族,包括浏览器所支持的加密算法清单
服务器端选择加密算法,传送证书给客户端
客户端解析证书,验证证书的颁发机构和过期时间,如果证书没问题,则生成一个随机值,用公钥对该随机值加密,发送给服务端
服务端用私钥解密,得到随机值。至此,非对称加密过程结束,实现了身份认证和密钥协商。
服务器端用随机值加密后传输信息给客户端
客户端可以用之前生成的随机值还原出原文。至此,一个对称加密的过程结束,用于服务器端传送给客户端数据。
因为非对称加密的性能很差,所以传输的时候用对称加密