想象一下这种情况--客户机(Linux)与服务器(Linux)上托管的虚拟IP之间的TCP连接(NFS4或数据库)。服务器失败,VIP被另一台服务器接管(使用ARP)。
客户端不知道这一点,并认为TCP连接仍然处于打开状态。客户端不断向辅助服务器发送重传(其中5-8个),而忽略它们。这大约需要3分钟,客户端会放弃,关闭失败的TCP连接并尝试打开一个新的连接。
让客户端尽可能快地转移到新服务器上的最佳机制是什么?
发布于 2021-04-26 16:51:14
客户端不断向辅助服务器发送重传(其中5-8个),而忽略它们。
那是不正确的。如果故障转移服务器与发送主机没有TCP连接,则TCP将在接收到不存在的连接中的一个段时发送RST,从而终止主机上的连接,该连接将需要与故障转移服务器建立新连接。
RFC 793,传输控制协议是TCP的定义,如果您想做您所描述的事情,那么您应该真正熟悉其中的所有内容。它有一个一般性的解释,但还有许多其他的事情你应该理解:
重置生成作为一般规则,当一个段到达时,必须发送重置(RST),这显然不是当前连接的意图。如果不清楚是否存在这种情况,则不能发送重置。有三组国家:
除SYN发送外,所有状态下的重置处理都通过检查SEQ-字段验证所有重置(RST)段。如果重设的序列号在窗口中,则重置是有效的。在SYN发送状态(响应于初始SYN接收的RST )中,如果ACK字段确认SYN,则RST是可以接受的。RST的接收方首先验证它,然后更改状态。如果接收者处于侦听状态,则忽略它。如果接收器处于SYN接收状态,并且先前处于侦听状态,则接收器返回侦听状态,否则接收器中止连接并进入关闭状态。如果接收器处于任何其他状态,则中止连接并通知用户并进入关闭状态。
https://networkengineering.stackexchange.com/questions/73642
复制相似问题