Linux下TCP的keepalive机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asty9000/article/details/81612285

概述

当建立TCP链接后,如果应用程序或者上层协议一直不发送数据,或者隔很长一段时间才发送数据,当链接很久没有数据报文传输时就需要通过keepalive机制去确定对方是否在线,链接是否需要继续保持。当超过一定时间没有发送数据时,TCP会自动发送一个数据为空的报文给对方,如果对方回应了报文,说明对方在线,链接可以继续保持,如果对方没有报文返回,则在重试一定次数之后认为链接丢失,就不会释放链接。

主要参数

net.ipv4.tcp_keepalive_time:单位秒,表示发送探测报文之前的链接空闲时间,默认为7200。
net.ipv4.tcp_keepalive_intvl:单位秒,表示两次探测报文发送的时间间隔,默认为75。
net.ipv4.tcp_keepalive_probes:表示探测的次数。
net.ipv4.tcp_syncookies:是否开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,1表示开启,0表示关闭,默认为0。
net.ipv4.tcp_tw_reuse:是否开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接,1表示开启,0表示关闭,默认为0。
net.ipv4.tcp_tw_recycle:是否开启TCP连接中TIME-WAIT sockets的快速回收,1表示开启,0表示关闭,默认为0。
net.ipv4.tcp_max_tw_buckets:表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息,默认为180000。
net.ipv4.tcp_fin_timeout:修改系统的TIMEOUT时间。
net.ipv4.ip_local_port_range:表示用于向外连接的端口范围。默认为32768 61000(32768到61000)。
net.ipv4.tcp_max_syn_backlog:表示SYN队列的长度,默认为1024。
net.ipv4.tcp_syn_retries:新建TCP连接请求时,尝试发送多少次syn连接请求才决定放弃建立连接,默认值是5。
net.ipv4.tcp_synack_retries:对于远端SYN连接请求,内核会发送SYN+ACK数据包来确认收到了上一个SYN连接请求包,然后等待远端的确认,该值指定了内核会向远端发送多少次SYN+ACK数据包,默认设定值是5。

TCP socket可以通过setsockopt针对单独的socket进行设置:

TCP_KEEPIDLE:对应tcp_keepalive_time。
TCP_KEEPINTVL:对应tcp_keepalive_time。
TCP_KEEPCNT:对应tcp_keepalive_time。

 

猜你喜欢

转载自blog.csdn.net/asty9000/article/details/81612285
今日推荐