IP电话机、视频可视电话通信产品及组网方案

SIP消息的一般格式(二)

时间:2019-10-26 09:02 作者:admin 分享到:
          (5) Via
         Via字段用以指示请求历经的路径。它可以防止请求消息传送产生环路,并确保应 答和请求消息选择同样的路径,以保证通过防火墙或满足其他特定的选路要求。
         在我国原信息产业部关于SIP协议的标准中规定,当UAC生成请求消息时,它必须 在其中插入个Via头字段。Via头字段的协议名称和协议版本必须分别为“SIP” 和“2. 0”,Via头字段中必须包含一个“branch”参数,该参数用来标识由,前请求所建立 的事务。该参数既用在客户端也用在服务器端。对于某个UA发出的所有请求,它们的 branch参数值在空间和时间上必须全局唯一。但有两种情况例外:一是CANCEL请求, 后面会说明CANCEL请求的branch参数与它所要取消的那个请求的branch参数是一 样的;另一个是对非200响应的ACK请求,这种情况下ACK请求与相关的INVITE请 求有着同样的branch ID,它所要确认的就是该INVITE的响应。
         SIP实体在插入branch ID时,必须以“ z9hG4bK”开头。这样SIP服务器在收到请求 消息时,就能确定现在的branch ID是全局唯一的。
         发起请求的客户必须将其自身的主机名或网络地址插入请求的Via字段,如果未采 用默认端口号,还需插入此端口号。在请求消息前传过程中,每个代理服务器必须将其自 身地址作为一个新的Via字段加在已有的Via字段之前。如果代理服务器收到一个请 求,发现其自身地址位于Via头部屮,则必须回送响应“检测到环路”。
         当请求消息通过网络地址翻译点(如防火墙)时,请求的源地址和端口号可能被改变, 此时Via字段就不能成为应答消息选路的依据了。为了防止这一点,代理服务器应校验 顶端Via字段,如果发现其值和代理服务器检测到的前站地址不符,则应在该Via字段中 加入“received”参数,“received”参数用来记录代理服务器检测到的前站地址,如此修改后 的字段称为“接收方标记Via头部字段”。若代理服务器向多播地址发送请求,则必须在 其Via头部字段中加入“多播地址’’(maddr)参数,此参数指明该多播地址。
         例如,在下图所示的例子中,呼叫中心使用专用地址(10. x. x X),它通过一个能够进 行网络地址翻译的路由器连接到因特网上。当呼叫中心从代理PXY1接收到邀请请求消息 时,该请求消息的源IP地址不是192. 9. 5. 3,而是被NAT(网络地址翻译)设备翻译的10. 0. 0.3。因此自动呼叫分配(ACD)系统会在向后转发的邀请请求消息的Via头部的“received” 参数中记录这个信息,该参数的格式为“received=10. 0. 0. 3”。在这个消息的应答接收后.由 “received”参数,呼叫中心知道它必须将对请求的应答消息转发到10. 0. 0. 3,而不是PXY1 ©provider, com。这种机制也可以用于向IP地址域以外不可路由的地址发送请求。
