发送保活数据包后,TCP 是否会终止空闲连接
Does TCP kills dead idle connection after keepalive packet is sent
我对TCP keepalive的理解:
这个keepalive并不是真正的“keeping connection alive”。相反,“detectAlive”可能是一个更合适的词:Tcp 级别交换心跳数据包以检测空闲连接是死的还是活的。
这是我的问题:
- TCP知道连接死了后,TCP级别会自动关闭连接吗?
- TCP 知道连接已死后,应用程序层如何知道该信息?通过知道该信息,它因此关闭套接字并释放资源
After TCP knows that the connection is dead, does the TCP level automatically closes the connection?
TCP 是一种协议。它什么都“不知道”。 OS 中的具体实现虽然会检测 TCP 连接是否可以不再交换数据(有或没有负载)(即保持活动状态),并将关闭连接的 local 状态.它不会执行涉及发送 FIN 等的正常 TCP 连接关闭,因为可以假定连接已断开。
After TCP knows that the connection is dead, how does application level know that information? By knowing that infomation it thus close the socket and release the resource
这取决于应用程序。应用程序需要以某种方式监视套接字的状态,即执行写入、读取、select 或类似操作。然后这些函数将不再阻塞,并且可以根据 read/write 或类似的错误代码来确定连接的断开状态。如果应用程序在一段时间内不关心套接字,它只会在再次开始关心时才意识到问题。
我对TCP keepalive的理解:
这个keepalive并不是真正的“keeping connection alive”。相反,“detectAlive”可能是一个更合适的词:Tcp 级别交换心跳数据包以检测空闲连接是死的还是活的。
这是我的问题:
- TCP知道连接死了后,TCP级别会自动关闭连接吗?
- TCP 知道连接已死后,应用程序层如何知道该信息?通过知道该信息,它因此关闭套接字并释放资源
After TCP knows that the connection is dead, does the TCP level automatically closes the connection?
TCP 是一种协议。它什么都“不知道”。 OS 中的具体实现虽然会检测 TCP 连接是否可以不再交换数据(有或没有负载)(即保持活动状态),并将关闭连接的 local 状态.它不会执行涉及发送 FIN 等的正常 TCP 连接关闭,因为可以假定连接已断开。
After TCP knows that the connection is dead, how does application level know that information? By knowing that infomation it thus close the socket and release the resource
这取决于应用程序。应用程序需要以某种方式监视套接字的状态,即执行写入、读取、select 或类似操作。然后这些函数将不再阻塞,并且可以根据 read/write 或类似的错误代码来确定连接的断开状态。如果应用程序在一段时间内不关心套接字,它只会在再次开始关心时才意识到问题。