[20200310]测试网路状态TIME_WAIT(windows).txt
--//简单探究windows下出现TIME_WAIT时,需要多少时间消失。我前面的测试:http://blog.itpub.net/267265/viewspace-2678684/
--//实际上这个时间是写死在net/tcp.h头文件里面的,参考:/usr/src/kernels/2.6.39-300.26.1.el5uek/include/net/tcp.h可以发现如下:
#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
* state, about 60 seconds */
#define TCP_FIN_TIMEOUT TCP_TIMEWAIT_LEN
/* BSD style FIN_WAIT2 deadlock breaker.
* It used to be 3min, new value is 60sec,
* to combine FIN-WAIT-2 timeout with
* TIME-WAIT timer.
*/
--//除非你修改头文件并且重新编译内核,否则都是无效的。
1.测试环境:
--//测试windows下的情况,我的测试环境是windows 7:
--//client: 192.168.98.6
--//server: 192.168.100.78 linux
--// 批处理 ts.bat脚本如下,注意安装gawk,可以安装UnxUtils包。
@echo off
gawk "{ print strftime(\"[%%Y-%%m-%%d %%H:%%M:%%S]\"), $0 }"
2.测试:
SCOTT@78> @ spid
SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50
---------- ---------- ------------------------ --------- -------------------- ------- ---------- --------------------------------------------------
30 671 5592:5488 DEDICATED 42739 26 252 alter system kill session '30,671' immediate;
--//记下spid=42739:
$ netstat -nopt 2>/dev/null | grep 42739
tcp 0 0 192.168.100.78:1521 192.168.98.6:52233 ESTABLISHED 42739/oraclebook off (0.00/0/0)
--//这样就知道client使用的端口号42739。实际上不需要这么麻烦,client仅仅1个连接。
--//在客户端执行:
R:\>seq 1000 | xargs -iQ cmd /c "netstat -na | grep 192.168.100.78:1521 | ts && sleep 1"
[2020-03-10 10:12:37] TCP 192.168.98.6:52233 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:12:38] TCP 192.168.98.6:52233 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:12:40] TCP 192.168.98.6:52233 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:12:41] TCP 192.168.98.6:52233 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:12:42] TCP 192.168.98.6:52233 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:12:43] TCP 192.168.98.6:52233 192.168.100.78:1521 ESTABLISHED
--//在sqlplus下执行quit退出,出现state=TIME_WAIT.
[2020-03-10 10:12:45] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:12:46] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:12:47] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
...
[2020-03-10 10:14:37] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:14:38] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:14:39] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:14:41] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:14:42] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:14:43] TCP 192.168.98.6:52233 192.168.100.78:1521 TIME_WAIT
--//可以看出2分钟消失,也就是120秒。
--//另外注意:这个情况出现state=TIME_WAIT仅仅发生在客户端。
3.修改注册看看:
--//网络上查了一些资料,提示在注册表(regedit)的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters上添
--//加一个DWORD类型的值TcpTimedWaitDelay,值就是秒数,即可。重启机器才能测试:
--//timewait.reg
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
R:\>seq 1000 | xargs -iQ cmd /c "netstat -na | grep 192.168.100.78:1521 | ts && sleep 1"
[2020-03-10 10:37:28] TCP 192.168.98.6:49387 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:37:29] TCP 192.168.98.6:49387 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:37:31] TCP 192.168.98.6:49387 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:37:32] TCP 192.168.98.6:49387 192.168.100.78:1521 ESTABLISHED
[2020-03-10 10:37:33] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:34] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:35] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:37] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:38] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:39] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:40] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:42] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:43] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:44] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:45] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:46] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:48] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:49] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:50] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:51] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:52] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:54] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:55] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:56] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:57] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:58] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:37:59] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
[2020-03-10 10:38:01] TCP 192.168.98.6:49387 192.168.100.78:1521 TIME_WAIT
--//30秒消失.补充测试我发现最小设置30秒,我设置10秒无效。
--//查询一些链接提示:在Parameters子键下创建或修改名为TcpTimedWaitDelay的REG_DWORD值,该值的范围是从0到300,建议将该值设
--//置为30。
4.总结:
--//在测试时我遇到很奇怪的情况,开机第一次连接后退出不会出现state=TIME_WAIT的情况。
--//另外我做了其它测试,发现一些奇怪的情况。有时间另外写一篇。