[Devel] REGISTER & contact maching

Klaus Darilion klaus.mailinglists at pernau.at
Fri Nov 18 12:03:09 CET 2005


I still do not get it. We have to start with an empty location table. 
Thus, no records yet.

phone1 registers -> 1 records
phone2 registers -> rule 2.2 matches, still 1 record

So how do we get the second record?

klaus

Bogdan-Andrei Iancu wrote:
> Hi Klaus,
> 
> it can happen...if you have a user (userX) with 2 phones behind NATs 
> with same configuration:
> 
>    userX
>          phone1: NAT xxx.xxx.xxx.xxx ;private IP 192.168.3.4 -> contact 
> = sip:userX at 192.168.3.4
>          phone2: NAT yyy.yyy.yyy.yyy ;private IP 192.168.3.4 -> contact 
> = sip:userX at 192.168.3.4
> 
> so, for AOR userX at domian, you will have two identical records (as contact).
> 
> The idea is not to refresh in this context, but to keep two records 
> (differentiated by source IP and callid). After all there are 2 separate 
> phones. That's the idea behind (2.1).
> 
> 
> now...about using IP:port ...port is not reliable to be used since it 
> may be changed by NATs; Scenario: a phone registers contact 
> sip:userX at 192.168.3.4 and get external bind on xxx.xxx.xxx.xxx:5060; if 
> the phone is crashes or powers down, etc and register again with same 
> contact, but it will may get a different bind xxx.xxx.xxx.xxx:5061. In 
> this case is essential to match the original contact and to perform 
> refresh instead of adding a new contact record - especially in 
> configurations where multiple registrations are forbidden.
> 
> I'm still doing some research on this topic - Daniel pointed me out an 
> interesting section in RFC 10.3.
> 
> regards,
> bogdan
> 
> Klaus Darilion wrote:
> 
>> Hi Bogdan!
>>
>> If I understand the algorithm correctly, 2.1 can never happen.
>>
>> 1 user, 2 phones: the first phone registers -> rule 2.3 will be used
>>
>> the second phone registers (same NAT settings, same private IP:port)
>> --> rule 2.2 will be used, the existing contact will be refreshed.
>>
>> Thus, with this algorithm there can't be 2 matching records (2.1)
>>
>> Why not use always the rcv_ip:rcv_port instead of the real contact?
>>
>> regards
>> klaus
>>
>> Bogdan-Andrei Iancu wrote:
>>
>>> Hi,
>>>
>>> I would like to bring into attention an issue that was large debated 
>>> previously, but postponed for after the released : contact matching 
>>> in USRLOC.
>>>
>>> There are several problems with the current mechanism, problems well 
>>> underlined by Dan in his original email:
>>>    http://openser.org/pipermail/devel/2005-October/000645.html
>>>
>>> the discussion stuck when came about the new matching algorithm. The 
>>> basic idea is to use more info for matching: now only contact is used 
>>> and the idea is to expend it to (contact, callid, source_addr). there 
>>> were several proposal about the matching algorithms , each being 
>>> different by the ordering of the info to be used for matching.
>>>
>>> I thing the top requirement for the new algorithm is efficiency (as 
>>> it is for the rest of openser): so the algorithm must be optimised 
>>> for the general cases and in the same time to be able to cope with al 
>>> corner cases.
>>>
>>> Based on this, and on former proposal from Dan an Klaus, I suggest 
>>> the following algorithm:
>>>    1) once the AOR is identified, we have a set of records (with 
>>> contacts, callids, source IP, etc)
>>>    2) at first step use the contact. The result may be:
>>>          2.1) several records match (that may be the case of a client 
>>> registering from behind NATs with same configurations)
>>>          2.2) one record matched -> match; exit;
>>>          2.3) none -> no match; exit!
>>>    3) if we have more than one record matching so far, we will use 
>>> the source IP (only IP without port); this will be able to 
>>> distinguish between the contacts of same client registered from 
>>> behind NATs with same configurations; see 2.1) . Why only the IP part 
>>> and not also the port? in order to avoid seeing as separate records 
>>> same contact which was routed by NAT via different ports - avoid 
>>> record duplication. The result may be:
>>>          3.1) several records still match (that may be the case of a 
>>> client registering from behind
>>>               NATs - more than one level- with same configurations)
>>>          3.2) one record matched -> match; exit;
>>>          3.3) none - source IP changed
>>>    4) for 3.1) and 3.3) cases proceed with callid matching. The 
>>> result may be:
>>>          4.1) more than one...I thing is rather bogus, but we can 
>>> choose the first one -> matched ; exit
>>>          4.2) one -> matched ; exit
>>>          4.3) none -> not matched ; exit
>>>
>>> looks complicated, but not so much. The general cases will exit via 
>>> 2.2) or 2.3). Then "common" corner cases generated by NATs will exit 
>>> via 3.2) and highly corner cases (multiple level NAT with special 
>>> config  + IP changing) will exit via 4.2) or 4.1)
>>>
>>>
>>> I would like to have some comments on this like:
>>>    case which are not covered (example please)
>>>    optimisation (example please)
>>>
>>> ...and to proceed to facts ;)
>>>
>>>
>>> regards,
>>> bogdan
>>>
>>> PS: no reply means everybofy agree eith it :D
>>>                _______________________________________________
>>> Devel mailing list
>>> Devel at openser.org
>>> http://openser.org/cgi-bin/mailman/listinfo/devel
>>>
>>>
>>
>>
> 
> 




More information about the Devel mailing list