欢迎大家分享自己的文档,请点击查阅:分享方法,![]() 如果你喜欢这文章,可以点击文章结尾处百度分享,分享到你的各种社区收藏,或推荐给朋友…… 接的两个方向(全双工关闭),client必须进入 TIME_WAIT 状态,因为client可能面 临重发最终ACK的情形。 { scz 2001-08-31 13:28 先调用close()的一方会进入TIME_WAIT状态 } 此外,考虑一种情况,TCP实现可能面临先后两个同样的相关五元组。如果前一个连 接处在 TIME_WAIT 状态,而允许另一个拥有相同相关五元组的连接出现,可能处理 TCP报文时,两个连接互相干扰。使用 SO_REUSEADDR 选项就需要考虑这种情况。 为什么 TIME_WAIT 状态需要保持 2MSL 这么长的时间? 如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。 第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二 个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT 状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被 丢弃。建立第二个连接的时候,不会混淆。 A: 小四 在Solaris 7下有内核参数对应 TIME_WAIT 状态保持时间 # ndd -get /dev/tcp tcp_time_wait_interval 240000 # ndd -set /dev/tcp tcp_time_wait_interval 1000 缺省设置是240000ms,也就是4分钟。如果用ndd修改这个值,最小只能设置到1000ms, 也就是1秒。显然内核做了限制,需要Kernel Hacking。 # echo "tcp_param_arr/W 0t0" | adb -kw /dev/ksyms /dev/mem physmem 3b72 tcp_param_arr: 0x3e8 = 0x0 # ndd -set /dev/tcp tcp_time_wait_interval 0 我不知道这样做有什么灾难性后果,参看<>的声明。 Q: TIME_WAIT 状态保持时间为0会有什么灾难性后果?在普遍的现实应用中,好象也 就是服务器不稳定点,不见得有什么灾难性后果吧? D: rain@bbs.whnet.edu.cn Linux 内核源码 /usr/src/linux/include/net/tcp.h 中 #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to successfully * close the socket, about 60 seconds */ 最好不要改为0,改成1。端口分配是从上一次分配的端口号+1开始分配的,所以一般 不会有什么问题。端口分配算法在tcp_ipv4.c中tcp_v4_get_port中 转载请注明linux系统运维: |