[20200310]测试网路状态TIME_WAIT(windows).txt

[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的情况。
--//另外我做了其它测试,发现一些奇怪的情况。有时间另外写一篇。

请使用浏览器的分享功能分享到微信等