首页 文章

unix域套接字是否具有TIME_WAIT状态?

提问于
浏览
0

我在同一台主机上运行服务A和服务B.它们使用TCP环回相互连接 . 每次发送邮件并立即关闭连接时,发件人始终会创建新的TCP连接 . 由于大多数已关闭的连接都处于TIME_WAIT状态,因此在QPS很高的情况下很快就会耗尽短暂的端口 .

我想知道是否使用unix域套接字解决了这个问题 . 它是否与TCP具有相同的TIME_WAIT状态?

1 回答

  • 1

    TIME_WAIT是一种TCP构造,旨在防止由于"half-open"连接导致的问题,或者远程和本地方之间的连接状态未对齐 . 请参见第23页的[3]状态图,p33周围的半开连接 .

    使用Unix套接字,操作系统完全知道套接字两端的连接状态 - 它只是本地的 . 在Unix套接字中没有FIN / FIN-ACK握手,并且没有必要使用TIME_WAIT .

    我不确定TIME_WAIT是否与本地TCP连接一起使用 . 它不一定是必要的,因为Unix套接字不需要它,但可能仍然存在于a)避免针对异常的仅本地情况进行优化,以及b)避免“localhost”TCP连接与远程之间的行为偏差连接 .

    从命令行中快速查看:netstat -anop . 你永远不会看到处于TIME_WAIT状态的unix套接字 . :)

    所以是的:Unix域套接字应解决“时间等待加载”问题 . 如果你的接口只是本地接口,那么Unix套接字的处理开销也会减少 - 在那里可以获得一些轻微的性能提升 . 一旦连接或监听,从API角度来看,它们的行为与TCP套接字无法区分 .

    参考文献:

相关问题