SIPカスタマヌむンタラクション。 パヌト2





前回の蚘事では、プロキシサヌバヌを䜿甚しないSIPクラむアントの単玔な盞互䜜甚に぀いお説明したした。 この盞互䜜甚は実際には非垞にたれですが、SIPの基本を理解するには最適です。



基本的なこずを理解したので、プロトコルの実際の䜜業に進むこずを提案したす。



この蚘事では、3぀の質問を怜蚎する予定です。

  1. トランスポヌトプロトコルずプロキシ怜玢の遞択。
  2. プロキシを介しお䜜業したす。
  3. プロキシサヌバヌぞの登録。


トランスポヌトプロトコルの遞択ずプロキシ怜玢



SIPプロトコルは耇数のトランスポヌトプロトコルUDP、TCP、SCTP、TLSをサポヌトしおいるため、䜿甚するプロトコルを䜕らかの方法で決定する必芁がありたす。 これを行うにはいく぀かの方法がありたす。



最初の方法では、SIP URIでトランスポヌトを明瀺的に指定したすTLSを陀く。 次のようになりたす。







トランスポヌトが明瀺的に指定されおいない堎合、次のアルゎリズムが適甚されたす。

  1. SIP URIにIPアドレスが含たれおいる堎合、SIP URIにはUDPが䜿甚され、SIPSセキュアSIPにはTCPが䜿甚されたす。
  2. IPアドレスが指定されおいないが、ポヌトが指定されおいる堎合、UDPがSIP URIに䜿甚され、TCPがSIPSに䜿甚されたす。
  3. IPアドレスずポヌトはないが、察応するNAPTRレコヌドがDNSに存圚する堎合、「SIP + D2U」はUDPに察応し、「SIP-D2T」はTCPを瀺し、「SIP-D2S」はSCTPを瀺したす。 NAPTRには、プロキシサヌバヌの怜玢に䜿甚されるSRVレコヌドぞのリンクが含たれおいたす。 NAPTRが存圚しない堎合、SRVレコヌドを怜玢する芁求を実行する必芁がありたす。
  4. SRV芁求の結果は、プロキシサヌバヌの名前ずポヌトになりたす。
  5. SRVレコヌドがない堎合は、AたたはAAAA芁求が実行されたす。 この堎合、UDPはSIP URIに、TCPはSIPSに䜿甚されたす。


理解を深めるために、sipクラむアントに連絡する堎合の䟋を考えおみおくださいivan@domain.ru







そこで、Ivanのプロキシサヌバヌ蚭定を芋぀けたした。 ここで、SIPダむアログの䞀郚ずしおプロキシの䜿甚を怜蚎するこずを提案したす。



NAPTRが䜕であるかを知らない人ぞの泚意。 このタむプのDNSレコヌドは、この蚘事を曞いたずきにしか存圚しないため、絶望しないでください。 ここで NAPTRに぀いおもう少し。



プロキシを䜿甚した盞互䜜甚



なぜSIPプロキシが必芁なのですか すでに述べたように、蚘事の最初の郚分の䟋では、クラむアントはお互いのIPアドレスを知っおいお、盎接通信できたした。 実際には、クラむアントはほずんどの堎合、動的にアドレスを受信するため、このIPたたはそのIPを「蚘憶」する意味はありたせん。 この状況で最初に頭に浮かぶのは、DNS Aレコヌドを䜿甚しお実際の有効なアドレスを刀別するこずです。 ただし、次の問題がありたす。IPアドレスは、ナヌザヌではなく特定のデバむスを識別したす。 SIP盞互䜜甚の機胜は、メッセヌゞ亀換がデバむスデバむスレベルではなく、ナヌザヌごずに行われるこずです。 この堎合、1人のナヌザヌが耇数のSIPクラむアントを同時に䜿甚できたす。携垯電話、職堎のコンピュヌタヌ、自宅のコンピュヌタヌ、およびSIPの電話です。 どうする



SIPプロトコルは次の゜リュヌションを提䟛したすSIPプロキシを䜜成し、各ナヌザヌがこのプロキシにデバむスを登録したすより正確には、ナヌザヌは登録サヌバヌに登録し、プロキシは登録デヌタベヌスにアクセスしたすが、簡単にするために、これは同じサヌバヌであるず仮定したす。 これがどのように行われるか、以䞋に瀺したす。 今のずころ、Proxyはナヌザヌのクラむアントを芋぀ける方法を正確に知っおいるこずを芚えおおいおください。



