SIP – Loose routing ile çağrı yönlendirme

Şimdi örnek bir SIP çağrısı yapalım ile proxy loose routing nasıl çalışıyor ona bakacağız. Örneğimizde ben(caller-uac) arkadaşımın telefonunu(called-uas) arayacağım ve arada 2 tane P1 ve P2 isimlerinde proxy bulunmakta.

Öncelikle, arkadaşımı aramak istiyorum ama, arkadaşımın adresini bilmiyorum, bu yüzden bir tane INVITE oluşturup Proxy P1 e gönderiyorum. “Contact” header kısmına ise kendi adresimi koyuyorum.

INVITE sip:[email protected] SIP/2.0.
Contact: <sip:[email protected];transport=udp>.

Ne yapacağımı bilmiyorum, ama şükür ki, bir adamın yardım edebileceğini biliyorum ”diyor P1 invite aldıktan sonra. P1 çağrıyı P2 proxysine gönderecek ama routingde kalmak istiyor, o yüzden kendi adresini Record-Router headerına yerleştirip çağrıyı P2 ye gönderiyor.

INVITE sip:[email protected] SIP/2.0.
Contact: <sip:[email protected];transport=udp>.
Record-Route: <sip:p1.example.com;lr>.

Buradaki lr” parameter to say P1 use loose routing mechanism.

P2 alıcının adresini biliyor ve INVITE gerçek alıcıya yani benim arkadaşıma göndermeden önce o da kendi adresini Record-Route header kısmına yerleştiriyor.

INVITE sip:[email protected] SIP/2.0.
Contact: <sip:[email protected];transport=udp>.
Record-Route: <sip:p2.example.com;lr=on>.
Record-Route: <sip:p1.example.com;lr>.

“lr=on” ve “lr” aynı şey, aynı anlama geliyor.

INVITE’i aldıktan sonra, arkadaşım telefonu Router headerı inceler ve korur, çağrının ömrü boyunca aldığı tüm Record-Route başlıklarının değerini içerir. Route şöyle görünür;

<sip:p2.example.com;lr=on>,<sip:p1.example.com;lr>
(Birden fazla Route header bir arada birleştirilebilir, bunu başka örneklerde görebilirsiniz)

Arkadaşım şimdi aldığı tüm Record-Route başlıklarını yanıta kopyalar ve her zamanki gibi kendi kimliğini Contact heade’a yerleştirir.

SIP/2.0 200 OK.
Record-Route: <sip:p2.example.com;lr=on>.
Record-Route: <sip:p1.example.com;lr>.
Contact: <sip:[email protected]>

200 OK yanıtı, Via header sayesinde, benim telefonuma başarıyla geri döner.

Telefonum şimdi Route headerdaki en üstteki Route’yi inceliyor, ve lr parametresinin varlığını görüyor. Bu nedenle arkadaşımn contact header’da belirttiği adresi ACK göndereceği Request URI’ye yerleştiriyor, yani arkadaşıma göndereceği request URI’ye onun Contact header’da paylaştığı adresi yerleştiriyor. Ama gerçek destinasyon adresi Router Header alanındaki en üstteki adres yani P1 adresi olacak.

İşte loose routing böyle çalışıyor, Request-URI adresi SIP mesajının gerçek hedefi DEĞİLDİR.

ACK sip:[email protected] SIP/2.0.
Route: <sip:p1.example.com;lr>.
Route: <sip:p2.example.com;lr=on>.

P1 artık ACK’yı alıyor ve kendisini en üstteki Roter header olduğunu fark ediyor. P1, ACK’yi bir sonraki Rota başlığında URI olan ve Loose routing kullanan P2’ye iletmeden önce kendi Router header’ını siliyor.

ACK sip:[email protected] SIP/2.0.
Route: <sip:p2.example.com;lr=on>.

P2 benzer şekilde karşılık gelen en üstteki Router headeru kaldırır ve kalan Router header olmadığından P2 iletiyi Request-URI’deki adrese yönlendirir.

ACK sip:[email protected] SIP/2.0.

 

Aynı şekilde tersine paket gönderirken de yine aynı yolu takip ediyor.

Arkdaşım telefonu kapatıyor yani BYE message gönderiyor.

BYE sip:[email protected];transport=udp SIP/2.0.
Route: <sip:p2.example.com;lr=on>.
Route: <sip:p1.example.com;lr>.

P2, P1 e göndermeden önce kendini route header’den siliyor.

BYE sip:[email protected];transport=udp SIP/2.0.
Route: <sip:p1.example.com;lr>.

P1’e gelen BYE message router header’da herhangi bir adres olmadığı için Request URI’de bulunan arayan telefona yani benim telefonuma geliyor.

BYE sip:[email protected];transport=udp SIP/2.0.

İşte bu şekilde, P1 ve P2 proxyler artık aramanın sona erdiğini biliyor.

  

 

Leave A Comment