2017-02-27 13 views
0

방화벽을 통해 내 RMI 서비스를 작동 시키려고합니다. 나는 this answer의 지침을 따라 포트 1099에서 RMI 레지스트리와 내 RMI 서비스를 모두 실행했지만 아직까지는 netstat 일 때 다른 포트 번호가 RMI 클라이언트와 서버에서 열리고 있습니다.자바 RMI 및 netstat 출력

[[email protected]] ~ $ 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 스텁 = (IRemoteService) UnicastRemoteObject.exportObject를 (서비스, 1099);

registry = LocateRegistry.createRegistry (1099);

registry.rebind (IRemoteService.serviceName, stub);

예상 되나요? 33400, 33378 등의 포트 번호를 보는 이유는 무엇입니까? 또는 출발지와 목적지 포트가 어떻게 작동하는지 이해하고 있습니까? 모든 연결 (레지스트리 조회 및 원격 서비스 호출)이 포트 1099로만 연결되기를 기대하고있었습니다.

참고 : 위의 방화벽 환경에서는 아직 실행하지 않았으며 방화벽 상황에서 시도하기 전에 실험실에서 로컬로 시도했습니다.

답변

1
tcp6  0  0 10.1.1.1:1099   10.1.1.2:33400  ESTABLISHED 

포트 33400에 클라이언트 사이의 연결 및 당신은 1099을 사용하는 RMI를 언급하고, 1099과 이전 라인이 있었을 것이다 그러나 혼자이 라인에서 해당 말할 수 없습니다 포트 1099의 서버 청취.

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가 아닙니다.

+0

내 진짜 질문은 '33404' (10.1.1.1:1099'->'10.1.1.2:33404)와 같은 포트가 1099와 다른 방화벽에서 열리도록해야 할 것 같습니까? –

+0

방화벽 (클라이언트 포트 (33408, 33404 등)이 아닌 서버 포트 (1099) 만 열어야한다고 말하고 있습니까? –

+0

나는 방화벽에 관해서 아무 말도하지 않았으며 나는 완전히 그리고 완전히 알레르기 반응을 보였다. 그래서 대답은 불가피하게 '아니오'인 것처럼 여기에있다. * 새 * 질문에 대해서는 서버 측 방화벽이 1099 (그리고 이전 질문에 대해 10991)에서 인바운드 연결을 허용해야합니다. 클라이언트 측 방화벽은 해당 포트로의 아웃 바운드 연결을 허용해야합니다. 어느 방화벽도 소스 포트에 대해 어떠한 판결도 내리지 않아야합니다. 그렇게함으로써 얻을 수있는 것은 없습니다. – EJP