【集合】网络知识

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注