2012-12-10 2 views
0

Windows와 함께 제공되는 WinLDAP.DLL을 사용하여 다른 LDAP 서버 (1x OpenLDAP, 1x Active Directory)에 연결합니다. 프로그래밍 언어는 Delphi이지만 여기서는 관련이 없습니다.ldap_connect가 왜 느려 집니까?

여러 구성에서 IP 주소 대신 서버 이름을 사용하면 "ldap_connect"호출이 실제로 느립니다 (6-7 초). 같은 서버에 대해 핑 (ping)을하거나 nslookup을 만드는 것은 느리지 않습니다. 왜 LDAP 연결로 느려 집니까? 문제를 확인하기 위해 확인할 수있는 것들이 있습니까?

: WMware는 컴퓨터에 2 개의 가상 이더넷 어댑터를 설치했습니다. 이러한 어댑터를 비활성화하면 ldap_connect가 2-3 배 빨라집니다. 문제를 완전히 해결하는 것은 아니지만 설명을 찾는 데 도움이 될 수 있습니다.

+0

당신이 당신의 "연결 문자열"이 무엇인지 우리에게 보여 주시겠습니까? 나는. serverless 바인딩 (domain.lab)을 만들거나 도메인 컨트롤러의 이름을 지정합니까? 또는 프로그램의 ldap_bind/ldap_init/ldap_connect 부분을 표시하는 것이 좋습니다. 또한 귀하의 dev 컴퓨터가 AD 도메인에 가입되어 있습니까? –

+0

또한 LDAP 서버에 연결할 때 Netbios 또는 DNS 이름을 사용하고 있습니까? –

+0

2 wireshark/tcpdump 추적을 수행하여 지연을 확인할 수 있습니다. 하나는 컴퓨터에서, 다른 하나는 LDAP 서버에서 수행합니다. – whosrdaddy

답변

1

거의 틀림없이 DNS 구성이 잘못되었습니다. nslookup 및 역방향 조회 시간을 확인하십시오.

+0

답변을 주셔서 감사 합니다만 nslookup 요청은 항상 빠릅니다. 지금까지 나는 ldap 연결에 대해서만 문제를 보았습니다. – Name

1

LDAP 서버가 reverse DNS lookup 일 가능성이 큽니다.

+0

감사합니다. 왜 nslookup이 빠르며 ldap이 느린 지에 대한 설명 일 수 있습니다. 링크의 제안을 살펴 보겠습니다. 하지만 OpenLDAP와 AD 서버에서 동일한 문제가 발생하기 때문에 문제는 서버 측이 아니라 클라이언트 측에서 발생할 수 있습니다 (그러나 나는 무엇이 될 수 있는지 알지 못합니다 ...) – Name

0

IP 주소 대신 서버 이름을 사용하면 왜 연결 속도가 느려지는지 아직도 알 수 없습니다. 그러나이 문제를 해결하기 위해 WINLDAP.dll이하는 대신 IP 주소를 직접 해결하기로 결정했습니다.

그것은 단순히 이와 같은 기능을 사용하여 달성 할 수 있습니다

function GetIPAddress(const HostName: AnsiString): AnsiString; 
var 
    HostEnt: PHostEnt; 
    Host: AnsiString; 
    SockAddr: TSockAddrIn; 
begin 
    Result := ''; 
    Host := HostName; 
    if Host = '' then 
    begin 
    SetLength(Host, MAX_PATH); 
    GetHostName(PAnsiChar(Host), MAX_PATH); 
    end; 
    HostEnt := GetHostByName(PAnsiChar(Host)); 
    if HostEnt <> nil then 
    begin 
    SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^); 
    Result := inet_ntoa(SockAddr.sin_addr); 
    end; 
end; 
관련 문제