长连接的使用场景
当业务中客户端和服务器长时间无数据交互,空闲时间超过1800秒,会话会因超时被清除。后续客户端没有重新发起连接,直接发送控制报文时导致数据不通。常见于数据库连接。
1. 重点说明
-
以天为单位的会话超时需要开启长效会话比例,否则无效,按协议默认值生效。TCP 1800s,UDP 60s。
-
以秒为单位的会话超时配置(最大65535,约18小时),不属于长效会话,可以不开启长效会话比例。
-
在服务中定义的超时时间,必须对应策略引用才生效。
-
在应用中定义的超时时间,不需要策略引用。
-
应用超时时间优先级低于服务。
-
命令行show session 或web UI通过策略查看会话超时时间确认是否生效。
-
仅对配置完成后新建的会话生效,配置前已存在的会话无效。
2. 场景解析
某些业务同一个会话的保持或响应时间比较长,出现以下情况时,会导致业务失败。
-
业务的连接闲置时间比较长,StoneO会话超时后,客户端和服务器直接连接仍然保持。当请求发起时,客户端不再进行三次握手,如果防火墙开启了syn0检查或响应时间超过三次握手等待时间,相关报文会被丢弃。
-
客户端发送请求后,服务端响应时间超过应用会话存活期(例如海量数据库查询用时超过1800S),回包经过防火墙时,相关会话已经因超时关闭,从而导致报文被丢弃业务失败。
StoneOS相关会话的生存期需要大于应用的等待和响应时间,如果该时长大于系统预定义生存期,则需要做相关配置。
常见的相关应用:oracle数据库(预定义应用SQLNETv2)、SSL vpn 的UDP数据传输等。
3. 相关概念
-
业务相关概念
会话闲置时间:只客户端和服务器之间的连接保持时间,只要闲置不超过该时长,客户端和服务器可能会继续使用该连接。
-
StoneOS相关概念
超时时间:相关会话无任何流量命中时的保持时长,超过该时长会话会关闭。
长效会话:超时时间超过65535秒的会话。
4. 相关配置
设置长效会话比例
以天为单位的会话超时需要开启长效会话比例,否则无效,按协议默认值生效。TCP 1800s,UDP 60s。以秒为单位的会话超时配置(最大65535,约18小时),不属于长效会话,可以不开启长效会话比例。
进入【网络】【全局网络参数】开启 【长效会话】开关,比例通常按推荐10%即可。
CLI 配置:
longlife-sess-percent 10
通过应用定义长连接
如果需要全局对某个常见应用生效,如全网oracle可以对预定义应用进行配置。配置步骤如下
CLI配置:
application SQLNETv2
timeout-day tcp 2
exit
如需对特定的业务生效,如某指定的orcale服务器生效,可以通过自定义应用配置。配置步骤如下,不同版本界面有所区别,逻辑是一致的。
CLI配置:
application oracle-OA
timeout-day tcp 2
exit
signature
application oracle-OA #刚才新建的应用名称
src-addr Any
dst-ip 10.0.0.100/32
protocol tcp dst-port 1521
exit
通过服务定义长连接
大部分主流版本当前WEB UI不支持服务修改超时时间,只能CLI配置;
service "tcp1521"
tcp dst-port 1521 timeout-day 2
exit
服务中定义的连接时长需要策略调用才生效。如流量命中服务为ANY的策略,则超时时间为1800s。
5. 生效条件
如下图,因命中预定义应用sqlnetv2生效
如下图,已经命中预定义应用,超时时间仍然是1800,如应用配置没问题,大概率全局没开启长效会话比例。
如超时时间配置单位为秒,不需要开启长效会话即可生效。如下图
当服务和应用中配置的超时时间不一致,以命中策略服务为准,上图会话配置如下;