服务端端口状态解释
TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得 注意的状态有两个:CLOSE_WAIT和TIME_WAIT。
1、LISTENING 处于侦听(LISTENING)状态。
1 协议 本地地址 外部地址 状态 PID 2 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4 3 TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 632 4 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 5 TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING 692 6 TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING 872 7 TCP 0.0.0.0:1027 0.0.0.0:0 LISTENING 1084 8 TCP 0.0.0.0:1029 0.0.0.0:0 LISTENING 776 9 TCP 0.0.0.0:1036 0.0.0.0:0 LISTENING 760 10 TCP 0.0.0.0:1037 0.0.0.0:0 LISTENING 3976 11 TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 2576 12 TCP 0.0.0.0:7045 0.0.0.0:0 LISTENING 4 13 TCP 0.0.0.0:7046 0.0.0.0:0 LISTENING 4 14 TCP 0.0.0.0:7047 0.0.0.0:0 LISTENING 4 15 TCP 0.0.0.0:7048 0.0.0.0:0 LISTENING 4 16 TCP 0.0.0.0:7049 0.0.0.0:0 LISTENING 4 17 TCP 0.0.0.0:7050 0.0.0.0:0 LISTENING 4 18 TCP 0.0.0.0:7051 0.0.0.0:0 LISTENING 4 19 TCP 0.0.0.0:7070 0.0.0.0:0 LISTENING 2040 20 TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 4 21 TCP 0.0.0.0:9001 0.0.0.0:0 LISTENING 4 22 TCP 0.0.0.0:9003 0.0.0.0:0 LISTENING 4 23 TCP 0.0.0.0:9011 0.0.0.0:0 LISTENING 4 24 TCP 127.0.0.1:1314 127.0.0.1:1315 ESTABLISHED 1368 25 TCP 127.0.0.1:1315 127.0.0.1:1314 ESTABLISHED 1368 26 TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING 2576 27 TCP 127.0.0.1:1696 0.0.0.0:0 LISTENING 6324 28 TCP 127.0.0.1:1697 0.0.0.0:0 LISTENING 1676 29 TCP 127.0.0.1:4300 0.0.0.0:0 LISTENING 7216 30 TCP 127.0.0.1:4301 0.0.0.0:0 LISTENING 7216 31 TCP 127.0.0.1:5939 0.0.0.0:0 LISTENING 12280 32 TCP 127.0.0.1:5939 127.0.0.1:7454 ESTABLISHED 12280 33 TCP 127.0.0.1:7454 127.0.0.1:5939 ESTABLISHED 11816 34 TCP 127.0.0.1:27382 0.0.0.0:0 LISTENING 8224 35 TCP 192.168.0.77:139 0.0.0.0:0 LISTENING 4 36 TCP 192.168.0.77:1723 65.52.0.51:5671 ESTABLISHED 6324 37 TCP 192.168.0.77:1821 123.151.178.28:80 CLOSE_WAIT 7216 38 TCP 192.168.0.77:2992 192.168.0.163:1433 ESTABLISHED 9352 39 TCP 192.168.0.77:3094 192.168.0.163:445 ESTABLISHED 4 40 TCP 192.168.0.77:3211 192.168.0.163:1433 ESTABLISHED 9352 41 TCP 192.168.0.77:3272 183.61.38.181:80 CLOSE_WAIT 7216 42 TCP 192.168.0.77:6628 192.168.0.163:5900 ESTABLISHED 10100 43 TCP 192.168.0.77:6630 192.168.0.162:5900 ESTABLISHED 9644 44 TCP 192.168.0.77:6727 123.151.176.162:80 CLOSE_WAIT 7216 45 TCP 192.168.0.77:6731 101.201.173.115:80 ESTABLISHED 8696 46 TCP 192.168.0.77:7014 101.201.173.115:80 ESTABLISHED 12076 47 TCP 192.168.0.77:7209 101.201.173.115:80 ESTABLISHED 1408 48 TCP 192.168.0.77:7462 159.8.67.132:5938 ESTABLISHED 12280 49 TCP 192.168.0.77:8235 106.38.181.157:80 CLOSE_WAIT 7216 50 TCP 192.168.0.77:8242 124.232.163.87:5938 ESTABLISHED 12280 51 TCP 192.168.0.77:8244 78.46.49.23:80 FIN_WAIT_2 2040 52 TCP 192.168.1.1:139 0.0.0.0:0 LISTENING 4 53 TCP 192.168.189.1:139 0.0.0.0:0 LISTENING 4 54 TCP 192.168.191.1:53 0.0.0.0:0 LISTENING 1368 55 TCP 192.168.191.1:139 0.0.0.0:0 LISTENING 4 56 TCP 192.168.191.1:8735 0.0.0.0:0 LISTENING 1368 57 TCP [::]:80 [::]:0 LISTENING 4 58 TCP [::]:135 [::]:0 LISTENING 632 59 TCP [::]:445 [::]:0 LISTENING 4 60 TCP [::]:1025 [::]:0 LISTENING 692 61 TCP [::]:1026 [::]:0 LISTENING 872 62 TCP [::]:1027 [::]:0 LISTENING 1084 63 TCP [::]:1029 [::]:0 LISTENING 776 64 TCP [::]:1036 [::]:0 LISTENING 760 65 TCP [::]:1037 [::]:0 LISTENING 3976 66 TCP [::]:1433 [::]:0 LISTENING 2576 67 TCP [::]:7045 [::]:0 LISTENING 4 68 TCP [::]:7046 [::]:0 LISTENING 4 69 TCP [::]:7047 [::]:0 LISTENING 4 70 TCP [::]:7048 [::]:0 LISTENING 4 71 TCP [::]:7049 [::]:0 LISTENING 4 72 TCP [::]:7050 [::]:0 LISTENING 4 73 TCP [::]:7051 [::]:0 LISTENING 4 74 TCP [::]:8000 [::]:0 LISTENING 4 75 TCP [::]:9001 [::]:0 LISTENING 4 76 TCP [::]:9003 [::]:0 LISTENING 4 77 TCP [::]:9011 [::]:0 LISTENING 4 78 TCP [::1]:1434 [::]:0 LISTENING 2576 79 TCP [::1]:1734 [::1]:1736 ESTABLISHED 5384 80 TCP [::1]:1736 [::1]:1734 ESTABLISHED 6324 81 UDP 0.0.0.0:500 *:* 1084 82 UDP 0.0.0.0:4001 *:* 7216 83 UDP 0.0.0.0:4184 *:* 7216 84 UDP 0.0.0.0:4500 *:* 1084 85 UDP 0.0.0.0:5355 *:* 1256 86 UDP 0.0.0.0:51349 *:* 12280 87 UDP 0.0.0.0:51771 *:* 7216 88 UDP 0.0.0.0:54293 *:* 7216 89 UDP 0.0.0.0:54294 *:* 7216 90 UDP 0.0.0.0:54295 *:* 7216 91 UDP 0.0.0.0:55788 *:* 12280 92 UDP 0.0.0.0:57779 *:* 7216 93 UDP 0.0.0.0:58791 *:* 7216 94 UDP 0.0.0.0:59125 *:* 3480 95 UDP 0.0.0.0:59437 *:* 1368 96 UDP 127.0.0.1:1900 *:* 3532 97 UDP 127.0.0.1:61329 *:* 3532 98 UDP 192.168.0.77:137 *:* 4 99 UDP 192.168.0.77:138 *:* 4 100 UDP 192.168.0.77:1900 *:* 3532 101 UDP 192.168.0.77:5353 *:* 12280 102 UDP 192.168.0.77:61328 *:* 3532 103 UDP 192.168.1.1:137 *:* 4 104 UDP 192.168.1.1:138 *:* 4 105 UDP 192.168.1.1:1900 *:* 3532 106 UDP 192.168.1.1:5353 *:* 12280 107 UDP 192.168.173.1:67 *:* 1084 108 UDP 192.168.173.1:68 *:* 1084 109 UDP 192.168.189.1:137 *:* 4 110 UDP 192.168.189.1:138 *:* 4 111 UDP 192.168.189.1:1900 *:* 3532 112 UDP 192.168.189.1:5353 *:* 12280 113 UDP 192.168.191.1:53 *:* 1368 114 UDP 192.168.191.1:67 *:* 1368 115 UDP 192.168.191.1:137 *:* 4 116 UDP 192.168.191.1:138 *:* 4 117 UDP 192.168.191.1:1900 *:* 3532 118 UDP 192.168.191.1:5353 *:* 12280 119 UDP 192.168.191.1:61327 *:* 3532 120 UDP [::]:500 *:* 1084 121 UDP [::]:4500 *:* 1084 122 UDP [::]:5355 *:* 1256 123 UDP [::]:55789 *:* 12280 124 UDP [::1]:1900 *:* 3532 125 UDP [::1]:5353 *:* 12280 126 UDP [::1]:61326 *:* 3532 127 UDP [fe80::1485:f3e1:c20a:89d4%22]:1900 *:* 3532 128 UDP [fe80::58c1:dd0b:8c94:cdcb%30]:1900 *:* 3532 129 UDP [fe80::58c1:dd0b:8c94:cdcb%30]:61324 *:* 3532 130 UDP [fe80::60ee:5c16:dff8:26c6%21]:1900 *:* 3532 131 UDP [fe80::b8dd:2f46:ec42:728d%12]:1900 *:* 3532 132 UDP [fe80::b8dd:2f46:ec42:728d%12]:61325 *:* 3532
根据TCP协议定义的3次握手断开连接规定,发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用. 具体现象是对于一个处理大量短连接的服务器,如果是由服务器主动关闭客户端的连接,将导致服务器端存在大量的处于TIME_WAIT状态的socket, 甚至比处于Established状态下的socket多的多,严重影响服务器的处理能力,甚至耗尽可用的socket,停止服务. TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证.
windows 机器设置
在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,右键添加名为TcpTimedWaitDelay的
DWORD键,设置为60,以缩短TIME_WAIT的等待时间
ubuntu机器设置
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
/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_fin_timeout 修改系統默认的 TIMEOUT 时间
一般情况下,系统的socket资源默认5000个。(非官方)
TCP协议中有TIME_WAIT这个状态
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接。在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。