2012-10-15 2 views
3

우리 제품에서는 SSLSocketFactory를 사용하여 서버에 SSLSocket을 생성하고 있습니다. 서버 소켓을 만들 때 제품 구성에 따라 두 가지 방법 중 하나를 사용합니다.SSLSocketFactory createSocket의 편차의 차이점

(1) 표준 소켓을 생성 한 다음 SSLSocket으로 포장합니다.

SSLSocketFactory factory = ... 
Socket s = new Socket(host, port); 
SSLSocket sslSocket = (SSLSocket)factory.createSocket(s, host, port, true); 

(2) 우리는 단순히 SSL 소켓을 작성합니다

는 테스트 환경에서
SSLSocketFactory factory = ... 
Socket socket = factory.createSocket(host, port); 

두 방법 모두 동일하게 작동합니다. 그러나 다른 고객 사이트에서 어떤 경우에는 메소드 중 하나가 상당한 지연을 초래하는 반면, 다른 메소드는 즉시 (다른 메소드가있을 때마다) 연결된다는 것을 발견했습니다. 일관성이 없으며 때때로 재현 할 수 없습니다.

누구나 이러한 연결 방법과 이론적 인 차이점을 알 수 있습니까? 어떤 상황에서 어느 것이 권장되어야합니까?

답변

1

소켓 프로그래밍의 중요한 지연은 거의 항상 DNS 지연입니다. Java는 DNS 전달뿐만 아니라 DNS 역전을 수행한다는 사실을 알고 있어야합니다. 모든 호스트에서 모든 관련 피어 호스트 이름을 IP 주소로 또는 그 반대로 확인할 수 있는지 확인하십시오. 소켓 또는 InetAddress에 연결하는 지연 또는 두 가지 모두를 발생시키는 지연이 발생합니다. 별도로 처리하면 createSocket (socket, ...) 호출 전에 지연 시간이 표시됩니다. createSocket (host, port, ...)를 호출 해 SSLSocketFactory가 독자적인 Socket를 작성하게하면 (자), 그 시점에서 지연이 발생합니다.

+0

감사합니다. 실제로 DNS가 여기에 중요한 요소가 될 수 있습니다. 그러나 접근 방식 (2)에 대한 접근 방식 (1)과 그 반대의 경우와 트레이드 오프 (trade offs)에 대해 어느시기를 선호해야하는지 구체적으로 알고 싶습니다. – lyaffe

+0

@ user509566 자신이 일반 텍스트 소켓을 만드는 유일한 이유는 SSLSession 전후에 일반 텍스트 네트워킹을하고 싶을 때입니다. 생성하지 않으면'createSocket (host, port, ...)'와 똑같은 방식으로 생성한다. 후드에는 신비가없고 '상반 관계'도 없습니다. – EJP

+0

이전에는 단순 소켓을 만들어 메인 프레임에 만들었으므로 단순한 소켓을 만든 다음 즉시 SSL 소켓을 래핑하여 SSL 소켓을 몇 초 동안 교수형에 처하게 만들었습니다. – lyaffe