您当前的位置是:  首页 > 技术 > 企业通信 > 文摘 >
当前位置:首页 > 技术 > 企业通信 > 文摘 > OpenSIPS-关于请求中Record Set和Loose Route再讨论

OpenSIPS-关于请求中Record Set和Loose Route再讨论

2021-01-18 10:49:49   作者:james.zhu    来源:Asterisk开源派   评论:0  点击:9393


  前面的文章中介绍了关于初始请求和后续请求的处理,在初始请求和后续请求的使用中还有另外两个比较重要的关于SIP 请求路由的处理方式需要大家注意。这两个路由的概念就是Record Set和Loose Route。笔者虽然在以前的文章中多次做过介绍,但是那些介绍都是基于基本的SIP route做的介绍,没有具体到软交换层面,例如,OpenSIPS平台的具体使用方式。本文章进一步讨论关于Record Set和Loose Route的背景知识,希望能够为读者提供一个针对OpenSIPS的相对比较全面的理解。
  1SIP路由相关背景知识
  关于这些相关概念的定义和细节,读者可以参考笔者的历史文档来进一步了解关于record set 和loose route的区别以及应用场景中可能出现的问题:
  除了以上的参考链接以外,笔者这里再次多IR初始请求和SR后续请求做一点补充说明。为了判断其请求以及后续的处理流程,首先SIP 路由需要验证其请求是初始请求还是后续请求。针对loose route,如果是初始请求IR的话,初始请求创建dialog的,而后续请求则是在一个创建的dalog内的请求。因此,后续请求SR需要判断是否支持了To-tag。如果有To-tag, 则说明是一个后续请求,如果没有To-tag,说明是一个初始请求,例如, INVITE 或者SUBSCRIBE等。
  2OpenSIPS的Record route
  在介绍以上这两个概念之前,我们有必要再稍微回顾一下前面文章中所讨论的
  initinital request(IR,初始请求)和sequential requests(SR-后续请求)的基本概念。简单来说,常见的初始请求包括我们通常呼叫发起的请求-INVITE,后续请求包括挂机的BYE请求,ACK确认或者re-INVITE请求。因为双方的呼叫需要经过一个或者多个代理服务器地址,每个代理服务器地址需要对呼叫路径做一个记录。Record Set其实就是针对初始请求对呼叫路径做的一个记录值,记录值包括IP地址和对端终端的Contact地址。以下图例就是一个OpenSIPS的record route的处理流程,包括INVITE和200 OK的处理。
 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔岄妶鎼佸蓟閻斿吋鍎岄柛婵勫劤琚﹂梻浣告惈閻绱炴笟鈧妴浣割潨閳ь剟骞冨▎鎾崇妞ゆ挾鍣ュΛ褔姊婚崒娆戠獢婵炰匠鍏炬稑鈻庨幋鐐存闂佸湱鍎ら〃鎰礊閺嶃劎绡€闂傚牊渚楅崕鎰版煛閸涱喚鍙€闁哄本绋戦埥澶愬础閻愬樊娼绘俊鐐€戦崕鏌ユ嚌妤e啫鐓橀柟瀵稿仜缁犵娀姊虹粙鍖℃敾妞ゃ劌妫濋獮鍫ュΩ閳哄倸鈧鏌﹀Ο渚Ш闁挎稒绋戦埞鎴︽倷閺夋垹浜堕梺鐟扮-閸嬨倕鐣烽崼鏇ㄦ晢濞达綁鏅茬紓鎾剁磽閸屾瑧顦︽い鎴濇嚇閹ê鈹戠€n偄鈧灚銇勯幘璺烘瀺缂佽妫濋弻鏇㈠醇濠靛牏顔婇梺鍛婂笂閸楁娊寮诲☉銏″亞濞达綁鏅茬花鐣岀磽娓氬洤鏋︽い鏇嗗洤鐓″璺好¢悢鑽ょ杸闁规儳澧庢闂備浇妗ㄩ悞锕傚礉濞嗗繒鏆﹂柕濞炬櫓閺佸﹪鎮规笟顖滃帥闁衡偓閵娧呯=闁稿本鑹鹃埀顒勵棑缁牊绗熼埀顒勩€侀弽顓炵妞ゆ牗绋戝▓鎴︽⒑閸涘﹥灏柣鎺炵畵閿濈偤寮撮姀锛勫幍闂佺顫夐崝锕傚吹濞嗘垹妫柟顖嗗啯鍊梺閫涚┒閸斿矂锝炲⿰鍫濆耿婵°倐鍋撴鐐差儔濮婅櫣绮欏▎鎯у壉闂佸湱鎳撳ú顓㈢嵁閸愩劉鍫柛顐ゅ枎濞堢喖姊洪棃娑辨Ф闁稿寒鍣e畷鎴﹀箻鐠囨煡鏁滃┑掳鍊撻懗鍫曞矗閸℃稒鈷戦柛婵嗗婢跺嫭鎱ㄥΟ绋垮鐎规洘绻傞鍏煎緞鐎n剙骞嶉梻浣告啞閸旀ḿ浜稿▎鎾村€块柛娑橈攻閸欏繐鈹戦悩鎻掝伀閻㈩垱鐩弻鐔风暋閻楀牆娈楅悗瑙勬磸閸斿秶鎹㈠┑瀣<婵炴垶鐟ч弳顓㈡⒒閸屾艾鈧嘲霉閸パ呮殾闁汇垻枪缁愭鏌涢埄鍐槈缁炬儳娼¢弻鐔煎箚閻楀牜妫勭紓浣哄У閻擄繝寮婚弴锛勭杸闁哄洨鍎愰埀顒€鏈换娑氱箔閸濆嫬顫囬梺鍝勮嫰缁夌兘篓娓氣偓閺屾盯骞樼€靛憡鍣板銈冨灪瀹€鎼佸极閹版澘骞㈡繛鍡樺灩濡插洦绻濆▓鍨灍闁挎洍鏅犲畷銏ゅ礂閼测晩娲稿┑鐘诧工閹虫劗澹曟總鍛婄厽闁逛即娼ф晶顔姐亜鎼淬垻鐭婃い顏勫暟閳ь剚绋掕摫闁稿﹥鍔楅埀顒侇問閸犳鎮¢敓鐘偓浣肝旈崨顓狀槹濡炪倖鍨兼慨銈団偓姘偢濮婄粯鎷呴崨濠呯闁哄浜濈换娑㈠箻椤曞懏顥栫紓渚囧枛椤兘鐛Ο灏栧亾闂堟稒鎲告い鏃€娲熼弻锝夋偐閸欏宸堕梺鍛婁緱閸樺ジ鎮¢崒鐐粹拺閺夌偞澹嗛ˇ锕傛煟濡も偓閿曘儳绮氭潏銊х瘈闁搞儺鐏涜閺屾稑鈽夐崡鐐寸亪濠电偛鎳岄崐婵嗩潖閾忓湱鐭欐繛鍡樺劤閸擃剟姊洪崨濠冨鞍缂佽瀚伴獮鎴﹀閻橆偅鏂€闂佹悶鍎弲婵嬫儊閸儲鈷戠紒瀣濠€鎵磼鐎n偄鐏ラ柍璇茬Ч閺佹劙宕担鐟扮槣闂備線娼ч悧鍡欐崲閹烘绀嗗ù鐓庣摠閻撳繘鏌涢銈呮瀾闁稿﹥鍔栭〃銉╂倷閹绘帗娈茬紓浣稿€圭敮鐐哄焵椤掑﹦鍒伴柣蹇斿哺瀵煡顢楅埀顒勫煘閹达附鍊烽柡澶嬪灩娴犳悂鏌﹂崘顔绘喚闁诡喖缍婂畷鍫曞煛娴i攱顫曟繝娈垮枛閿曘劌鈻嶉敐澶婄闁绘ǹ顕ч悘鎶芥煣韫囷絽浜炲ù婊冪埣濮婄粯鎷呴挊澶婃優闂侀潻缍囬梽鍕┍婵犲洤鐐婃い鎺嗗亾缂佺姵鐓¢弻鏇$疀閺囩倫娑㈡煛閳ь剚绂掔€n偄鈧敻鏌ㄥ┑鍡欏嚬缂併劋绮欓弻娑欑節閸曨偂妲愬┑顔硷攻濡炶棄螞閸愵煁褰掑Χ閸℃瑦鍒涢悗瑙勬礃閿曘垺淇婇幖浣肝ㄦい鏃囨閺嬬姵绻濋悽闈浶ラ柡浣告啞閹便劑鎮滈挊澶嬬€梺鍛婄☉閿曘儵宕h箛娑欑厽闁硅揪绲鹃ˉ澶愭煛鐎b晝绐旈柡宀€鍠栧鑽も偓闈涘濡差喚绱掗悙顒€绀冩い顐㈩樀婵$敻宕熼姘敤濡炪倖鍔﹀鈧紒顔肩埣濮婅櫣绱掑Ο铏圭懆闂佽绻戝畝鍛婁繆閻㈢ǹ绀嬫い鏍ㄦ皑椤斿﹪姊洪悷鎵憼缂佽绉电粋鎺楁嚃閳哄啰锛滈梺缁樺姦閸撴瑩宕濋妶鍡愪簻妞ゆ挾濮撮崢瀵糕偓娈垮枛椤兘骞冮姀銈嗗亗閹艰揪缍嗗Σ鍫曟煟閻斿摜鐭婄紒缁樺浮瀵偊顢欑亸鏍潔闂侀潧楠忕槐鏇㈠储娴犲鈷戦悷娆忓閸斻倖銇勯弴銊ュ箹閻撱倝鏌熺紒銏犳灍闁绘挻鐟﹂妵鍕籍閸屾粍鎲樺┑鐐茬墛缁捇寮婚埄鍐╁闁荤喐婢橀~宥夋⒑鐠団€崇仭婵☆偄鍟村畷瑙勩偅閸愨晛娈ゅ銈嗗笂閻掞箑鈻嶉敃鈧埞鎴︽偐閸偅姣勬繝娈垮櫘閸欏啴鐛箛娑樼妞ゆ棁鍋愰ˇ銊ヮ渻閵堝懐绠伴柛鐔哄閵囨瑩骞庨懞銉㈡嫽婵炴挻鍩冮崑鎾绘煃瑜滈崜姘辩矙閹捐鐓橀柟鐑橆殕閻撴洟鏌¢崒婵囩《閼叉牠姊洪悷鎵暛闁搞劌缍婇崺鐐哄箣閻橆偄浜鹃柨婵嗙凹缁ㄨ崵绱掗幇顓犫槈妞ゎ亜鍟存俊鍫曞幢濡⒈妲梻浣烘嚀閸熻法绮旈悷鎵殾妞ゆ劏鎳¢弮鍫濆窛妞ゆ棁顫夌€氳棄鈹戦悙鑸靛涧缂佽弓绮欓獮澶愭晬閸曨剙顏搁梺璺ㄥ枔婵敻鎮″▎鎾寸叄闊浄绲芥禍婵嬫倶韫囨洘鏆柡灞界Х椤т線鏌涢幘纾嬪妞ゎ偅绻堟俊鎼佹晜閼恒儳褰挎繝寰锋澘鈧捇鎳楅崼鏇炵厴鐎广儱鎳夐弨浠嬫煟濡搫绾ч柟鍏煎姉缁辨帡鎮╅崹顐㈡畬闂傚洤顦甸弻銊モ攽閸℃瑥顣洪梺閫炲苯鍘哥紒顔界懄娣囧﹪骞栨担鍝ュ幐闂佺ǹ鏈划灞筋嚕閹惰姤鈷掑ù锝呮啞閹牓鏌涢悢鍝勨枅鐎规洘鍨块獮妯肩磼濡厧骞堥梺纭呭閹活亞妲愰弴銏℃櫖鐎广儱娲ㄧ壕濂稿级閸碍娅呭ù鐘洪哺椤ㄣ儵鎮欓弶鎴犵懆闁剧粯鐗曢湁闁挎繂鎳庣痪褔鎮楀顐ょ煓婵﹦绮幏鍛村川闂堟稓绉虹€殿喚鏁婚、妤呭礋椤掆偓娴狀參姊洪棃娴ュ牓寮插☉姘辩焼闁稿本澹曢崑鎾诲礂婢跺﹣澹曢梻浣告啞濞诧箓宕滃☉銏犲偍闁汇垹鎲¢埛鎴︽煙椤栧棗瀚々浼存⒑缁嬫鍎忛柟鍐查叄閹儳鐣¢幍顔芥畷闂侀€炲苯澧撮柛鈹惧亾濡炪倖甯掗崰姘缚閹邦厾绠鹃柛娆忣槺閻帞鈧鍣崑鍡涘箯閻樺樊鍟呮い鏂垮悑椤撳灝鈹戦悙宸殶濠殿喗鎸抽、鏍箛閺夋寧鐎梺鎼炲労閸撴岸鎮¢悢鍏肩厵闂侇叏绠戝楣冩煕閻旈绠婚柡灞剧洴閹瑩宕归锝嗙槗婵犳鍠栭敃锔惧垝椤栫偛绠柛娑樼摠閸ゅ秹鏌曟竟顖欒閸嬫挻绻濋崶銊㈡嫼闂傚倸鐗冮弲婵堢矓閸撲胶纾奸柣妯挎珪瀹曞矂鏌e☉鍗炴灕缂佺姵绋戦埥澶娾枎閹邦収浠ч梻鍌欐祰濞夋洟宕抽敃鍌氱闁跨噦鎷�...
  当被呼叫方返回到呼叫方时,被呼叫方通过后续请求对呼叫方进行查询回溯,找到呼叫方地址。当然,被呼叫方返回时所使用的Record Set和呼叫方的Record Set是完全不同的,处理流程是正好相反的路径。
  3OpenSIPS  loose route示例
  和Record Set相比,loose route是一个相对比较动态灵活的路由,后续请求会使用此路由根据代理地址和RURI终端地址返回到源呼叫方地址。BYE请求就是一个典型的后续请求,它通过loose route的路径按照route set 地址组的列表返回到呼叫方终端A,以下图例就是一个OpenSIPS中关于loose route的使用示例。
闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔岄妶鎼佸蓟閻斿吋鍎岄柛婵勫劤琚﹂梻浣告惈閻绱炴笟鈧妴浣割潨閳ь剟骞冨▎鎾崇妞ゆ挾鍣ュΛ褔姊婚崒娆戠獢婵炰匠鍏炬稑鈻庨幋鐐存闂佸湱鍎ら〃鎰礊閺嶃劎绡€闂傚牊渚楅崕鎰版煛閸涱喚鍙€闁哄本绋戦埥澶愬础閻愬樊娼绘俊鐐€戦崕鏌ユ嚌妤e啫鐓橀柟瀵稿仜缁犵娀姊虹粙鍖℃敾妞ゃ劌妫濋獮鍫ュΩ閳哄倸鈧鏌﹀Ο渚Ш闁挎稒绋戦埞鎴︽倷閺夋垹浜堕梺鐟扮-閸嬨倕鐣烽崼鏇ㄦ晢濞达綁鏅茬紓鎾剁磽閸屾瑧顦︽い鎴濇嚇閹ê鈹戠€n偄鈧灚銇勯幘璺烘瀺缂佽妫濋弻鏇㈠醇濠靛牏顔婇梺鍛婂笂閸楁娊寮诲☉銏″亞濞达綁鏅茬花鐣岀磽娓氬洤鏋︽い鏇嗗洤鐓″璺好¢悢鑽ょ杸闁规儳澧庢闂備浇妗ㄩ悞锕傚礉濞嗗繒鏆﹂柕濞炬櫓閺佸﹪鎮规笟顖滃帥闁衡偓閵娧呯=闁稿本鑹鹃埀顒勵棑缁牊绗熼埀顒勩€侀弽顓炵妞ゆ牗绋戝▓鎴︽⒑閸涘﹥灏柣鎺炵畵閿濈偤寮撮姀锛勫幍闂佺顫夐崝锕傚吹濞嗘垹妫柟顖嗗啯鍊梺閫涚┒閸斿矂锝炲⿰鍫濆耿婵°倐鍋撴鐐差儔濮婅櫣绮欏▎鎯у壉闂佸湱鎳撳ú顓㈢嵁閸愩劉鍫柛顐ゅ枎濞堢喖姊洪棃娑辨Ф闁稿寒鍣e畷鎴﹀箻鐠囨煡鏁滃┑掳鍊撻懗鍫曞矗閸℃稒鈷戦柛婵嗗婢跺嫭鎱ㄥΟ绋垮鐎规洘绻傞鍏煎緞鐎n剙骞嶉梻浣告啞閸旀ḿ浜稿▎鎾村€块柛娑橈攻閸欏繐鈹戦悩鎻掝伀閻㈩垱鐩弻鐔风暋閻楀牆娈楅悗瑙勬磸閸斿秶鎹㈠┑瀣<婵炴垶鐟ч弳顓㈡⒒閸屾艾鈧嘲霉閸パ呮殾闁汇垻枪缁愭鏌涢埄鍐槈缁炬儳娼¢弻鐔煎箚閻楀牜妫勭紓浣哄У閻擄繝寮婚弴锛勭杸闁哄洨鍎愰埀顒€鏈换娑氱箔閸濆嫬顫囬梺鍝勮嫰缁夌兘篓娓氣偓閺屾盯骞樼€靛憡鍣板銈冨灪瀹€鎼佸极閹版澘骞㈡繛鍡樺灩濡插洦绻濆▓鍨灍闁挎洍鏅犲畷銏ゅ礂閼测晩娲稿┑鐘诧工閹虫劗澹曟總鍛婄厽闁逛即娼ф晶顔姐亜鎼淬垻鐭婃い顏勫暟閳ь剚绋掕摫闁稿﹥鍔楅埀顒侇問閸犳鎮¢敓鐘偓浣肝旈崨顓狀槹濡炪倖鍨兼慨銈団偓姘偢濮婄粯鎷呴崨濠呯闁哄浜濈换娑㈠箻椤曞懏顥栫紓渚囧枛椤兘鐛Ο灏栧亾闂堟稒鎲告い鏃€娲熼弻锝夋偐閸欏宸堕梺鍛婁緱閸樺ジ鎮¢崒鐐粹拺閺夌偞澹嗛ˇ锕傛煟濡も偓閿曘儳绮氭潏銊х瘈闁搞儺鐏涜閺屾稑鈽夐崡鐐寸亪濠电偛鎳岄崐婵嗩潖閾忓湱鐭欐繛鍡樺劤閸擃剟姊洪崨濠冨鞍缂佽瀚伴獮鎴﹀閻橆偅鏂€闂佹悶鍎弲婵嬫儊閸儲鈷戠紒瀣濠€鎵磼鐎n偄鐏ラ柍璇茬Ч閺佹劙宕担鐟扮槣闂備線娼ч悧鍡欐崲閹烘绀嗗ù鐓庣摠閻撳繘鏌涢銈呮瀾闁稿﹥鍔栭〃銉╂倷閹绘帗娈茬紓浣稿€圭敮鐐哄焵椤掑﹦鍒伴柣蹇斿哺瀵煡顢楅埀顒勫煘閹达附鍊烽柡澶嬪灩娴犳悂鏌﹂崘顔绘喚闁诡喖缍婂畷鍫曞煛娴i攱顫曟繝娈垮枛閿曘劌鈻嶉敐澶婄闁绘ǹ顕ч悘鎶芥煣韫囷絽浜炲ù婊冪埣濮婄粯鎷呴挊澶婃優闂侀潻缍囬梽鍕┍婵犲洤鐐婃い鎺嗗亾缂佺姵鐓¢弻鏇$疀閺囩倫娑㈡煛閳ь剚绂掔€n偄鈧敻鏌ㄥ┑鍡欏嚬缂併劋绮欓弻娑欑節閸曨偂妲愬┑顔硷攻濡炶棄螞閸愵煁褰掑Χ閸℃瑦鍒涢悗瑙勬礃閿曘垺淇婇幖浣肝ㄦい鏃囨閺嬬姵绻濋悽闈浶ラ柡浣告啞閹便劑鎮滈挊澶嬬€梺鍛婄☉閿曘儵宕h箛娑欑厽闁硅揪绲鹃ˉ澶愭煛鐎b晝绐旈柡宀€鍠栧鑽も偓闈涘濡差喚绱掗悙顒€绀冩い顐㈩樀婵$敻宕熼姘敤濡炪倖鍔﹀鈧紒顔肩埣濮婅櫣绱掑Ο铏圭懆闂佽绻戝畝鍛婁繆閻㈢ǹ绀嬫い鏍ㄦ皑椤斿﹪姊洪悷鎵憼缂佽绉电粋鎺楁嚃閳哄啰锛滈梺缁樺姦閸撴瑩宕濋妶鍡愪簻妞ゆ挾濮撮崢瀵糕偓娈垮枛椤兘骞冮姀銈嗗亗閹艰揪缍嗗Σ鍫曟煟閻斿摜鐭婄紒缁樺浮瀵偊顢欑亸鏍潔闂侀潧楠忕槐鏇㈠储娴犲鈷戦悷娆忓閸斻倖銇勯弴銊ュ箹閻撱倝鏌熺紒銏犳灍闁绘挻鐟﹂妵鍕籍閸屾粍鎲樺┑鐐茬墛缁捇寮婚埄鍐╁闁荤喐婢橀~宥夋⒑鐠団€崇仭婵☆偄鍟村畷瑙勩偅閸愨晛娈ゅ銈嗗笂閻掞箑鈻嶉敃鈧埞鎴︽偐閸偅姣勬繝娈垮櫘閸欏啴鐛箛娑樼妞ゆ棁鍋愰ˇ銊ヮ渻閵堝懐绠伴柛鐔哄閵囨瑩骞庨懞銉㈡嫽婵炴挻鍩冮崑鎾绘煃瑜滈崜姘辩矙閹捐鐓橀柟鐑橆殕閻撴洟鏌¢崒婵囩《閼叉牠姊洪悷鎵暛闁搞劌缍婇崺鐐哄箣閻橆偄浜鹃柨婵嗙凹缁ㄨ崵绱掗幇顓犫槈妞ゎ亜鍟存俊鍫曞幢濡⒈妲梻浣烘嚀閸熻法绮旈悷鎵殾妞ゆ劏鎳¢弮鍫濆窛妞ゆ棁顫夌€氳棄鈹戦悙鑸靛涧缂佽弓绮欓獮澶愭晬閸曨剙顏搁梺璺ㄥ枔婵敻鎮″▎鎾寸叄闊浄绲芥禍婵嬫倶韫囨洘鏆柡灞界Х椤т線鏌涢幘纾嬪妞ゎ偅绻堟俊鎼佹晜閼恒儳褰挎繝寰锋澘鈧捇鎳楅崼鏇炵厴鐎广儱鎳夐弨浠嬫煟濡搫绾ч柟鍏煎姉缁辨帡鎮╅崹顐㈡畬闂傚洤顦甸弻銊モ攽閸℃瑥顣洪梺閫炲苯鍘哥紒顔界懄娣囧﹪骞栨担鍝ュ幐闂佺ǹ鏈划灞筋嚕閹惰姤鈷掑ù锝呮啞閹牓鏌涢悢鍝勨枅鐎规洘鍨块獮妯肩磼濡厧骞堥梺纭呭閹活亞妲愰弴銏℃櫖鐎广儱娲ㄧ壕濂稿级閸碍娅呭ù鐘洪哺椤ㄣ儵鎮欓弶鎴犵懆闁剧粯鐗曢湁闁挎繂鎳庣痪褔鎮楀顐ょ煓婵﹦绮幏鍛村川闂堟稓绉虹€殿喚鏁婚、妤呭礋椤掆偓娴狀參姊洪棃娴ュ牓寮插☉姘辩焼闁稿本澹曢崑鎾诲礂婢跺﹣澹曢梻浣告啞濞诧箓宕滃☉銏犲偍闁汇垹鎲¢埛鎴︽煙椤栧棗瀚々浼存⒑缁嬫鍎忛柟鍐查叄閹儳鐣¢幍顔芥畷闂侀€炲苯澧撮柛鈹惧亾濡炪倖甯掗崰姘缚閹邦厾绠鹃柛娆忣槺閻帞鈧鍣崑鍡涘箯閻樺樊鍟呮い鏂垮悑椤撳灝鈹戦悙宸殶濠殿喗鎸抽、鏍箛閺夋寧鐎梺鎼炲労閸撴岸鎮¢悢鍏肩厵闂侇叏绠戝楣冩煕閻旈绠婚柡灞剧洴閹瑩宕归锝嗙槗婵犳鍠栭敃锔惧垝椤栫偛绠柛娑樼摠閸ゅ秹鏌曟竟顖欒閸嬫挻绻濋崶銊㈡嫼闂傚倸鐗冮弲婵堢矓閸撲胶纾奸柣妯挎珪瀹曞矂鏌e☉鍗炴灕缂佺姵绋戦埥澶娾枎閹邦収浠ч梻鍌欐祰濞夋洟宕抽敃鍌氱闁跨噦鎷�...
  4如何处理两种路由
  前面笔者已经提及,根据SIP规范和OpenSIPS的处理流程,如果代理需要record route或者loose route时,首先需要判断支持了has_totag()。如果支持了的话,就执行后续请求的处理,否则发起一个record route执行初始请求的路由处理。在OpenSIPS中,通过route路由处理模块进行判断处理。
 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔岄妶鎼佸蓟閻斿吋鍎岄柛婵勫劤琚﹂梻浣告惈閻绱炴笟鈧妴浣割潨閳ь剟骞冨▎鎾崇妞ゆ挾鍣ュΛ褔姊婚崒娆戠獢婵炰匠鍏炬稑鈻庨幋鐐存闂佸湱鍎ら〃鎰礊閺嶃劎绡€闂傚牊渚楅崕鎰版煛閸涱喚鍙€闁哄本绋戦埥澶愬础閻愬樊娼绘俊鐐€戦崕鏌ユ嚌妤e啫鐓橀柟瀵稿仜缁犵娀姊虹粙鍖℃敾妞ゃ劌妫濋獮鍫ュΩ閳哄倸鈧鏌﹀Ο渚Ш闁挎稒绋戦埞鎴︽倷閺夋垹浜堕梺鐟扮-閸嬨倕鐣烽崼鏇ㄦ晢濞达綁鏅茬紓鎾剁磽閸屾瑧顦︽い鎴濇嚇閹ê鈹戠€n偄鈧灚銇勯幘璺烘瀺缂佽妫濋弻鏇㈠醇濠靛牏顔婇梺鍛婂笂閸楁娊寮诲☉銏″亞濞达綁鏅茬花鐣岀磽娓氬洤鏋︽い鏇嗗洤鐓″璺好¢悢鑽ょ杸闁规儳澧庢闂備浇妗ㄩ悞锕傚礉濞嗗繒鏆﹂柕濞炬櫓閺佸﹪鎮规笟顖滃帥闁衡偓閵娧呯=闁稿本鑹鹃埀顒勵棑缁牊绗熼埀顒勩€侀弽顓炵妞ゆ牗绋戝▓鎴︽⒑閸涘﹥灏柣鎺炵畵閿濈偤寮撮姀锛勫幍闂佺顫夐崝锕傚吹濞嗘垹妫柟顖嗗啯鍊梺閫涚┒閸斿矂锝炲⿰鍫濆耿婵°倐鍋撴鐐差儔濮婅櫣绮欏▎鎯у壉闂佸湱鎳撳ú顓㈢嵁閸愩劉鍫柛顐ゅ枎濞堢喖姊洪棃娑辨Ф闁稿寒鍣e畷鎴﹀箻鐠囨煡鏁滃┑掳鍊撻懗鍫曞矗閸℃稒鈷戦柛婵嗗婢跺嫭鎱ㄥΟ绋垮鐎规洘绻傞鍏煎緞鐎n剙骞嶉梻浣告啞閸旀ḿ浜稿▎鎾村€块柛娑橈攻閸欏繐鈹戦悩鎻掝伀閻㈩垱鐩弻鐔风暋閻楀牆娈楅悗瑙勬磸閸斿秶鎹㈠┑瀣<婵炴垶鐟ч弳顓㈡⒒閸屾艾鈧嘲霉閸パ呮殾闁汇垻枪缁愭鏌涢埄鍐槈缁炬儳娼¢弻鐔煎箚閻楀牜妫勭紓浣哄У閻擄繝寮婚弴锛勭杸闁哄洨鍎愰埀顒€鏈换娑氱箔閸濆嫬顫囬梺鍝勮嫰缁夌兘篓娓氣偓閺屾盯骞樼€靛憡鍣板銈冨灪瀹€鎼佸极閹版澘骞㈡繛鍡樺灩濡插洦绻濆▓鍨灍闁挎洍鏅犲畷銏ゅ礂閼测晩娲稿┑鐘诧工閹虫劗澹曟總鍛婄厽闁逛即娼ф晶顔姐亜鎼淬垻鐭婃い顏勫暟閳ь剚绋掕摫闁稿﹥鍔楅埀顒侇問閸犳鎮¢敓鐘偓浣肝旈崨顓狀槹濡炪倖鍨兼慨銈団偓姘偢濮婄粯鎷呴崨濠呯闁哄浜濈换娑㈠箻椤曞懏顥栫紓渚囧枛椤兘鐛Ο灏栧亾闂堟稒鎲告い鏃€娲熼弻锝夋偐閸欏宸堕梺鍛婁緱閸樺ジ鎮¢崒鐐粹拺閺夌偞澹嗛ˇ锕傛煟濡も偓閿曘儳绮氭潏銊х瘈闁搞儺鐏涜閺屾稑鈽夐崡鐐寸亪濠电偛鎳岄崐婵嗩潖閾忓湱鐭欐繛鍡樺劤閸擃剟姊洪崨濠冨鞍缂佽瀚伴獮鎴﹀閻橆偅鏂€闂佹悶鍎弲婵嬫儊閸儲鈷戠紒瀣濠€鎵磼鐎n偄鐏ラ柍璇茬Ч閺佹劙宕担鐟扮槣闂備線娼ч悧鍡欐崲閹烘绀嗗ù鐓庣摠閻撳繘鏌涢銈呮瀾闁稿﹥鍔栭〃銉╂倷閹绘帗娈茬紓浣稿€圭敮鐐哄焵椤掑﹦鍒伴柣蹇斿哺瀵煡顢楅埀顒勫煘閹达附鍊烽柡澶嬪灩娴犳悂鏌﹂崘顔绘喚闁诡喖缍婂畷鍫曞煛娴i攱顫曟繝娈垮枛閿曘劌鈻嶉敐澶婄闁绘ǹ顕ч悘鎶芥煣韫囷絽浜炲ù婊冪埣濮婄粯鎷呴挊澶婃優闂侀潻缍囬梽鍕┍婵犲洤鐐婃い鎺嗗亾缂佺姵鐓¢弻鏇$疀閺囩倫娑㈡煛閳ь剚绂掔€n偄鈧敻鏌ㄥ┑鍡欏嚬缂併劋绮欓弻娑欑節閸曨偂妲愬┑顔硷攻濡炶棄螞閸愵煁褰掑Χ閸℃瑦鍒涢悗瑙勬礃閿曘垺淇婇幖浣肝ㄦい鏃囨閺嬬姵绻濋悽闈浶ラ柡浣告啞閹便劑鎮滈挊澶嬬€梺鍛婄☉閿曘儵宕h箛娑欑厽闁硅揪绲鹃ˉ澶愭煛鐎b晝绐旈柡宀€鍠栧鑽も偓闈涘濡差喚绱掗悙顒€绀冩い顐㈩樀婵$敻宕熼姘敤濡炪倖鍔﹀鈧紒顔肩埣濮婅櫣绱掑Ο铏圭懆闂佽绻戝畝鍛婁繆閻㈢ǹ绀嬫い鏍ㄦ皑椤斿﹪姊洪悷鎵憼缂佽绉电粋鎺楁嚃閳哄啰锛滈梺缁樺姦閸撴瑩宕濋妶鍡愪簻妞ゆ挾濮撮崢瀵糕偓娈垮枛椤兘骞冮姀銈嗗亗閹艰揪缍嗗Σ鍫曟煟閻斿摜鐭婄紒缁樺浮瀵偊顢欑亸鏍潔闂侀潧楠忕槐鏇㈠储娴犲鈷戦悷娆忓閸斻倖銇勯弴銊ュ箹閻撱倝鏌熺紒銏犳灍闁绘挻鐟﹂妵鍕籍閸屾粍鎲樺┑鐐茬墛缁捇寮婚埄鍐╁闁荤喐婢橀~宥夋⒑鐠団€崇仭婵☆偄鍟村畷瑙勩偅閸愨晛娈ゅ銈嗗笂閻掞箑鈻嶉敃鈧埞鎴︽偐閸偅姣勬繝娈垮櫘閸欏啴鐛箛娑樼妞ゆ棁鍋愰ˇ銊ヮ渻閵堝懐绠伴柛鐔哄閵囨瑩骞庨懞銉㈡嫽婵炴挻鍩冮崑鎾绘煃瑜滈崜姘辩矙閹捐鐓橀柟鐑橆殕閻撴洟鏌¢崒婵囩《閼叉牠姊洪悷鎵暛闁搞劌缍婇崺鐐哄箣閻橆偄浜鹃柨婵嗙凹缁ㄨ崵绱掗幇顓犫槈妞ゎ亜鍟存俊鍫曞幢濡⒈妲梻浣烘嚀閸熻法绮旈悷鎵殾妞ゆ劏鎳¢弮鍫濆窛妞ゆ棁顫夌€氳棄鈹戦悙鑸靛涧缂佽弓绮欓獮澶愭晬閸曨剙顏搁梺璺ㄥ枔婵敻鎮″▎鎾寸叄闊浄绲芥禍婵嬫倶韫囨洘鏆柡灞界Х椤т線鏌涢幘纾嬪妞ゎ偅绻堟俊鎼佹晜閼恒儳褰挎繝寰锋澘鈧捇鎳楅崼鏇炵厴鐎广儱鎳夐弨浠嬫煟濡搫绾ч柟鍏煎姉缁辨帡鎮╅崹顐㈡畬闂傚洤顦甸弻銊モ攽閸℃瑥顣洪梺閫炲苯鍘哥紒顔界懄娣囧﹪骞栨担鍝ュ幐闂佺ǹ鏈划灞筋嚕閹惰姤鈷掑ù锝呮啞閹牓鏌涢悢鍝勨枅鐎规洘鍨块獮妯肩磼濡厧骞堥梺纭呭閹活亞妲愰弴銏℃櫖鐎广儱娲ㄧ壕濂稿级閸碍娅呭ù鐘洪哺椤ㄣ儵鎮欓弶鎴犵懆闁剧粯鐗曢湁闁挎繂鎳庣痪褔鎮楀顐ょ煓婵﹦绮幏鍛村川闂堟稓绉虹€殿喚鏁婚、妤呭礋椤掆偓娴狀參姊洪棃娴ュ牓寮插☉姘辩焼闁稿本澹曢崑鎾诲礂婢跺﹣澹曢梻浣告啞濞诧箓宕滃☉銏犲偍闁汇垹鎲¢埛鎴︽煙椤栧棗瀚々浼存⒑缁嬫鍎忛柟鍐查叄閹儳鐣¢幍顔芥畷闂侀€炲苯澧撮柛鈹惧亾濡炪倖甯掗崰姘缚閹邦厾绠鹃柛娆忣槺閻帞鈧鍣崑鍡涘箯閻樺樊鍟呮い鏂垮悑椤撳灝鈹戦悙宸殶濠殿喗鎸抽、鏍箛閺夋寧鐎梺鎼炲労閸撴岸鎮¢悢鍏肩厵闂侇叏绠戝楣冩煕閻旈绠婚柡灞剧洴閹瑩宕归锝嗙槗婵犳鍠栭敃锔惧垝椤栫偛绠柛娑樼摠閸ゅ秹鏌曟竟顖欒閸嬫挻绻濋崶銊㈡嫼闂傚倸鐗冮弲婵堢矓閸撲胶纾奸柣妯挎珪瀹曞矂鏌e☉鍗炴灕缂佺姵绋戦埥澶娾枎閹邦収浠ч梻鍌欐祰濞夋洟宕抽敃鍌氱闁跨噦鎷�...
  需要注意,通过以上针对路由处理的流程可以看出,如果是初始请求(IR)的话,初始请求需要耗费更多的资源来进行验证,查询,定位等服务。如果是SR后续请求的话,它基本上不会消耗太多系统资源,它仅按照路由表返回呼叫方就可以。因此,后续请求处理速度相对比较快,也更高效。
  5其他讨论
  因为SIP规范和应用场景,以及呼叫路径的变化很大。一个SIP呼叫可以经过多个网元和多个代理服务器地址,包括SBC,防火墙等。在早期的SIP规范RFC2543中规定了比较早的route方式-strict route(严格路由), 而Loose route则是SIP v 2版本,RFC3261中所支持的比较灵活的路由方式。后者可以支持R-URI不被修改,可以兼容RFC2543中的严格路由方式。严格路由是在初始请求创建dialog之前就已经明确定义好了路由的路径以及路由表。每个代理服务器严格按照路由表指定的路径执行,如果路由路径中其中一个网元出现故障都会导致呼叫失败。另外,如果UA支持了outbound-proxy以后就会出现其他的问题。因此,为了更加灵活地支持SIP的路由策略,loose route比较好的解决了这个问题,它通过:lr参数支持,允许每个目的地地址来路由数据包,并且每个目的地都有各自的机制兼容支持了严格路由策略。关于以上讨论的具体细节,读者可以参考RFC3261-16.12了解更多规定。
  在SIP路由中,除了我们前面讨论的以上路由表以外,还有一个比较重要的定义是Via。Record route其目的是在路由消息中充当一个角色来影响Reg-URL(通过:lr参数决定request-URL。如果路由组中的第一个路由URL包含:lr, 则不会影响request-URL;如果如果路由组中的第一个路由URL不包含:lr,UA就会把第一个路由组的URL设置为request-URL,然后处理其余的路由组流程。),当然也在VIA中支持部分的描述内容。另外,VIA是被UAS用来决定响应的下一个目的地地址的,它只是不断添加代理Via地址,对Via地址不做修改,返回时删除相应的Via地址。最后,Via是基于事务层的路由记录,请求所创建的事务完成以后,Via就会被丢弃;而Record Set是基于dialog的,呼叫的路径会贯穿整个dialog中。
  6总结
  Record route和loose route在SIP 路由中分别进行不同的处理。本文章重点介绍了关于OpenSIPS中两种路由方式的区别以及发起方的不同,另外介绍了在OpenSIPS中如何发起两种路由方式,最后讨论了其他关于SIP路由,VIA一些区别。通过以上进一步的讨论,希望读者对OpenSIPS中的Record route和loose route有一个比较完整的认识,结合前面各种opensips的cfg场景配置文件能够更多了解开源OpenSIPS的使用方式。
  参考资料:
  www.opensips.org
  www.freepbx.org.cn
  www.freesbc.cn
  融合通信/IPPBX/FreePBX商业解决方案:www.hiastar.com
  最新Asterisk完整中文用户手册详解:www.asterisk.org.cn
  Freepbx/FreeSBC技术文档: www.freepbx.org.cn
  如何使用免费会话边界控制器-FreeSBC,qq技术分享群:334023047
  关注微信公众号:asterisk-cn,获得有价值的通信行业技术分享
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

相关热词搜索: OpenSIPS

上一篇:UC行业需要更多的隐私监管吗?

下一篇:最后一页

专题

CTI论坛会员企业