解释1
所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,
所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接
解释2
长连接就是指在基于tcp的通讯中,一直保持连接,不管当前是否发送或者接收数据。
而短连接就是只有在有数据传输的时候才进行连接,客户-服务器通信/传输数据完毕就关闭连接。
解释3
长连接和短连接这个概念好像只有移动的CMPP协议中提到了,其他的地方没有看到过。
通信方式
各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需 要双方发检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对 CMPP消息的发送。
现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。
解释4
短连接:比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
长连接:有些服务需要长时间连接到服务器,比如CMPP,一般需要自己做在线维持。
如何避免time_wait状态占用资源??
如何消除大量TCP短连接引发的TIME_WAIT?
1)可以改为长连接,但代价较大,长连接太多会导致服务器性能问题,而且PHP等脚本语言,需要通过proxy之类的软件才能实现长连接;
2)修改ipv4.ip_local_port_range,增大可用端口范围,但只能缓解问题,不能根本解决问题;
3)客户端程序中设置socket的SO_LINGER选项;
4)客户端机器打开tcp_tw_recycle和tcp_timestamps选项;
5)客户端机器打开tcp_tw_reuse和tcp_timestamps选项;
6)客户端机器设置tcp_max_tw_buckets为一个很小的值
基本上解决思路分为两个方向:
1. 建立socket连接时设置SO_LINGER。或者是调整系统参数, 修改/etc/sysctrl.conf中的这几项
# 扩大端口范围,增加端口资源 net.ipv4.ip_local_port_range = 1024 65536 #开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0 net.ipv4.tcp_tw_reuse = 1 #开启TCP连接中TIME-WAIT sockets的快速回收,默认为0 net.ipv4.tcp_tw_recycle = 1
#服务端主动发起关闭后等待的超时时间
net.ipv4.tcp_fin_timeout = 5
#开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击
net.ipv4.tcp_syncookies = 1
这些调整基本上是能起到一个提高系统性能的作用,使得系统能承受更多的短连接并发。但设置的时候需要谨慎,后续要注意观察,有些参数设置可能在极端情况下存在丢包、断连或者连接不上的隐患。
2. 优化自己的系统,减少短连接次数
因为tcp连接关闭后是有必要保留一段时间TIME_WAIT状态的,我们的目标不应该是简单的缩短TIME_WAIT时间,而是应该从根本上去优化我们的系统架构设计,减少不必要的短连接请求。