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