http1.0与http2.0有何区别?
HTTP1.0 默认是短连接,HTTP 1.1 默认是长连接,HTTP 2.0 采用的多路复用

tcp 的挥手为什么是四次,而不是三次呢?
因为 TCP 是全双工通信协议,数据的发送和接收需要两次一来一回,也就是四次,来确保双方都能正确关闭连接。

tcp的三次握手建立过程,两端的状态变化。

第一次挥手:客户端表示数据发送完成了,准备关闭,你确认一下。
第二次挥手:服务端回话说 ok,我马上处理完数据,稍等。
第三次挥手:服务端表示处理完了,可以关闭了。
第四次挥手:客户端说好,进入 TIME_WAIT 状态,确保服务端关闭连接后,自己再关闭连接。
快速查看linux下各网络状态数量的bash命令
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
关于如何显著减少time_wait数量?
网络上面很多教程,什么tw复用,什么tw回环,其实有几人真正实验过呢,这里先记录一个人的博文:https://xiaodongq.github.io/2024/07/13/tcp-timewait-rcv-request/。
查询所有与time_wait有关的配置项目,实际上就三个:
# sysctl -a| grep _tw_
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_timeout = 60
网上都是教你启用 tcp_tw_reuse ,修改 tcp_fin_timeout 。还有写开启net.ipv4.tcp_tw_recycle这个开关,关于开这个有什么条件大家可以看这篇文章的案例2:https://blog.51cto.com/u_3369545/6690671。
我要说的就是经过我实测,最有效的减少time_wait的办法是修改 tcp_tw_timeout 这个参数,改 tcp_fin_timeout 并不会真的减少time_wait的时间,我已经测试过了。
sysctl -w net.ipv4.tcp_tw_timeout=10