TCP中的最大段生存时间(MSL)是什么? [关闭]

问题描述 投票:9回答:3

我们有一台自制的XMPP服务器,有人问我我们的服务器的MSL(最大分段生存时间)是多少。这是什么意思,我如何获得? Linux/procTCP设置中有问题吗?

linux networking tcp network-protocols
3个回答
10
投票

MSL(最大段生存时间)是期望TCP段在网络中存在的最长时间(以秒为单位)。最值得注意的是,它在TCP连接关闭期间起作用-在CLOSE_WAIT和CLOSED状态之间,计算机等待2个MSL(从概念上讲是往返于Internet末端并返回)往返于任何较晚的数据包。在这段时间中,计算机为大多数关闭的连接保留资源。如果服务器繁忙,则以这种方式保留的资源可能会成为问题。一种“解决办法”是降低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状态图。您可以在底部找到有问题的等待。 

TCP State Diagram


4
投票
您还可以在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)


1
投票
这看起来可以回答您的问题:

http://seer.support.veritas.com/docs/264886.htm

我建议您问为什么有人问您这个问题,并找出对XMPP适用的原因。

TCP / IP图解卷1处于在线状态,更详细地描述了2MSL:Here

RFC 793中提到的TCP wikipedia中也描述了MSL

© www.soinside.com 2019 - 2024. All rights reserved.