Java RMI和netstat输出

时间:2017-02-27 04:36:19

标签: java linux rmi firewall netstat

我正在尝试让我的RMI服务在防火墙上运行。我按照this answer中的说明在端口1099上运行RMI注册表和我的RMI服务,但是,当我netstat时,我看到在RMI客户端和服务器上打开了不同的端口号。

[user@machine] ~ $ netstat -ant | grep 1099
tcp6       0      0 :::1099                 :::*                    LISTEN     
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33400        ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.1:33378        ESTABLISHED
tcp6       0      0 10.1.1.1:33408        10.1.1.1:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.1:33408        ESTABLISHED
tcp6       0      0 10.1.1.1:46866        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33404        ESTABLISHED
tcp6       0      0 10.1.1.1:33378        10.1.1.1:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46862        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46864        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33402        ESTABLISHED
tcp6       0      0 10.1.1.1:46860        10.1.1.2:1099         ESTABLISHED

10.1.1.1和10.1.1.2都是RMI服务器和客户端相互通信。

这是我的代码段:

  

IRemoteService stub =(IRemoteService)   UnicastRemoteObject.exportObject(service,1099);

     

registry = LocateRegistry.createRegistry(1099);

     

registry.rebind(IRemoteService.serviceName,stub);

这是预期的吗?为什么我看到端口#的像33400,33378等?或者我对源端口和目标端口的工作原理有何不妥?我希望看到所有连接(注册表查找和远程服务调用)只到端口1099。

注意:我还没有在防火墙环境中运行上述内容,只是在我尝试防火墙情况之前尝试在我的实验室本地。

1 个答案:

答案 0 :(得分:1)

tcp6       0      0 10.1.1.1:1099         10.1.1.2:33400        ESTABLISHED

端口33400上的客户端与端口1099上的服务器之间的连接。你不能单独从这一行告诉你,但你提到使用1099的RMI,并且会有一个1099 LISTENING的前一行。

tcp6       0      0 10.1.1.1:1099         10.1.1.1:33378        ESTABLISHED

端口33378上的客户端与端口1099上的服务器之间的连接。与上面相同。

tcp6       0      0 10.1.1.1:33408        10.1.1.1:1099         ESTABLISHED

端口33408上的客户端与端口1099上的服务器之间的连接。与上面相同。如果客户端位于不同的主机上,则此行仅显示在客户端主机上。

tcp6       0      0 10.1.1.1:1099         10.1.1.1:33408        ESTABLISHED

该连接的另一面。此行仅显示在服务器主机上。

tcp6       0      0 10.1.1.1:46866        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33404        ESTABLISHED
tcp6       0      0 10.1.1.1:33378        10.1.1.1:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46862        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46864        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33402        ESTABLISHED
tcp6       0      0 10.1.1.1:46860        10.1.1.2:1099         ESTABLISHED

等等。

  

这是预期的吗?

  

为什么我看到端口#的像33400,33378等?

因为连接有两端:服务器端和客户端,客户端端口通常是相当随机选择的。

  

或者我对源端口和目标端口的工作原理有何不妥?我希望看到所有连接(注册表查找和远程服务调用)只到端口1099。

他们是。但是这些连接有客户端。

这实际上是关于TCP和netstat的问题,而不是RMI或Java。