TCP Keepalive 笔记
来源:互联网 发布:单片机哪种好 编辑:程序博客网 时间:2024/04/25 22:16
TCP Keepalive 笔记
TCP Keep-Alive
参考资料
- TCP-Keepalive-HOWTO
如果 keepalive 的探测返回一个错误,将会向上反映到应用中(例如read()返回错误),事实上本功能应该被称为“切断”(mark-dead)而不是“保持存活”,因为keepalive的作用正是为了发现那些不可用的连接并关闭它。
场景
对端可达并且应用存活
对端的TCP响应本次探测,本机的TCP将重制keepalive的超时时间(默认为两小时),如果期间有应用数据传输,则重置超时计时器
对端不可达
一段时间内(默认75秒)收不到对端响应,重发探测包,如果多次重发(默认情况下重发8次)仍然收不到响应,则返回应用错误信息, 如果没有收到任何响应,则返回应用错误ETIMEOUT,如果收到ICMP错误,则返回相应的错误信息,例如"host unreachable"的ICMP信息会导致应用收到错误 EHOSTUNREACH
对端可达但应用已经退出
对端返回RST,返回应用错误信息 ECONNRESET
设置
TCP keep-alive 特性通过socket的 SO_KEEPALIVE 选项设置,默认情况下该特性是关闭的。 通过 /proc 文件系统可以调整keepalive的几个参数
- /proc/sys/net/ipv4/tcp_keepalive_time 超时时间, 默认7200秒
- /proc/sys/net/ipv4/tcp_keepalive_intvl 探测间隔, 默认75秒
- /proc/sys/net/ipv4/tcp_keepalive_probes 探测次数, 默认 9
因此 tcp_keepalive_intvl * tcp_keepalive_probes 决定了在探测开始后多长时间内没有收到响应会导致连接超时错误,默认情况下为 75 * 9 = 11分15秒.
以上的设置方法是全局生效的,即调整后影响到整个系统的所有开启了keepalive选项的TCP连接,自linux 2.4的内核开始,这些选项可以被单独指定到各个socket上, 方法也是通过setsockopt()函数,通过 IPPROTO_TCP level 的以下几个参数来设置(详见 man tcp):
- TCP_KEEPIDLE 超时时间,即对一个连接进行有效性探测之前运行的最大非活跃时间间隔
- TCP_KEEPCNT 探测次数
- TCP_KEEPINTVL 探测间隔
- TCP Keepalive 笔记
- TCP keepalive
- tcp keepalive
- TCP keepAlive
- TCP keepalive
- TCP keepalive
- tcp Keepalive
- TCP KeepAlive
- Tcp KeepAlive
- TCP Keepalive
- tcp keepalive
- tcp/ip学习笔记--第23章 TCP keepalive Timer
- TCP心跳 | TCP keepAlive
- tcpip详解笔记(20) TCP的Keepalive定时器
- TCP的KeepAlive
- TCP Keepalive HOWTO
- TCP keepAlive 详解
- TCP KEEPALIVE详解
- Higher Math
- 12月3号面试题记录
- fecn-create和fecn-adapt的作用
- 基于visual Studio2013解决C语言竞赛题之0904文件排序
- wikioi 1042 进制转换
- TCP Keepalive 笔记
- SRM 599 DIV2 950
- Problem 56: 某种序列(大数加法+数列)
- Windows下Emacs+ Distel的配置
- pache 合理配置KeepAlive选项对服务器性能的影响
- openresty php luajit
- struts整合spring插件出现如下异常:Unable to load jar:struts2-spring-plugin-2.3.15.3.jar!/struts-plugin.xml
- 开发者的义不容辞
- 我们是幸福的