[Devel] REGISTER & contact maching

Klaus Darilion klaus.mailinglists at pernau.at
Fri Nov 18 10:25:04 CET 2005


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