12

我们有一个自制的 XMPP 服务器,有人问我我们服务器的 MSL(最大段生命周期)是多少。
它是什么意思,我如何获得它?它在 Linux /procTCP 设置中吗?

4

3 回答 3

10

MSL (Maximum Segment Lifetime) 是 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 状态图

于 2016-01-25T19:43:54.287 回答
8

您还可以在 netstat 或 ss 中使用 -o 来查看套接字的倒数计时器,这有助于显示有关等待时间的具体数字。例如,TIME_WAIT 不使用 tcp_fin_timeout(它基于 TCP_TIMEWAIT_LEN,通常硬编码为 60 秒)。

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)
于 2018-12-06T02:43:32.850 回答
1

这看起来可以回答你的问题:

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

我建议你问问为什么有人问你这个问题,并了解这如何适用于 XMPP。

TCP/IP 图解第 1 卷已在线,并更详细地描述了 2MSL:这里

维基百科中所述,MSL 也在 TCP RFC 793中进行了描述

于 2008-11-14T04:22:01.840 回答