PeterがIvanに電話するず、次の䞀連のアクションが実行されたす。

  1. PeterのSIPクラむアントがIvanのSIPプロキシのアドレスずプロトコルを決定したすこれを行う方法-䞊蚘を参照
  2. クラむアントがプロキシにINVITE芁求を送信したす
  3. プロキシサヌバヌは、Ivanが登録したデバむスを確認し、これらすべおのデバむスにリク゚ストを送信したす
  4. Ivanはデバむスの1぀でコヌルに応答し、200 OKをプロキシに送信したす
  5. プロキシはPeterに200 OKをリダむレクトしたす
  6. Peterは、200応答ボックスの[連絡先]フィヌルドから特定のデバむスでIvanのSIPアドレスを受信し、Prxoyをバむパスしお盎接応答を送信したす
  7. その埌の通信もすべお盎接です。


図では、次のようになりたす。







蚘事の最初の郚分を孊習した人にずっおは、すべおがかなり銎染みのあるものに芋えたす。 䞭間プロキシサヌバヌのみが远加されたした。 したがっお、メッセヌゞングは​​わずかに倉曎されたした。



詳现な怜査に入る前に、ちょっずした発蚀をしたす。 SIP内では、2皮類のURIが共有されたす。 最初の1぀はナヌザヌURIであり、アドレスのアドレスAORずも呌ばれたす。 このアドレスに送信される芁求には、プロキシデヌタベヌスの怜玢ず1぀たたは耇数のデバむスぞの芁求の送信が含たれたす。 2番目はデバむスURIたたは、むしろデバむス䞊のナヌザヌです。 デバむスURIは通垞、連絡先ず呌ばれ、それぞれSIPメッセヌゞのContactフィヌルドに含たれおいたす。 AORは、FromおよびToフィヌルドに含たれおいたす。







䌚話の始たり


したがっお、ピヌタヌはIvanのINVITEをプロキシサヌバヌに送信したす。





プロキシサヌバヌは、リク゚ストをすべおのIvanのSIPクラむアントにリダむレクトしたす。 簡単にするために、Ivanが1぀のデバむスのみを䜿甚するず仮定したす。 SIPクラむアントがリク゚ストがプロキシを介しおリダむレクトされたこずを理解するために、サヌバヌはviaヘッダヌフィヌルドを远加したす。







IvanのSIPクラむアントは180 Ringing応答を送信したすIvanは呌び出しを聞きたす。 同時に、圌はToフィヌルドにタグを远加し、Contactフィヌルドに自分の連絡先を瀺したす。 さらに、最初のviaフィヌルドに受信パラメヌタヌが远加されたした。このパラメヌタヌは、Ivanのクラむアントがリク゚ストを受信したアドレス぀たり、Ivanが芋るプロキシサヌバヌのアドレスを瀺したす。 問題を解決するためにこれを知るこずは有甚です







したがっお、プロキシはリク゚ストをピヌタヌのクラむアントにリダむレクトしたす。 同時に、圌はビアを削陀したす







180の呌び出し音を送信した埌、Ivanが電話を拟うずすぐに、IvanのクラむアントはPrxoyに200 OK応答を送信したす。







Proxyはこの回答をPeterに枡したすが、次の方法で削陀したす。







今から楜しい郚分です。 Peterのクラむアントは、プロキシをバむパスしお、ASKメッセヌゞをIvanのクラむアントに盎接送信したす。 さらに、Ivanが同時に耇数のSIPクラむアントを䜿甚した堎合、答えはたさに必芁なものになりたした。 䜕がこれを可胜にしたすか



Ivanが電話をピックアップしたクラむアントから送信された200 OK。 さらに、200 OK応答のContactフィヌルドには、特定のデバむスのナヌザヌIvanに察応するURIが含たれおいたす。 したがっお、PeterのクラむアントはこのデバむスにACKを送信したす。その埌、Proxyの参加は䞍芁になりたす。







メディアトラフィックを含む他のすべおのメッセヌゞは、プロキシをバむパスしたす。



䌚話の終わり


䌚話の最埌に、IvanのクラむアントはBYEをPeterのクラむアントに盎接送信したす。







応答ずしおピヌタヌは確認を送信したす





ここでは、蚘事の最初の郚分のようにすべおがありたす。



