我对 TCP keepalive 的理解:
这个keepalive并没有真正“保持连接活跃”。相反,“detectAlive”可能是一个更恰当的词:Tcp 级别交换心跳包以检测空闲连接是死的还是活的。
以下是我的问题:
- TCP知道连接死掉后,TCP层会自动关闭连接吗?
- TCP知道连接死了之后,应用层怎么知道这个信息呢?通过知道该信息,它会关闭套接字并释放资源
我对 TCP keepalive 的理解:
这个keepalive并没有真正“保持连接活跃”。相反,“detectAlive”可能是一个更恰当的词:Tcp 级别交换心跳包以检测空闲连接是死的还是活的。
以下是我的问题:
TCP知道连接死掉后,TCP层会自动关闭连接吗?
TCP是一种协议。它“不知道”什么。操作系统中的具体实现将检测 TCP 连接是否不再能够在有或没有有效负载的情况下交换数据(即保持活动状态),并将关闭连接的本地状态。它不会执行涉及发送 FIN 等的正常 TCP 连接关闭,因为可以假设连接已断开。
TCP知道连接死了之后,应用层怎么知道这个信息呢?通过知道该信息,它会关闭套接字并释放资源
这取决于应用程序。应用程序需要以某种方式监视套接字的状态,即执行写入、读取、选择或类似操作。然后这些功能将不再阻塞,并且可以例如基于读/写或类似的错误代码来确定连接的断开状态。如果应用程序在一段时间内不关心套接字,它只会在再次开始关心时才意识到问题。