Sockets “怎么做?”;“保持活力”;功能与套接字一起工作?

Sockets “怎么做?”;“保持活力”;功能与套接字一起工作?,sockets,Sockets,在套接字中,keepalive不会关闭套接字。客户端向服务器发送keepalive标志,如果服务器同意,连接将不会关闭。如果我能很好地理解这个概念,每当客户端没有数据要发送时,客户端就会向服务器发送一个keepalive包(其中包含空数据) 但是,什么时候可以关闭插座 以下是我能想到的情景 服务器/客户端专门关闭连接 超时异常 路由器能关闭一个连接吗?你把两个不同的东西叫做keepalive混淆了 在HTTP keepalive中,它在HTTP 1.1中默认处于启用状态,客户端必须明确请求将其关

在套接字中,keepalive不会关闭套接字。客户端向服务器发送keepalive标志,如果服务器同意,连接将不会关闭。如果我能很好地理解这个概念,每当客户端没有数据要发送时,客户端就会向服务器发送一个keepalive包(其中包含空数据)

但是,什么时候可以关闭插座

以下是我能想到的情景

  • 服务器/客户端专门关闭连接
  • 超时异常

  • 路由器能关闭一个连接吗?

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

  • 在HTTP keepalive中,它在HTTP 1.1中默认处于启用状态,客户端必须明确请求将其关闭。在HTTP 1.0中没有这样的东西,但是有一个非正式的约定来请求它:一个
    连接:keep-alive
    头。使用保持活动状态时,任何一方都不会在发送/接收HTTP响应后关闭连接。如果未使用keep alive,则双方都会关闭连接

  • 在TCP keepalive中,TCP堆栈发送一个序列号低于已确认序列号的字节,这将促使接收器发送带有当前序列号的确认


  • 在HTTP或TCP中,连接真的可以随时关闭,对等方只需检测并处理它。

    我们在这里讨论的是什么应用层协议?路由器通常不会关闭连接。防火墙或IDS可能会判定它违反了某些规则,并发送RST(在TCP连接上)或开始双向丢弃端点组合的数据包。@MichaelJ.Gray:路由器可以在一段时间后关闭空闲连接。FTP就是一个臭名昭著的例子。在长时间的文件传输过程中,路由器可能会关闭空闲的命令连接,除非客户端在命令连接上使用TCP保持有效,这样路由器就不会关闭它。@RemyLebeau我从来没有说过他们不会。我写道,他们通常不会。此外,FTP服务器软件通常是终止空闲连接的原因。如果一个路由器正在终止一个连接的空闲连接,而该连接不是它的直接上游提供者,那么这也被广泛认为是一种配置错误。对于某些类型的连接,ISP通常有1-2小时的空闲限制,但通常仅适用于按需计费或拨号的连接。但与往常一样,由于不同类型的基础设施,配置因地区而异。@MichaelJ.Gray:想想一个FTP客户端,它位于一个不支持FTP的路由器/防火墙后面(存在大量的路由器/防火墙),连接到外部的FTP服务器。支持FTP的路由器/防火墙分析FTP命令流量,并知道文件传输何时进行,因此它知道在长时间传输期间何时不关闭空闲的命令连接。不支持FTP的路由器/防火墙不会进行这种分析,因此它可以(并且通常会)关闭空闲的命令连接。这与FTP服务器本身无关。