TCP保活功能KEEPALIVE数据库
转载:http://www.vants.org/?post=162服务器
TCP保活(TCP keepalive)网络
做者:易隐者 发布于:2012-10-15 11:30 Monday 分类:网络分析post
双方创建交互的链接,可是并非一直存在数据交互,有些链接会在数据交互完毕后,主动释放链接,而有些不会,那么在长时间无数据交互的时间段内,交互双方都有可能出现掉电、死机、异常重启等各类意外,当这些意外发生以后,这些TCP链接并将来得及正常释放,那么,链接的另外一方并不知道对端的状况,它会一直维护这个链接,长时间的积累会致使很是多的半打开链接,形成端系统资源的消耗和浪费,为了解决这个问题,在传输层能够利用TCP的保活报文来实现。性能
1, 探测链接的对端是否存活spa
在应用交互的过程当中,可能存在如下几种状况:资源
(1)客户端或服务器端意外断电、死机、崩溃、重启get
(2)中间网络已经中断,而客户端与服务器端并不知道服务器端
利用保活探测功能,能够探知这种对端的意外状况,从而保证在乎外发生时,能够释放半打开的TCP链接。表单
2, 防止中间设备因超时删除链接相关的链接表
中间设备如防火墙等,会为通过它的数据报文创建相关的链接信息表,并为其设置一个超时时间的定时器,若是超出预约时间,某链接无任何报文交互的话,中间设备会将该链接信息从表中删除,在删除后,再有应用报文过来时,中间设备将丢弃该报文,从而致使应用出现异常,这个交互的过程大体以下图所示:
这种状况在有防火墙的应用环境下很是常见,这会给某些长时间无数据交互可是又要长时间维持链接的应用(如数据库)带来很大的影响,为了解决这个问题,应用自己或TCP能够经过保活报文来维持中间设备中该链接的信息,(也能够在中间设备上开启长链接属性或调高链接表的释放时间来解决,可是,这个影响可能较大,有机会再针对这个作详细的描述,在此很少说)。
某财务应用,在客户端须要填写大量的表单数据,在客户端与服务器端创建TCP链接后,客户端终端使用者将花费几分钟甚至几十分钟填写表单相关信息,终端使用者终于填好表单所需信息后,点击“提交”按钮,结果,这个时候因为中间设备早已经将这个TCP链接从链接表中删除了,其将直接丢弃这个报文或者给客户端发送RST报文,应用故障产生,这将致使客户端终端使用者全部的工做将须要从新来过,给使用者带来极大的不便和损失。
TCP keepalive probe报文
1.咱们看到,TCP保活探测报文是将以前TCP报文的序列号减1,并设置1个字节,内容为“00”的应用层数据 ,以下图所示:
发送keepalive probe报文以前的TCP报文
2.TCP keepalive ACK报文
TCP保活探测确认报文就是对保活探测报文的确认, 其报文格式以下:
TCP keepalive ACK报文
TCP保活的交互过程大体以下图所示:
中间设备因大量保活链接,致使其链接表满
网关设备因为保活问题,致使其链接表满,没法新建链接(XX局网闸故障案例)或性能降低严重
正常链接被释放
当链接一端在发送保活探测报文时,中间网络正好因为各类异常(如链路中断、中间设备重启等)而没法将该保活探测报文正确转发至对端时,可能会致使探测的一方释放原本正常的链接,可是这种可能状况发生的几率较小,另外,通常也能够增长保活探测报文发生的次数来减少这种状况发生的几率和影响。
通常而言,保活探测主要在服务器端实现,若是应用层有相应的保活机制时,传输层的TCP保活就能够不用。
=========END=========