TCP保活机制

1、概述

i、客户端和服务器需要了解什么时候终止进程或者与对方断开连接。ii、应用进程之间没有任何数据交换,但仍然需要通过连接保持一个最小的数据流。TCP保活机制即为了解决上述两种情况而设计。保活机制是一种在不影响数据流内容的情况下探测对方的方式。它是由一个保活计时器实现的。

应用从保活机制存在的问题:

i、短暂的网络错误中,保活机制使tcp断开连接;ii、保活机制占用不必要的带宽;iii、按流量计费的网络会花更多的钱。

所以保活机制存在争议。

利用保活机制主要做以下两件事:

i、检测半开放的连接(另一端非常规关闭连接),及时释放这种连接,避免其长期无效占用资源。

ii、保持主机与NAT路由器(只是一种举例,此处应是泛指)的长时间连接

2、保活机制相关概念及发现对方所处的四种状态

保活时间:即在此时间内连接处于非活动状态。在/proc/sys/net/ipv4/tcp_keepalive_time中可以查看  (默认为7200秒)。

保活时间间隔:即每隔此时间间隔,就将继续发送保活探测报文。在/proc/sys/net/ipv4/tcp_keepalive_intvl中可以查看  (默认为75秒)。

保活探测数:持续发送探测报文的总次数。在/proc/sys/net/ipv4/tcp_keepalive_probes中可以查看  (默认为9次)。

保活探测报文:即为一个空报文段(或只包含1字节)。它的序列号等于对方主机发送的ACK报文的最大序列号减1。因为这一序列号的数据段已经被成功接收,所以不会对到达的报文段造成影响,但探测报文返回的响应可以确定连接是否仍在工作。探测及期响应报文都不包含任何新有效数据(它是”垃圾“数据),当它们丢失时也不会进行重传。

 

tcp保活功能工作过程中,开启该功的一端会发现对方处于以下四种状态之一:

i、对方主机仍在工作,并且可以到达

对方的tcp响应正常,并且请端也知道对方在正常正作。请求端将保活计时器重置(重新设定为保活时间值)。如果在计时器超时之前有应用程序通过该连接传输数据,那么计时器将再次被设定为保活时间值。

ii、对方主机已经崩溃,包括已经关闭或者正在重新启动

这种情况下,对方的tcp将不会响应。请求端不会接收到响应报文,并在经过保活时间间隔指定的时间后超时。超时前,请求端会持续发送探测报文,一共发送保活探测数据指定次数的探测报文,如果请求端没有收到任何探测报文的响应,那么它将认为对方主机已经关闭,连接也将被断开。

iii、客户主机崩溃并且已重启

这种情况下,请求端会收到一个对其保活探测报文的响应,但这个响应是一个重置报文段,请求端将会断开连接。

iv、对方主机仍在工作,但是由于某些原因不能到达请求端

此情况如网络无法传输,而且可能使用ICMP通知也可能不通知对方这一事实。此情况与状态2相同,因为tcp不能区分状态2与状态4,结果都是没有收到探测报文的响应。

3、与tcp保活机制相关的攻击

此类攻击主要包含两种:一种是使系统长时间地维护不必要的会话资源。另一种是获得端系统隐藏的一些信息(虽然这些信息对于攻击者而言可能实用性有限)。此外,由于默认情况下tcp不会对保活报文进行加密,所以保活探测报文和确认报文都有可能被利用。(针对泄密情况,对于应用层的保活机制(例如ssh),这此报文都会被加密,所以也就不会出现上述情况)。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值