C# 通过Internet保持TCP/IP连接套接字的活动状态-何时?怎样?多少钱?
更新:如果您想保存冗长的序言,请跳到答案 TCP/IP连接保持有效期指定为至少每两小时一次:。问题是这本书写于1989年,关注的是发送额外KeepAlive数据包的成本!然而,在一段时间的不活动之后,大多数操作系统按照规范发送KeepAlives到连接的套接字的默认时间仍然是这样!当然,现在大多数连接超时的方式早于此,如果处于非活动状态,并且如果通过Internet连接到对等连接,则在您不知情的情况下死亡(尽管设置的超时值高于此值-我怀疑是因为中间的路由器表不想让它保持活动状态-我一直想知道泄漏的最后一条消息去了哪里…更新:原因是可能位于您或远程主机端的“路由器”是“有状态”的,并且连接感知,并且在有一段时间不活动-你在互联网上通过的路由器不能断开你的连接-他们不关心-数据包只是发送到它必须去的地方)。因此,我看到了两种在互联网上保持连接活动的常见解决方案: 1) 忽略(编辑:正如我所指出的,这不是忽略规范,只是更改默认值)规范,并将系统范围内的KeepAlive间隔更改为小于2小时,或者2)实施自己的“KeepAlive”系统定期轮询对等方 不管怎样;什么是发送KeepAlive的合适时间(不活动的时间)?从1秒到默认的2小时,我都看过了。似乎这个数字被大拇指吸走了。。。如果我有一个客户端应用程序从世界任何地方连接,那么什么是安全和合理的周期(我想要一个单一的持久连接)?通过互联网连接到世界另一端的一个多跳的对等点连接在301秒时断开(尽管你只有在尝试发送内容时才知道这一点),因此将时间设置为300秒似乎是一个神奇的数字-我在死前1秒获得了保留时间-这一间隔从未让我失望。。但它安全吗 编辑:我在C#3.0中实现了这个特殊的连接,所以在欢迎中编写代码 TCP/IP连接保持有效 指定最多每两周一次 时间 它不是这么说的。它说,“这个时间间隔必须是可配置的,并且必须默认不少于两个小时。” 问题是这是用英文写的 1989年,他担心成本问题 发送额外的KeepAlive数据包 将保持活动设置为可选和2小时默认值(如果提供)的真正原因是#(2)在该原因列表中-TCP/IP应该能够在中间设备临时中断、重新路由等情况下生存。它是一种有用的机制,例如Telnet服务器可以检测丢失的客户端 忽略规格,更改您的 到的系统范围保持间隔 少于2小时 这不是“忽略规范”,而是更改默认值 大多数需要长期连接的应用程序要么在自己的应用程序协议中提供ping,要么使用连接失败后仍能生存的连接池。 当您想防止连接断开时 如何 通过在一段不活动的时间后发送某些内容,可以发送TCP/IP保持活动,也可以自己发送某些内容(由于设置发送TCP/IP保持活动的时间段将在系统级别应用于所有连接的套接字,而不是在应用程序级别应用,因此建议这样做) 多少钱 一根绳子有多长?首先,您必须了解连接断开的原因: 断开连接的原因是: 家庭/商业“路由器”和防火墙是“有状态”和连接感知的,在一段时间不活动后,它们往往会断开外部TCP连接 因此,它与您的应用程序或TCP/IP本身无关,而是与您的连接所通过的硬件或软件有关。您可以对家庭/商业设备/软件可能经历的典型不活动期进行一些研究,以断开连接(请参见下面的列表)。但是,如果对等方可能是Internet上的任何用户: 最终,如果您不知道他们使用的是什么设备/软件:允许客户端设置他们自己的非活动期(在此期间发送内容以保持连接处于活动状态)。 或以短时间间隔(不活动)发送KeepAlives(或您的等效物),以适应所有情况(尽管不必要的流量是件坏事,但现在每隔几秒钟不活动的额外数据包是沧海一粟,移动网络除外)。但请注意,根据TCP/IP规范,它应该能够经受住临时停机,因此将其设置得过低可能会产生无法经受住临时停机的不良影响,原因如下: 收紧keepalive参数的缺点是 大幅限制TCP在电缆中断情况下的恢复能力。会议 其两端都处于活动状态并准备正常运行,即使 中间电缆或路由器断开连接几分钟。如果 您已经告诉服务器疯狂地发送keepalives,它将注意到 电缆断开和断开连接会话,否则会幸存下来 很好 但是,如果您的计算机正在进行一些通信,那么您将有一个中断,因此您必须处理这个问题,我认为这个问题已经过时了,因为今天的持续连接不会出现临时中断(它们更可能是永久性的,即断开电缆)(而不是不可靠的拨号连接)。你应该有一个ou吗C# 通过Internet保持TCP/IP连接套接字的活动状态-何时?怎样?多少钱?,c#,sockets,tcp,C#,Sockets,Tcp,更新:如果您想保存冗长的序言,请跳到答案 TCP/IP连接保持有效期指定为至少每两小时一次:。问题是这本书写于1989年,关注的是发送额外KeepAlive数据包的成本!然而,在一段时间的不活动之后,大多数操作系统按照规范发送KeepAlives到连接的套接字的默认时间仍然是这样!当然,现在大多数连接超时的方式早于此,如果处于非活动状态,并且如果通过Internet连接到对等连接,则在您不知情的情况下死亡(尽管设置的超时值高于此值-我怀疑是因为中间的路由器表不想让它保持活动状态-我一直想知道泄漏
App | KeepAlive sent after | configurable | ref
--------------------------------------------------------------
Telnet | 600 seconds | Y | http://www-01.ibm.com/support/docview.wss?uid=nas14adccb91a24d9ed28625694900513857
MS RDP | ?
Device/SW | dropped after | configurable | ref
--------------------------------------------------------------
Windows 2003 Firewall | 24 hours | ? | http://technet.microsoft.com/en-us/library/cc755604(WS.10).aspx
SonicWall TZ100/200 | 5 mins | Y | http://www.sonicwall.com/downloads/SonicWALL_TZ_100_200_Series_Getting_Started_Guide.pdf
Netgear FR114P | 5 mins | N | http://www.broadbandreports.com/forum/remark,4182300
Cisco ASA | 1 hour | Y | http://www.cisco.com/c/en/us/td/docs/security/asa/asa91/configuration/firewall/asa_91_firewall_config/conns_connlimits.html