图   Via头部中“received”参数的应用
        这个例子同时也表现出多播是如何被处理的。由于自动呼叫分配系统是以多播方式 向所有的话务员转发邀请消息,所以在Via头部中增加了 maddr参数,当个maddr参 数出现在Via域中时,应答是使用maddr地址以多播的方式转发的(TTL值同时也存储 在TTL参数中>。
         Via头域是SIP屮功能最强大的部分之一,而且表现出SIP在设计时已经考虑到了 IP网络的问题。
         (6) Contact
        该字段用于INVITE、ACK和REGISTER请求以及成功应答、呼叫进展应答和重定 向应答消息,其作用是给出其后与用户直接通信的地址。
        INVITE和ACK请求中的Contact字段指示该请求发出的位置。它使被叫可以直 接将请求(如BYE请求)发往该地址,而不必借助Via字段经由一系列代理服务器返回。
        对INVITE请求的成功应答消息可包含Contact字段,它使其后的SIP请求消息(如 ACK请求)叫直接发往该字段给定的地址。该地址一般是被叫主机的地址,如果该主机 位于防火墙之后,则为代理服务器地址。
        对应于INVITE请求的呼叫进展应答消息中包含的Contact字段的含义和成功应答 消息相同。但是,CANCEL请求不能直接发往该地址,必须沿原请求发送的路径前传。
         REGISTER请求中的Contact字段指明用户可达位置。在该请求消息的Contact头 部还定义了通配字段“*”,它用来和值为0的“失效”字段配用,表示删除某用户的所有登 记。Contact头部也可设定“失效”参数(任选参数),给定登记的失效时间。
        REGISTER请求的成功应答消息中的Contact字段返回该用户当前可达的位置。
        对BYE、INVITE和OPTIONS方法的重定向应答消息,如原因值为用户临时迁移、 永久迁移、地址模糊等,在重定向应答消息中的Contact头部给出的是可供重试的其他可 选地址。
        Contact头字段指定一个SIP URL,后续请求可以用它来联系到当前UA。任何能够 建立对话的请求消息中都必须有Contact头字段,并且该头字段中只能含有•个SIP或 SIP URL。在我国原信息产业部关于SIP协议的标准中定义的请求方法中,只有INVITE 请求能建立对话。 对这些能建立对话的请求, Contact 的作用范围是全局的。也就 是说,Contact头字段值中包含的URL是UA希望用来接收请求的地址,即使用在任何 对话外的后续请求消息中,该URL也必须有效。
       (7) Max-Forwards
        Max-Forwards头字段限定一个请求消息在到达目的地之前允许经过的最大跳数。 它包含一个整数值,每经过一跳,这个值就被减1。如果在请求消息到达目的地之前该值 变为〇,那么请求将被拒绝并返回-•个483(跳数过多)错误响应消息。
        UAC必须在它发起的每个请求中都播入Max-Forwards头字段,值为70。在任何不 出现回路的SIP网络中,选择该值为70已足够大,从而保证个请求消息不被丢弃,且在 有回路的情况下,这个值也不会因太大而过分浪费代理服务器的资源。UA只有在知道 网络的拓扑结构时,才可以谨慎地选择更小的跳数值。
        (8) 实体头部
       在SIP中,消息体由与会话有关的信息或将展现给用户的信息所组成。当信息与会 话有关时,可根据SDP协议对会话进行描述,用来描述媒体的负载类型、接收媒体信息的 地址和端口号码等信息。实体头部的目的就是指出包括在消息体中的信息的类型和格 式,以保证能正确调用适当的应用程序来处理这些消息体内的信息。
        实体头部字段由Content-Type(内容类型)、Content-Length(内容长度)、Content- Language (消息体的接收者的原始语言)、Content-Encoding (编解码方式)组成。
        Content-Type头部字段指出消息体的类型,Content-Length头部字段指出消息体以 字节为单位的长度,Content-Encoding头字段的值指定了适用于该实体的编码以及为了 获得Content-Type指定的媒体类型所需要使用的解码机制。
        当消息体的类型为 SDP 时,Content-Type 头部字段为:“ Content-Type: application/ sdp”。
        当消息体的类型为 ISUP 时,Content-Type 头部字段为:“Content-Type:application/ ISUP,。
         在我国原信息产业部关于SIP协议的标准中规定,由UAC产生的一个有效的SIP 请求消息必须至少包含下列头字段:To、From、CSeq、Call-ID、Max-Forwards和Via头 字段,这些头字段在所有的SIP请求消息都是必选的。这6个头字段是构建SIP消息的 基本单元,它们共同提供了大部分的关键的消息路由服务,包括消息的寻址、响应的路由、 消息传播距离限制、消息排序,以及事务交互的唯一性标识等。另外,请求行(request line)也是必选的,它包含了请求方法、Request-URL、SIP版本信息。

版权所有:IP电话:http://www.g3voip.com 转载请注明出处

热销IP电话产品hot products