您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 路由策略中SIP学习
SIP消息的结构2011-07-0913:30:58|分类:交换技术|举报|字号订阅SIP消息由三部分组成,即:开始行(startline)、消息头(header)、正文(body)Start-line:请求行Request-line消息为request消息时使用request-lineRequest-Line=MethodSPRequest-URISPSIP-VersionCRLF状态行Status-line消息为响应消息时使用Status-lineStatus-Line=SIP-VersionSPStatus-CodeSPReason-PhraseCRLF请求行Request-line由消息方法+Request-URI+SIP版本组成:消息方法:以下列出了六种消息方法REGISTER:注册联系信息INVITE:发起会话请求ACK:对INVITE请求的响应的确认CANCEL:取消请求BYE:终结会话OPTIONS:查询服务器能力Request-URI:指示请求的用户或者服务的地址信息SIP-version:请求和响应消息都需要包含SIP版本信息举例:INVITEsip:bob@zte.comSIP/2.0状态行Status-line由SIP版本+状态码+原因短语组成举例:SIP/2.0200OK---------------------------------------------------------------消息头:格式:字段名(field-name):参数值(field-value)Example:REGISTERsip:registrar.zte.comSIP/2.0Via:SIP/2.0/UDPbobspc.zte.com:5060;branch=z9hG4bKnashds7Max-Forwards:70To:Bobsip:bob@zte.comFrom:Bobsip:bob@zte.com;tag=456248Call-ID:[email=843817637684230@998sdasdh09]843817637684230@998sdasdh09[/email]CSeq:1826REGISTERContact:sip:bob@192.0.2.4Expires:7200Content-Length:0上面via、max-forwards、to、from、call-id等这些都是些常有的头域,SIP的头域总共有44个之多。被叫UE通过SDP知道了主叫的IP地址和承载能力,是否就可以欺骗SS说呼叫失败,然后通过主叫IP地址和主叫UE通信,这样就绕开了SS的控制了。对于公网用户我们使用SBC是否就有这方面的考虑呢?SIPURI是通过SIP呼叫他人的SIP地址方案。换句话说,一个SIPURI就是一个用户的SIP电话号码。SIPURI如同电子邮件地址一样,按以下格式书写:SIPURI=sip:x@y:Port其中x=用户名,y=服务主机(域名或IP)范例:sip:joe.bloggs@212.123.1.213sip:support@phonesystem.3cx.comsip:22444032@phonesystem.3cx.comSIPURI标准在RFC3261标准中予以定义。2SIP协议2.1SIP协议的目标SIP表示会话初始化协议(SessionInitiationProtocol)。该协议是一个应用层控制协议,由IEEE设计和开发。设计的时候考虑到了协议的实现容易、良好的规模性和灵活性。该规范由几个RFC组成,其中最重要的一个是RFC3261,为规范的核心内容。该协议用来创建、修改和终止与一个或多个参与者之间的会话。利用会话,我们理解为一组相互通信的发送者和接收者及在通信过程中保存在这些发送者和接收者的状态。会话的例子包括互联网电话呼叫、多媒体的分发、多媒体会议、分布式计算机游戏等。SIP不仅是一个通信设备需要的协议,也不是一个通用的协议。SIP的目的仅在于使得通信成为可能。通信本身必须由其他方式来实现(可能是其他的协议)。经常与SIP一同使用的其他两种协议是RTP和SDP。RTP协议用来承载实时的多媒体数据,包括音频、视频和文本。这个协议使得对数据编码和打包,并在Internet上传输这些包成为可能。另外一个重要的协议是SDP,会话描述协议(SessionDescriptionProtocol),它被用来对会话参与者的能力进行描述和编码。这样的描述然后被用于会话特征的协商,以便所有的设备能够参与,例如,对媒体编码的协商,便于所有的参与者能够对媒体解码;传输协议的协商,等等。SIP被设计用来遵从Internet的工作模式。它是一个面向端到端的信令协议,这意味着所有的逻辑都存储在端设备上(除了SIP消息的路由);状态也只存储在端设备上。系统里没有单点失效,使用这种方式设计的网络有非常好的规模扩充性。为这种分布式和规模扩充性所付出的代价是消息的高开销,因为消息必须在端到端之间发送。值得一提的是,SIP的端到端的概念对于常规的PSTN来讲,是一个巨大的改变。在PSTN中,所有的状态和逻辑都保存在网络里,而端设备(电话)是原始的“笨”设备。SIP的目的是提供与传统PSTN相同的功能,但端到端的设计使得SIP网络有更大的威力,而且更加开放,便于实现一些新的服务,而这些服务在传统的PSTN上几乎是不可能的。SIP是基于HTTP协议的。HTTP协议继承了RFC822的消息头的格式。HTTP可能是在Internet上最成功和广泛使用的协议。SIP试图结合两者的优点。事实上,HTTP也可以被分类为信令协议,因为用户代理使用这个协议告诉HTTP服务器起对那个文件感兴趣。SIP用来承载会话参数的说明,这个说明用SDP来编码到一个文档里。这两个协议,HTTP和SIP,都继承了RFC822的消息头的编码。在过去的几年里,编码被证明是很强健和灵活的。2.1.1SIPURISIP实体使用SIPURI(UniformResourceIdentifier)来标识。SIPURI的形式为:username@domain,或者sip:joe@company.com。SIPURI包括用户名和域名两部分,使用@(at)来分隔。SIPURI类似于e-mail地址,因此可以使用相同的URI用于e-mail和SIP通信。这样的URI很容易记忆。2.2SIP网络元素SIP网络的最基本的配置可以只有两个元素,两个用户代理,两者之间直接互传消息;但是典型的SIP网络会包含多种类型的SIP消息。基本的SIP元素是用户代理(UA),代理(Proxy)、注册服务器(registrar)和重定向服务器(redirectserver)。本节会简要介绍这些元素。要注意的是,这些元素是一些逻辑实体,例如,为了加快处理的速度,常常会把他们在物理上放在一起,这取决于具体的实现和配置。2.2.1用户代理(UA)使用SIP协议来寻找对方和协商会话特点的Internet端点被称为用户代理。用户代理通常(不是必须)以应用的形式存在于用户的计算机上,这是目前最广泛使用的方式,不过用户代理也可以是蜂窝电话、PSTN网关、PDA、语音自动应答(IVR)系统等。用户代理也常常被称为用户代理服务器(UAS)和用户代理客户(UAC)。UAS和UAC是逻辑实体,每个用户代理都包括UAS和UAC。UAC在用户代理中负责发送请求和接收响应,而UAS负责接收请求和发送响应。由于用户代理包括UAS和UAC,所以其行为就像UAS或UAC。例如,主叫方用户代理在发送INVITE请求和响应对方的时候是UAC,被叫方的用户代理在接收INVITE请求和发送响应给对方的时候是UAS。但是当被叫方决定发送BYE和中止请求的时候,情况就不一样了。在这种情况下,被叫方的用户代理(发送BYE)的作为UAC,而主叫方的用户代理作为UAS。图2.11UAC和UAS图2.11中有三个用户代理和一个静态的分支代理服务器。每个用户代理都包括UAC和UAS,代理部分负责接收来自主叫方的INVITE,实际上也就是UAS。在做静态请求转发时,代理创建两个UAC,每个UAC负责一个分支。在这个例子中,被叫方B拾起听筒,而之后,如果要断开呼叫,就发出一个BYE消息。此时,原先用作UAS的代理现在变作UAC,原先用作UAC的代理现在变作UAS。2.2.2代理服务器SIP允许建立一种被称为代理服务器的网络主机的基本设施。用户代理可以给代理服务器发送消息。代理服务器在SIP网络中是非常重要的一种实体,负责按照被请求者当前的位置完成路由、认证、记账和其他重要的功能。代理服务器最重要的任务是把会话请求路由到‘接近’到被叫方。一般情况下,会话请求会遍历一组代理服务器,直到找到知道被叫方实际位置的代理服务器。这个代理服务器会直接转发会话请求给被叫方,然后被叫方接受或拒绝该会话请求。SIP代理服务器分为两种类型:无状态代理服务器和有无状态代理服务器。2.2.2.1无状态服务器对消息作简单的转发,彼此之间没有依赖关系。尽管消息通常安排在交易内部(见2.2.2.4节),无状态代理服务器并不关心交易。无状态代理服务器简单,比状态代理服务器速度快,可以作为简单的负载均衡器、消息翻译器和路由器来使用。无状态代理服务器的缺点是不能吸收重传消息,或完成高级路由,例如分支和递归遍历。2.2.2.2状态服务器状态代理服务器相对复杂,它在接收到请求时建立一个状态并保持该状态直到交易完成。某些交易,特别是那些由INVITE创建的,能够持续很长时间(直到被叫方拾起听筒或拒绝该呼叫)。由于状态代理服务器在交易存续期间必须维持状态,所以性能受到限制。将SIP消息与交易关联能够给状态代理服务器带来某些有用的特性。状态代理服务器能够完成分支,这意味着在接收到一个消息,可以发送两个或更多的消息出去。状态代理服务器可以吸收重传消息,因为如果它已经接收到这个消息,它就可以从状态中知道(无状态代理服务器没有保留状态,因此无法检查)。状态代理服务器可以使用更复杂的方法来查找用户,例如,当用户没有接听电话,可以尝试拨他的办公室电话,或者将电话重定向到用户的移动电话上。无状态代理服务器无法做到这一点,因为它无法知道到办公室电话的交易如何结束。现在多数的SIP代理服务器都是有状态的,它们的配置通常都很复杂,要完成记账、分支和一些NAT穿透,这些功能都要求使用状态代理服务器。2.2.2.3代理服务器的使用假定有两个公司,A和B,每个公司都有自己的代理服务器,图2.12说明了来自公司A中员工Joe的会话请求如何到达公司B的员工Bob。图2.12会话请求用户Joe使用地址sip:bob@b.com来呼叫Bob。Joe的用户代理自己不知道如何路由该请求,但是被配置成把所有向外发送的消息发送到公司的代理服务器proxy.a.com上。该代理服务器计算出被叫用户sip:bob@b.com在其他公司,因此查询B公司的代理服务器,并将请求发送到那里。B公司的代理服务器可以预先配置在proxy.a.com,或者该代理使用DNSSRV记录来找到B的代理服务器。请求到达proxy.b.com,它知道Bob目前在公司,可以通过电话找到,并且他的IP地址为1.2.3.4,于是把请求发送到那里。2.2.3注册服务器前面已经提到,在proxy.b.com的SIP代理服务器知道Bob的当前位置,但是没有说明该代理服务器如何学习到用户的当前位置。Bob的用户代理(SIP电话)必须注册到注册服务器上。注册服务器是一个特殊的SIP实体,其接收来自用户的注册请求,抽取出用户当前位置的信息(IP地址、端口和用户名)并把这些信息保存在位置数据库中。位置数据库的作用是把sip:bob@b.com映射到类似sip:bob@1.2.3.4:5060的地址上。B公司的代理服务器使用位置数据库。当代理服务器接收到sip:bob@b.com对的请求时,它在位置数据库中搜索,发现sip:bob@1.2.3.4:5060,并请将邀请发送到那
本文标题:路由策略中SIP学习
链接地址:https://www.777doc.com/doc-2045305 .html