TCP 长连接短连接和保活机制
Posted sly123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP 长连接短连接和保活机制相关的知识,希望对你有一定的参考价值。
当server和client进行TCP通信时,发送数据之前,需要先建立连接。数据发送完毕时,需要选择是否断开。这里就需要先认识下TCP的三次握手和四次分手机制。
3次握手时 第一次握手:client端向server端发送连接请求信息:SYN=1,seq=x,
第二次握手:server端回复:ACK=x+1的确认信息。
第三次握手:server端向client端发送连接请求信息:SYN=1,seq=y,
第四次握手:client端回复:ACK=y+1的确认信息。
因为连接之前,没有别的数据在发送,所以第二次和第三次握手可以合并一起发送。即:
第一次握手:client端向server端发送连接请求信息:SYN=1,seq=x,
第二次握手:server端向client端发送回复和连接请求信息:ACK=x+1,SYN=1,seq=y,
第三次握手:client端回复:ACK=y+1的确认信息。
四次分手 第一次分手:client端向server端发送断开连接请求信息:FIN=1,seq=x+2
第二次分手:server端回复:ACK=x+3的确认断开连接信息。
第三次分手:server端向client端发送断开连接请求信息:FIN=1,seq=y+1,
第四次分手:client端回复:ACK=y+2的确认断开连接信息。
为什么这里第二次和第三次分手不能合并一起呢?因为client向server端发送信息完毕时,会发送断开连接请求,server会回复确认断开连接回复,但此时server端可能还在向client发送数据,所以不能同时发送断开连接请求,只有当server端向client发送数据完毕时,才能向client端发送断开连接请求。
言归正传,说一下我理解的长连接和短连接。
长连接:在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持(不发生RST包和四次挥手)即:Keepalive(存活定时器)功能。过程如下:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接(一个TCP连接通道多个读写通信);
默认的Keepalive超时需要7,200,000 milliseconds,即2小时,探测次数为5次。
客户主机必须处于以下4个状态之一:
- 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
- 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
- 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
- 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。
短连接:
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接(管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段);过程如下:
连接→数据传输→关闭连接;
以上是关于TCP 长连接短连接和保活机制的主要内容,如果未能解决你的问题,请参考以下文章