TCP keepalive 是否发送数据包以防止 age-out 和来自防火墙的连接关闭?

Does TCP keepalive sends packet to prevent age-out and close of connection from firewall?

我设置了客户端和服务器之间的防火墙。我连接到 2 个不同的服务器说 A 和 B 并且数据可以在任何时间从 A 或 B 流动,但只有一个在 time.It 似乎我与服务器的连接在每 2 小时 11 分钟后终止15 秒。 我在我的应用程序中设置了 tcp keepAlive 并正在使用 poco 库。

我在我的盒子上看到下面是 tcp keepalive 内核级参数 }

  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_time 
  7200
  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl 
  75
  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_probes 
  9

7200(2 小时)+ 9*75 =(11 分 15 秒),上面的一些参数和断开连接的时间表明这是由于我的盒子上的上述设置而发生的。服务器和客户端之间的大多数连接在大多数时间段(小时)内都是理想的,但预计数据会随时(不固定)到来。假设防火墙上的理想时间设置为(30 分钟),那么我真的应该将我的 tcp_keepalive_time 减少到 20 分钟以内,以便在客户端和服务器之间进行探测,从而防止防火墙将其视为理想时间连接并实际终止连接?

我的理解是,即使连接是理想的,参数 tcp_keepalive_time 也会阻止防火墙关闭连接直到这个时间段,或者理想情况下它应该小于防火墙理想超时,以便防火墙看到数据包传输两个服务器(由客户端完成的保持活动探测和从服务器收到的确认)并且不尝试关闭连接?

谢谢

我试图将 tcp_keepalive_time 从 7200 秒减少到 900 秒(15 分钟)。这确保了 900 秒后发送了 tcp keep alive 探测。由于这个理想的 30 分钟连接超时设置在防火墙被阻止关闭连接。这解决了我的问题。我在下面的解决方案部分的 link 中了解到了这一点。

https://www.veritas.com/support/en_US/article.100028680

  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_time 
  900