TCP四次挥手之FIN_WAIT_2和CLOSE_WAIT( 二 )


这个还可能跟TCP的阻塞控制有关 。
3.2 对于出现大量的
java1042root42uIPv4 8267840t0TCP iZ2zei0nwllapkwklisoncZ:38250->100.100.18.22:squid (CLOSE_WAIT)
这个阶段对于被断开的一方还没有发送FIN连接处于半连接状态 。但是如果的应用层并没有进close(这是个主动操作)不进入怎么办?

TCP四次挥手之FIN_WAIT_2和CLOSE_WAIT

文章插图
这种问题的出现举个往往是程序员的代码有问题 。出现异常没有写关闭连接 。
但是依然可以vim /etc/.conf设置超时时间,参数是net.ipv4.默认是2个小时 。
net.ipv4.tcp_keepalive_time=7200
3.3 出现大量的
主动断开端此时等待FIN处于半连接状态 。对于主动断开的一端而言,到是通过重发解决肯定回到但是到如果收不到对方的FIN怎么办?此不能重发,这个地方是通过超时解决
【TCP四次挥手之FIN_WAIT_2和CLOSE_WAIT】对于被断开的一端而言,这种勤快(2msk)和可以设置超时时间net.ipv4.
[root@iZ2zei0nwllapkwklisoncZ data]#/sbin/sysctl -a | grep timeout net.ipv4.tcp_fin_timeout = 60
其中net.ipv4.就是的超时时间可以在
vim /etc/.conf设置 。
3.4 出现(2msl)出现,以及这个状态的意义,msl是多长时间
状态,必须在此状态上停留两倍的msl时间,等待2msl时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包 。在状态 时两端的端口不能使用,要等到2msl时间结束才可继续使用 。当连接处于2msl等待阶段时任何迟到的报文段都将被丢弃 。如果出现大量的 。可以设置vim /etc/.conf来缩短msl的时间 。总之到和到达之前收发两端的端口都是不可用的 。会占用系统资源 。
一个msl在的建议是2分钟,只是建议值
The TCP specification [TCP:1] arbitrarilyassumes a value of 2 minutes for MSL
另外介绍个内核参数net.ipv4. = 5000能容纳多少个超过后清除,以防止系统拖死 。
3.5 收不到ACK如何关闭
会重发FIN,这时候分两种情况
(1)主动断开的一方还在状态中 。这时候会发过来ACK,被断开的一方收到后顺利从进入到 。
(2)主动断开的一方经过了2msl已经了这时候会返回RST 。被断开的一方收到后也会进入状态 。总之总会进入到状态不需要超时机制 。
4. 其他的内核参数
# 能容纳多少个TIME_WAIT超过后清除,以防止系统拖死net.ipv4.tcp_max_tw_buckets = 5000#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃net.ipv4.tcp_syn_retries=6#net.ipv4.tcp_synack_retries=2#表示当keepalive起用的时候,TCP发送keepalive消息的频度 。缺省是2小时net.ipv4.tcp_keepalive_time=7200net.ipv4.tcp_orphan_retries=3#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间net.ipv4.tcp_fin_timeout=60#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数 。net.ipv4.tcp_max_syn_backlog = 4096#表示开启SYN Cookies 。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭net.ipv4.tcp_syncookies = 1#表示开启重用 。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_reuse = 1#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭net.ipv4.tcp_tw_recycle = 1##减少超时前的探测次数 net.ipv4.tcp_keepalive_probes=5 ##优化网络设备接收队列 net.core.netdev_max_backlog=3000