文章2:TCP Keepalive 概述

欢迎转载,转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8208793
2,TCP keepalive overview  TCP Keepalive 概述
从字面意思来看:keep tcp alive。这意味着你能够检测你的TCP socket  并检测连接是否在运行或者是否已经被破坏。
2.1 什么是TCP keepalive
     keepalive概念很简单:当建立一个TCP连接时,你将一系列的定时器与该连接相关联。这些定时器中某些用于处理keepalive过程。当keepalive定时器变为0时,你给你的同伴(也就是对方)发送一个keepalive 探针包(probe packet),包内没有数据并且ACK标识打开。另一方面,你会收到一个来自远方主机的回应,该回应没有数据并且设置ACK标识。
     如果你收到一个对于你的keepalive探针的响应,那么就说明连接正在运行,不必担心用户级别的实现。事实上,TCP允许你控制流,没有包及零长度的数据包对于用户程序而言没有危险。
     这个过程是有用的。因为如果其他主机失去连接,你就可以注意到连接时断开的。如果keepalive探针没有被响应,那么就可以断言连接不能被认为是有效的,那么就需要采取正确的操作。
      译者小结:整个keepalive过程很简单,就是client给server发送一个包,server返回给用户一个包。注意包内没有数据,只有ACK标识被打开。这就有点像小情侣聊QQ,常常是小女生向小男生发送一个窗口抖动,男生再给小女生发送一个窗口抖动,这就说明对方在呢,那就继续下面的聊天。如果男生不发送,那么聊天中止。

2.2为什么使用TCP keepalive
     没有keepalive依旧生活很美好,不过既然你在读这篇文章,那就说明你在尝试keepalive是否能解决你现在的问题。
     keepalive是无攻击性的,不过它会产生多余的网络带宽,这就会对于路由和防火墙产生影响。
     接下来,我们会区别keepalive的两项任务:
          1)checking for dead peers
          2)Preventing disconnection due to network inactivity
2.3 checking for dead peers

2.4 Preventing disconnection due to network inactivity

阻止因网络连接不活跃(长时间没有数据包)而导致的连接中断,说的是,很多网络设备,尤其是NAT路由器,由于其硬件的限制(例如内存、CPU处理能力),无法保持其上的所有连接,因此在必要的时候,会在连接池中选择一些不活跃的连接踢掉。典型做法是LRU,把最久没有数据的连接给T掉。通过使用TCP的KeepAlive机制(修改那个time参数),可以让连接每隔一小段时间就产生一些ack包,以降低被T掉的风险,当然,这样的代价是额外的网络和CPU负担。

翻译 http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/   第二部分 TCP Keepalive 概述

你可能感兴趣的:(文章2:TCP Keepalive 概述)