2014-02-28 4 views
1

다운 스트림 UAS에서 401 응답을 프록 싱 할 때 예상되는 SIP 프록시의 동작에 대한 설명이 포함되기를 기대합니다.SIP 프록시 401 응답 처리

SIP 프록시는 라운드 로빈 방식으로 요청을 프록시 처리하도록 구성됩니다. 다운 스트림 UAS가 401을 사용하여 INVITE에 응답하는 경우 원래의 업스트림 UAC가 인증 자격 증명을 포함하는 두 번째 INVITE를 보낼 때 SIP 프록시가 대상과 동일한 UAS를 선택하기에 충분한 상태를 유지할 것으로 기대합니다.

대신 SIP 프록시가 401 응답을 프록시하고, 업스트림 UAC에서 ACK를 받고, 즉시이 대화 상자와 관련된 모든 상태를 삭제합니다. 그런 다음 업스트림 UAC가 인증 자격 증명을 사용하여 두 번째 INVITE를 보내면 SIP 프록시는 해당 요청을 라운드 로빈 방식으로 전달합니다. 운이 좋으면 SIP 프록시는 두 번째 INVITE에 대해 동일한 UAS를 선택하지만 대부분의 경우 다른 다운 스트림 대상을 선택합니다.

저는 SIP에 익숙하지 않으며 RFC 3261을 읽고 올바른 행동이 무엇인지 이해하려고 시도했지만 명확한 대답은 없습니다.

답변

0

당신이 정말로 묻는 것은 대화 내에서의 추가 요청이 어떻게 작동하는지 이해하는 것입니다. 이를 위해 "Record-Route"/ "Route"헤더를 이해해야합니다.

정말 응답 코드가 무엇인지 모릅니다. 대화 상자의 다음 요청은 제공된 라우트 세트가 아니라면 원격 URI로 직접 이동합니다 (거의 항상 존재합니다). RFC 3261의 섹션 12에서

는 :

경로 설정 피어에 요청을 보내 로 이송 될 필요가 서버의 목록입니다. 루트

20.34에서

4. Record-Route 

    If this proxy wishes to remain on the path of future requests 
    in a dialog created by this request (assuming the request 
    creates a dialog), it MUST insert a Record-Route header field 
    value into the copy before any existing Record-Route header 
    field values, even if a Route header field is already present. 

전달

섹션 16.6 요청에서

루트 헤더 필드는 프록시 나열된 세트를 통해 요청 대한 라우팅을 강제로 사용 . Route 헤더 필드의 사용 예는 16.12.1 절에 있습니다.

경로 세트가 역순으로 촬영 한 모든 을 보존, 응답의 기록 루트
헤더 필드에서의 URI 목록으로 설정해야합니다

12.1.2 UAC 동작에서 URI 매개 변수. 응답 헤더 필드가
에 없으면 라우트 세트를 빈 세트로 설정해야합니다 (MUST). 이 경로 은 비어있는 경우에도이 대화 상자에서 향후
개의 요청에 대해 설정된 기존 경로를 무시합니다.

부터 16.반대로 로컬 정책의 부재

가공 프록시 경로 (12)의 개요는
프록시 루트 헤더 필드를 포함하는 요청을 수행하는 처리
는 다음과 같이 요약 될 수있다.

1. The proxy will inspect the Request-URI. If it indicates a 
     resource owned by this proxy, the proxy will replace it with 
     the results of running a location service. Otherwise, the 
     proxy will not change the Request-URI. 

    2. The proxy will inspect the URI in the topmost Route header 
     field value. If it indicates this proxy, the proxy removes it 
     from the Route header field (this route node has been 
     reached). 

    3. The proxy will forward the request to the resource indicated 
     by the URI in the topmost Route header field value or in the 
     Request-URI if no Route header field is present. The proxy 
     determines the address, port and transport to use when 
     forwarding the request by applying the procedures in [4] to 
     that URI. 

어떻게 작동하는지에 대한이 example를 참조하십시오.

기본적으로 초기 요청은 다음 요청에서 "Route"헤더를 생성하는 데 사용되는 "Route-Set"을 작성해야합니다.

"Route-Set"이 빌드되지 않았거나 응답에서 다시 보내지거나 UAC가 요청을 빌드하기 위해 원격 대상 및 라우트를 사용하지 않는 것으로 들립니다. 다음 요청에 대해 -URI 및 Route 헤더를 올바르게 지정하십시오.

strict and loose routing의 차이점도 있습니다. 여기에도 역시 적용될 수 있습니다. 나는 당신이 lr tho를 사용할 것이라고 생각합니다.

+0

레코드 경로 또는 경로 헤더가 교환의 어디에도 삽입되어 있지 않은 것이 옳습니다. 그러나 이것이 왜 필요한지 궁금합니다. 레코드 경로는 프록시에 의해서만 삽입되므로 프록시 뒤의 다음 홉이 다른 프록시가 아니라 원격 URI (프록시가로드 균형 조정기 인 경우)와 같은 경우에는 레코드 경로 헤더에 분명히 나열되지 않습니다 . 프록시는 두 번째 INVITE를 올바르게 처리하기 위해 이전 선택을 기억해야합니다. 두 번째 INVITE에 첫 번째 INVITE의 "To-tag"가 없으므로 관련이있을 수 있습니다. – bs1982

+0

레코드 경로 추가가 작동 중입니다. 따라서 루프에서 "빠져 나갈"수있는 프록시의 경우, 예를 들어 레코드 경로를 추가하지 않습니다. 누가 잘못되었는지 알기가 어렵습니다. Record-Route에 추가하지 않는다면 sip 프록시라고 할 수 있습니다. 초대를 처리하는 주 프록시를 비난 할 수 있습니다. 인증이 "훌륭하게"구현되면 어떤 프록시가 INVITE를 얻는지는 문제가되지 않으며 인증을 성공적으로 통과했는지 여부를 확인할 수 있어야합니다. –

+0

요청이 서명 된 경우 사임하지 않으면 요청을 수정할 수 없다는 문제도 있습니다. 따라서 중간에있는 프록시는 상태가 없거나 요청을 인증하는 방법을 알고 있어야합니다. –

관련 문제