赞
踩
浅谈防火墙长连接与短连接
引言:在银行项目日常投产中,开发人员会发现系统上线后应用访问数据库连接中断的问题,这很有可能是因为应用程序与数据库之间的连接使用了长连接。当应用程序与数据库建立的同一个TCP会话的两个连续报文到达防火墙的时间间隔大于防火墙上默认TCP会话的保持时间间隔,会话超时后防火墙将从会话表中删除此TCP会话信息。所以当后续该TCP会话中的第二个报文到达防火墙后,防火墙发现会话表中无此会话条目,防火墙会根据自身的转发机制从而丢弃该非tcp syn报文,导致连接中断,所以开发人员要把使用长连接的需求告之运维人员,把防火墙上针对该条访问关系策略默认的会话时间设置久一点,从而可以避免会话中断的情况。由此可见项目的前期沟通显得至关重要。(注:本文防火墙的一些时间参数仅为华为某型号防火墙,不代表所有厂家防火墙的参数)
一、TCP连接建立和拆除过程
1、TCP标志位
SYN,ACK,FIN存放在TCP的标志位,一共有6个字符,这里就介绍这三个:
SYN:请求创建连接,在三次握手中前两次要SYN=1,表示这两次用于建立连接。
FIN:请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为TCP的连接是双向的,所以一次FIN只能关闭一个方向。
ACK:确认接收,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接以后发送数据的时候,都需加上ACK=1,表示数据接收成功。
seq:序列号:当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接收方才能对数据包进行再次拼接。
2、TCP连接的建立-三次握手
1.客户端首先发起连接请求,SYN=1,ACK=0,本次发送包的序列号seq=x。
2.服务端接收到后,要告诉客户端:我接收到了!ACK=1表示回应,SYN=1表示发送数据,所以就变成了ACK=1,SYN=1,本次发送包的序列号为seq=y,希望下一次收到包的序列号为ack=x+1。
3.理论上这时的连接就创建成功了,但是客户端要再发一个消息给服务端确认一下,这时只需要ACK=1就行了,发送包的序列号seq=x+1,ack=y+1。
3、TCP连接的拆除-四次挥手
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。