我们有一个自制的XMPP服务器,我被问到服务器的MSL(最大段寿命)是多少。它是什么意思,我怎样才能获得它?它是在linux / proc TCP设置上吗?
答案 0 :(得分:8)
MSL(最大段寿命)是TCP段预计存在于网络中的最长时间(以秒为单位)。最显着的是在TCP连接关闭期间发挥作用 - 在CLOSE_WAIT和CLOSED状态之间,机器等待2个MSL(概念上是到互联网末端的往返并返回)用于任何延迟的数据包。在此期间,机器为最关闭的连接保留资源。如果服务器繁忙,那么以这种方式保存的资源可能会成为一个问题。一个"修复"是降低MSL,以便更快地释放它们。通常情况下这可以正常工作,但偶尔会导致混乱的故障情况。
在Linux (无论如何,RHEL,这是我所熟悉的),"变量" /proc/sys/net/ipv4/tcp_fin_timeout
是2 * MSL值。通常是60(秒)。
要看到它,请执行:
cat /proc/sys/net/ipv4/tcp_fin_timeout
要更改它,请执行以下操作:
echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout
这是一个TCP状态图。你可以在底部找到有问题的等待。
<小时/>
答案 1 :(得分:3)
您还可以在netstat或ss中使用-o查看套接字的倒数计时器,这有助于显示有关等待时间的具体数字。例如,TIME_WAIT does NOT使用tcp_fin_timeout(它基于TCP_TIMEWAIT_LEN,通常硬编码为60s)。
cat /proc/sys/net/ipv4/tcp_fin_timeout
3
# See countdown timer for all TIME_WAIT sockets in 192.168.0.0-255
ss --numeric -o state time-wait dst 192.168.0.0/24
NetidRecv-Q Send-Q Local Address:Port Peer Address:Port
tcp 0 0 192.168.100.1:57516 192.168.0.10:80 timer:(timewait,55sec,0)
tcp 0 0 192.168.100.1:57356 192.168.0.10:80 timer:(timewait,25sec,0)
tcp 0 0 192.168.100.1:57334 192.168.0.10:80 timer:(timewait,22sec,0)
tcp 0 0 192.168.100.1:57282 192.168.0.10:80 timer:(timewait,12sec,0)
tcp 0 0 192.168.100.1:57418 192.168.0.10:80 timer:(timewait,38sec,0)
tcp 0 0 192.168.100.1:57458 192.168.0.10:80 timer:(timewait,46sec,0)
tcp 0 0 192.168.100.1:57252 192.168.0.10:80 timer:(timewait,7.436ms,0)
tcp 0 0 192.168.100.1:57244 192.168.0.10:80 timer:(timewait,6.536ms,0)
答案 2 :(得分:1)
这看起来可以回答你的问题:
http://seer.support.veritas.com/docs/264886.htm
我建议你问为什么有人问你这个,并找出它是如何适用于XMPP的。
TCP / IP Illustrated第1卷在线并更详细地描述了2MSL:Here
中提到的TCP wikipedia中也描述了MSL