そこで、SIPクラむアントずプロキシサヌバヌの参加ずの盞互䜜甚を調べたした。 質問が1぀だけ残っおいたした。プロキシはどのようにしおIvanのクラむアントのアドレスを芋぀けたしたか 登録手順を䜿甚したす。 これがどのように起こるか、以䞋で説明したす。



SIP登録



登録は次のずおりです。







各メッセヌゞを詳しく芋おみたしょう。 Ivanはサヌバヌに登録芁求を送信したす簡単にするために、登録サヌバヌの圹割はproxy.domain.ruにむンストヌルされおいるず考えおいたす。 このリク゚ストで最も重芁なのは、連絡先フィヌルドです。 これは、特定のデバむス䞊のIvanのアドレスです。







応答ずしお、サヌバヌは401 Unauthorized、぀たり承認芁求を送信したす。 答えの䞭で最も重芁なフィヌルドはWWW-Authenticateです。 レルムがドメむンであるず掚枬するのは難しくありたせん。アルゎリズムは、䜿甚するハッシュアルゎリズムを瀺したす。 興味深いのは、ナンスフィヌルドです。







Nonceは、「䞀床䜿甚した番号」の略です。 Nonceは1回限りのランダムシヌケンスであり、Ivanのクラむアントはパスワヌド文字列ず組み合わせお、受信した文字列からMD5ハッシュを生成し、結果をWWW-Authenticateフィヌルドに新しいリク゚ストに入れたす実際、すべおが倚少耇雑ですが、簡単にするために、それだけです。 これを行うには、応答パラメヌタヌを䜿甚したす。



なぜノンスが必芁なのですか クラむアントがパスワヌドからMD5を生成し、ノンスを䜿甚しなかった堎合、ハッシュは毎回同じになりたす。 攻撃者はそのようなハッシュを傍受し、それを認蚌に䜿甚する可胜性がありたす。 これは、パスワヌドをクリアテキストで送信するのず同じくらい安党ではありたせん。



nonceを䜿甚するず、MD5は毎回新しい行から取埗され、異なるこずが刀明したす。 そのため、攻撃者はハッシュを傍受したずしおも、ほずんどの堎合、認蚌に䜿甚できたせん。



ちなみに、新しい登録芁求にはもう1぀のCSeqがあるこずに泚意しおください。







サヌバヌはたた、ナンスをIvanのパスワヌドず組み合わせお、MD5ハッシュを受け取りたす。 その埌、圌は自分のハッシュずむノァンから受け取ったハッシュを比范したす。 䞀臎する堎合、サヌバヌは200 OKを送信したす。 expiresパラメヌタヌが[連絡先]フィヌルドに远加されおいるこずに泚意しおください。 この堎合、登録はサヌバヌデヌタベヌスに3600秒たたは1時間保存されたす。







Ivanが登録を曎新する堎合は、この時間内に別のREGISTERを送信する必芁がありたす。



Ivanが䞀床にSIPサポヌトのある耇数のデバむスを䜿甚するずどうなりたすか すべおが非垞に簡単です-それぞれから登録芁求を送信する必芁がありたす。



察応する゚ントリがこの登録サヌバヌのデヌタベヌスに衚瀺されるず、プロキシサヌバヌはリク゚ストをIvanのSIPクラむアントにリダむレクトできるようになりたす。



興味がある人のためのボヌナス



サヌバヌは、登録芁求ぞの応答ずしお、Toタグを含む応答を送信したす。







ダむアログを蚭定するずきに、このタグが同じメッセヌゞを再床受信するのを防ぐのに圹立぀こずは明らかです。 これにはルヌルがありたす。メッセヌゞにToタグが含たれおおらず、UASが同じCSeq、Fromタグ、Call-IDのメッセヌゞをすでに受信しおいる堎合、メッセヌゞは砎棄されたす。 登録サヌバヌずの察話を確立しない堎合、なぜToタグが必芁なのですか。 私が芋぀けるこずができる最良の答えは、RFC 3261で、Toタグなしで芁求に来る200 OK応答にはToタグを含めるべきだずいうこずです。 ぀たり、䜕もする必芁はありたせんが、受け入れられたす。



この蚘事を読んだ埌、SIPプロトコルの機胜がより理解しやすくなるこずを願っおいたす。 あなたのコメントを歓迎したす。



All Articles