2014-04-30 25 views
-2

在套接字中,keepalive不会关闭套接字。客户端发送一个keepalive标志给服务器,如果服务器同意连接不会被关闭。如果我很好地理解了这个概念,客户端只要客户端没有数据要发送,就会向服务器发送一个保活包(包含空数据)。“keepalive”功能如何与套接字一起使用?

但是,何时可以关闭一个插座?

以下是我能想到的

  1. 服务器/客户端的具体情景关闭连接
  2. 超时异常

路由器可以关闭连接?

+0

我们在这里谈论什么应用层协议?路由器通常不会关闭连接。防火墙或IDS可能会将其确定为违反某些规则并发送RST(使用TCP连接)或开始双向丢弃端点组合的数据包。 –

+0

@ MichaelJ.Gray:路由器在一段时间后关闭空闲连接。 FTP是一个臭名昭着的例子。在长文件传输过程中,除非客户端在命令连接上使用TCP保留,否则路由器可能会关闭空闲命令连接,因此路由器不会关闭它。 –

+0

@RemyLebeau我从来没有说过他们没有。我写道他们通常不会。另外,FTP服务器软件通常是空闲连接被终止的原因。如果路由器正在终止空闲连接,并且它不作为直接上游提供者,则它也被广泛认为是错误配置。对于某些类型的连接,ISP通常具有1-2小时的空闲限制,但通常仅适用于那些按需计量或拨打的用户。但是与往常一样,由于基础设施的类型不同,配置因地区而异。 –

回答

2

你混淆了两个不同的东西叫做keepalive。

  1. 在HTTP Keepalive中,它默认从HTTP 1.1开启,客户端必须明确请求关闭它。在HTTP 1.0中没有这样的事情,但有一个非正式的约定要求它:一个Connection: keep-alive头。当使用保持活动状态时,在发送/接收HTTP响应之后,任何一方都关闭连接。当不使用保持活动时,双方关闭连接。

  2. 在TCP keepalive中,TCP堆栈发送的序列号低于已经确认的序列号的字节,这应该引起接收器用当前序列号发送ACK。

在HTTP或TCP中,连接可以在任何时候真正关闭,并且对等端只需检测并处理该连接。

相关问题