TCP长连接和短链接
目录
http keepalive 与 TCP keepalive
参考:https://www.cnblogs.com/hukey/p/5481173.html
短连接
通信双方有数据需要交互时就建立TCP连接,数据发送完成后就断开TCP连接。管理起来很简单,存在的连接都是游泳的,不需要额外的控制手段。
长连接
在客户端与服务器端建立连接后,彼此没有数据需要交互,也可以将连接维持保持一段时间。(这里是用的TCP的保活(keepalive)计时器https://blog.****.net/u010918487/article/details/87190751#%E7%AC%AC23%E7%AB%A0%C2%A0%20TCP%E7%9A%84%E4%BF%9D%E6%B4%BB%E5%AE%9A%E6%97%B6%E5%99%A8)
keepalive功能
1.探测连接的对端是否存活:客户端或服务器意外断电、死机、崩溃、重启;中间网络断开,通信双方并不知道
2.防止中间设备因超时删除连接相关的连接表:中间设备如防火墙等,会为经过它的数据报文建立相关的连接信息表,并未其设置一个超时时间的定时器,如果超时预定时间,某连接无任何报文交互,中间设备会将该连接信息从表中删除。删除后,再有报文过来时,中间设备将丢弃该报文,从而导致应用出现异常。
中间设备删除超时的连接过程
TCP keepalive交互过程
TCP keepalive带来的问题:
1.中间设备因大量保活连接,导致其连接表满:网关设备由于保活问题,导致其连接表满,无法建立新连接(如网闸故障问题)或性能下降严重。
2.正常连接被释放
当连接一端正在发送保活探测报文时,中间网络正好由于各种异常(如链路中断、中间设备重启等),而无法将该保活探测报文正确转发到对端时,可能会导致探测的乙方释放本来正常的连接。但这种可能性很小。
为什么需要长连接?
TCP三次握手四次挥手都是需要消耗资源和时间的。
http keepalive 与 TCP keepalive
http keepalive在于tcp连接的复用,tcp keepalive在于探测连接的对端是否存活
http 1.1起,默认使用长连接,会在响应头上添加Connection:keep-alive字段。