谁负责处理客户端掉电后临时端口重用的问题?

Who bears the responsibility for dealing with client ephemeral port reuse after power loss?

我们的客户端在启动时会在 FreeNAS 服务器上映射一个 smb 共享。我们注意到,在断电后,他们有时无法连接到 smb 共享。

经过一些调试和数据包捕获后,问题似乎出在客户端选择了一个以前使用过的临时端口,由于电源故障,该端口没有正确关闭。当发送 SYN 以启动 SMB 连接时,服务器会以非常高的 Ack 编号响应 ACK,而不是预期的 SYN-ACK。

服务器似乎从以前使用的、从未关闭的临时端口看到 SYN,并尝试继续旧的对话。这样来回会持续一段时间(一分钟多),errors/delays 有问题。

谁负责处理这种情况?客户端还是服务器?任何规格或细节都会非常有帮助。谁(如果有人)在这种情况下行为不端?

更新: @fendall 描述的行为是 Windows 正确的行为。但是,the currently released version of WinPE, v10.0.18362.1 的行为并不恰当。相反,它会尝试新的临时端口,每个后续端口都会进行更多尝试,直到它最终放弃。 Win10 1903 安装程序附带的 winPE 版本工作正常。 在已发布的 WinPE 上,如果您最近在它尝试的相当确定的少数临时端口上建立了连接,那您就倒霉了 - 在服务器决定忘记它们之前无法建立 tcp 连接.

根据我的理解,您的问题的答案是客户负责。

为了响应服务器的ACK,客户端应该检测到“这个段没有确认任何它 发送和,被不同步,发送一个复位(RST),因为它有 检测到半开连接。”参考:RFC 793 Pg 34