MSL (最大段寿命)是一个数据片(消息)在网络上能够生存的最长时间,RFC 793中将MSL通常定义为2分钟。 也就是说,经过2分钟以上,该消息被认为在网络上被废弃。 对于一个TCP连接,在双方进入TIME_WAIT后,通常等待两倍的MSL时间,然后关闭连接。 这是为了防止FIN消息丢包导致端到端重传与后续TCP连接请求的顺序混乱。 具体原理在这里不详细说明,请参考。 http://blog.net/qwertyupoiuus
MSL的时间长度实际上是估计值,该值影响基于TCP的APP应用的许多连接的复用和调谐,因此实际生产中需要针对具体的APP应用来调整MSL的具体值(因为MSL值是系统级的) 介绍如何针对Linux和Windows系统调整MSL。
以Linux、CentOS为例:
查看默认MSL值(60s ) :
[ root @ dance nto s65 var ] # cat/proc/sys/net/IP v4/TCP _ fin _ time out
60
将默认值60更改为120 :
[ root @ dance nto s65 var ] # echo 120/proc/sys/net/IP v4/TCP _ fin _ time out
更改完成后,重新加载配置文件。
[ root @ dance nto s65 var ] # sysctl-p/etc/sysctl.conf
要检查是否有效:
[ root @ dance nto s65 var ] # sysctl-a|grep fin
net.ipv4.tcp_fin_timeout=120
在Windows上更改“2MSL”的值:
打开注册表编辑器(regedit ) :
找到HKEY _ local _ machinesystemcurrent control setservicestcpipparameters,在右侧找到名为TcpTimedWaitDelay的键值()
请指定对应的值。
请注意,在Windows系统上,此注册表项值与从TIME_WAIT到CLOSED状态的等待市场(即2MSL )的值直接相等,而不是像Linux那样更改MSL值。