当前位置:   article > 正文

Netty之 windows下使用TCP keepalive_windows keepalive

windows keepalive

TCP保活机制说明

在TCP中有一个Keep-alive的机制可以检测死连接,原理很简单,TCP会在空闲了一定时间后发送数据给对方:

  1. 如果主机可达,对方就会响应ACK应答,就认为是存活的。
  2. 如果可达,但应用程序退出,对方就发RST应答,发送TCP撤消连接。
  3. 如果可达,但应用程序崩溃,对方就发FIN消息。
  4. 如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。这个时间就是默认的二个小时。

TCP保活的目的:

就是为了保证长连接的可靠性,可以通过自己定义的探测频率,对长期无数据交互的长连接进行通道探测,保证连接的可靠和通畅。

TCP保活的优点:

  1. 在代码层面只需要打开或者关闭保活的开关就可以使用
  2. 不需要对方进行任何的回复或者解析,不会增加对方的负担,尤其是在与硬件通信时,不会增加多余的心跳包收发

Windows下TCP KeepAlive 的参数设置

  1. KeepAliveTime: 连接创建之后,经过一段静默时间开始发送keepalive的探测包,KeepAliveTime就代表静默时间长度,单位是ms
    缺省情况下,如果空闲连接在7200000毫秒(2小时)内没有活动,系统就会发送保持连接的消息。 通常建议把该值设
    为1800000毫秒,从而丢失的连接会在30分钟内被检测到。
    具体操作:
    浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters
    子键下创建或修改名为KeepAliveTimeREG_DWORD

  2. KeepAliveInterval:keepAlive没有收到回复之后,重复发送keepAlive的时间间隔,KeepAliveInterval就代表未收到回复的探测时间
    间隔,单位是ms

    缺省情况下,在未收到响应而重新发送“保持连接”的信号之前,系统会等待1000毫秒(1秒),可以根据具体需求修

    具体操作:
    浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在
    Parameters子键下创建或修改名为KeepAliveIntervalREG_DWORD值。

  3. TcpMaxDataRetransmissions:在KeepAlive未收到回复之后,重复发送keepAlive的次数,TcpMaxDataRetransmissions就代表这个
    重发次数

       缺省情况下,系统会重新发送未返回应答的数据段10次,可以根据具体需求修改
    具体操作:
       浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子
       键,在Parameters子键下创建或修改名为TcpMaxDataRetransmissions的REG_DWORD值,该值的范围
       是从0到4294967295,缺省值为5,根据实际情况进行设置。
    实际测试时发现,windows下修改重发次数根本就没有效果,系统依然会默认发送10次,所以想缩短探测时常,只能在参数1和参数2进行修改

Netty打开TCP KeepAlive的开关

bootstrap.childOption(ChannelOption.SO_KEEPALIVE,true);
bootstrap.childOption(NioChannelOption.of(StandardSocketOptions.SO_KEEPALIVE), true);
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/158656
推荐阅读
相关标签
  

闽ICP备14008679号