kra*_*fts 2 networking process administration socket
我正在使用的端口无法在进程重新启动时绑定。我想知道何时考虑使用端口?
是否仅在 LISTEN 模式下?如果连接在 TIME_WAIT 状态(或 TCP有限状态机中的任何其他状态)下打开到端口,也可以吗?
tcp 0 0 127.0.0.1:7199 0.0.0.0:* LISTEN 30099/java
tcp 0 0 192.168.1.2:9160 0.0.0.0:* LISTEN 30099/java
tcp 0 0 192.168.1.2:58263 192.168.1.2:9042 TIME_WAIT -
tcp 0 0 192.168.1.2:58262 192.168.1.2:9042 TIME_WAIT -
tcp 0 0 ::ffff:192.168.1.2:9042 :::* LISTEN 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57191 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57190 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:10.176.70.226:37105 ESTABLISHED 30099/java
tcp 0 0 ::ffff:127.0.0.1:42562 ::ffff:127.0.0.1:7199 TIME_WAIT -
tcp 0 0 ::ffff:192.168.1.2:57190 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:57198 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:10.176.70.226:37106 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:57197 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:57191 ::ffff:192.168.1.2:9042 ESTABLISHED 30138/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57198 ESTABLISHED 30099/java
tcp 0 0 ::ffff:192.168.1.2:9042 ::ffff:192.168.1.2:57197 ESTABLISHED 30099/java
tcp 0 0 ::ffff:127.0.0.1:42567 ::ffff:127.0.0.1:7199 TIME_WAIT -
Run Code Online (Sandbox Code Playgroud)
有问题的进程是一个暴露 JMX 端口的 Java 进程。并且有一些监控代理向该端口发送请求以获取信息。我想确保当重启发生时(在停止之后和开始之前)端口是空闲的,所以它不会遇到端口绑定问题。如果正在使用的端口考虑该端口上挂起的 TIME_WAIT 连接,那么我将在停止和启动之间添加等待,以便在进程开始之前清除那些 TIME_WAIT 状态。除非有另一个首选选项。
谢谢
只要有任何套接字绑定到端口,就认为该端口“正在使用”。他们不必处于 LISTEN 状态,只需绑定即可。因此,您看到的 TIME_WAIT 套接字确实很重要。
如果任何套接字绑定到地址和端口,它会变得有点复杂。如果不同的套接字绑定到不同的地址,则允许它们绑定到同一个端口。但是,如果有任何套接字绑定到该端口的通配符地址(INADDR_ANY
,显示为netstat
as *
),它会阻止其他套接字绑定到任何地址和同一端口。
通常,大多数使用侦听套接字的软件都会SO_REUSEADDR
在这些套接字上设置套接字选项。此选项放宽了规则。设置该选项后,只有绑定和侦听套接字才能防止另一个套接字绑定到同一地址。这意味着任何延迟TIME_WAIT
和其他套接字都不会阻止软件重新启动并立即重新绑定到同一端口。
您的 Java 程序很可能没有SO_REUSEADDR
在其套接字上设置,但它应该。
归档时间: |
|
查看次数: |
280 次 |
最近记录: |