Linux网络编程系列TCP状态分析

TCP三路握手(SYN、ACK):


TCP终止连接(四次握手,2个FIN、2个ACK):


TCP的TIME_WAIT状态:

Who-主动关闭方,When-接收到被动端的FIN,Why-实现终止TCP全双工连接的可靠性(可能需要重发ACK)/允许老的重复分节在网络中消失,How Long-2MSL(1m-4m)

避免TIME_WAIT过多的办法:修改/etc/sysctl.conf后,执行/sbin/sysctl -p生效

net.ipv4.tcp_tw_reuse = 1   //允许将TIME_WAIT sockets重新用于新的tcp连接;默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1 //开启TCP连接中TIME_WAIT sockets的快速回收;默认为0,表示关闭
net.ipv4.tcp_syncookies = 1 //表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_max_tw_buckets = 5000 //系统同时保持TIME_WAIT sockets的最大数,默认为18w
net.ipv4.tcp_fin_timeout = 30 //主动关闭方处于FIN_WAIT_2的时间

TCP的CLOSE_WAIT状态:

who-被动关闭方,when-被动端收到FIN1到发送FIN2之间(被动关闭端调用close()发送FIN2)

TCP状态切换图:


可以参考:tcp的那些事儿(上)http://coolshell.cn/articles/11564.html

原文地址:https://www.cnblogs.com/whuqin/p/4982013.html