首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时考虑使用端口?

何时考虑使用端口?
EN

Unix & Linux用户
提问于 2016-01-28 21:08:41
回答 1查看 309关注 0票数 2

我正在使用端口,不能在进程重新启动时绑定。我在试图找出端口何时被考虑使用?

只有在收听模式下才会这样吗?如果连接以TIME_WAIT状态打开到端口(或TCP 有限状态机中的任何其他状态),也可能是这样吗?

代码语言:javascript
复制
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   -

所讨论的过程是一个Java进程,它公开了JMX端口。有几个监控代理将请求发送到该端口以获取信息。我希望确保当重新启动发生时(停止之后和启动之前),端口是空闲的,因此不会遇到端口绑定问题。如果该端口上的挂起的TIME_WAIT连接被考虑用于所使用的端口,那么我将在停止和启动之间添加等待,以便在进程启动之前清理这些TIME_WAIT状态。除非还有其他更好的选择。

谢谢

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-01-28 21:20:00

每当有任何套接字绑定到端口时,端口就被视为“正在使用”。他们不需要在听的状态下,只是被捆绑。因此,您看到的TIME_WAIT套接字是计数的。

如果任何套接字被绑定到地址和端口,它会变得更加复杂。如果不同的套接字绑定到不同的地址,则允许将它们绑定到同一个端口。但是,如果有任何套接字绑定到该端口的通配符地址(INADDR_ANY,由netstat显示为*),它将阻止其他套接字绑定到任何地址和同一个端口。

通常,大多数使用侦听套接字的软件都会在这些套接字上设置SO_REUSEADDR套接字选项。这个选项放宽了规则。使用选项集,只有绑定和侦听套接字才能防止另一个套接字绑定到同一个地址。这意味着任何挥之不去的TIME_WAIT和其他套接字都不会阻止软件立即重新启动和重新绑定到同一个端口。

您的Java程序很可能没有在其套接字上设置SO_REUSEADDR,但它应该设置。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/258379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档