zoukankan      html  css  js  c++  java
  • SIP协议入门:初学者必须明白的几个重要概念

    SIP协议初学者必须明白的几个重要概念

     http://blog.sina.com.cn/s/blog_60e1d7bb0100f6er.html

    一、 SIP协议的分层结构
    SIP是一个分层结构协议,它的行为根据一组平等独立的处理阶段来描述,每一阶段之间只是松耦合。
    SIP的最底层是语法和编码。它的编码使用增强Backus-Nayr形式语法(BNF)来规定。
    第二层是传输层,定义了网络上客户机与服务器发送请求和接收响应的方式,所有的SIP元素包含传输层。
    第三层是事务层。事务是SIP的基本元素。事务层具有客户机组成部分(称为客户机事务)和服务器组成部分(称为服务器事务),一个事务由客户机事务发送给服务器事务的请求(使用传输层),以及服务器事务发送对应该请求的响应组成。
    事务层之上的层为事务用户(TU)。当一个TU希望发送请求时,生成一个客户机事务实例并向它传递请求和IP地址、端口和用来发送请求的传输机制。


    二、Sip 几个重要参数:

    1)       如下三个值相同代表同一个dailog(会话)

    Call-id

    Form  tag

    To  tag


    2) branch值相同,代表同一个 transaction(事务)

    Branch


    3) cseq

    Cseq

    其生存域是一个会话。用于将一个会话中的请求消息序列化,以便用于重复消息、“迟到”消息的检测,响应消息与相应请求消息的匹配等。包含两部分:一个32位的序列号,一个请求方法。
    通常在会话开始时确定一个初始值,其后再发送消息时将该值加1。主叫方与被叫叫各自维护自己的CSeq序列,互不干扰,这有点像TCP/IP中IP包的序列号。
    一个响应消息有与其对应的请求消息相同的CSeq值。
    【注意】SIP中CANCEL消息与ACK消息总是比较特殊。CANCEL消息的CSeq中的序列号总是跟其要cancel的消息的相同,而对于ACK消息:如果它所要确认的是INVITE请求的non-2xx响应,则ACK消息的CSeq中的序列号与对应INVITE请求的相同;如果是2xx响应,则不同,此时ACK被当作一个新的事务。


    三、 Dialog:对话,一个对话是持续一段时间的两个UA之间的端到端的SIP关系。一个对话由SIP消息建立,就像用2xx响应INVITE请求。我们用Call identifier,local tag(本地tag),remote tag(对方tag)来标志一个对话,一个对话在RFC 2543中被正式叫做CALL LEG.


    Dialog(会话) 会话是两个UAs(user agent) 之间持续一段时间的端到端(peer-to-peer)的SIP 关系. 一个会话由一个Call-ID, 一个local tag 和 一个remote tag来标识.会话过去也叫做 "call leg".

     Call-id,local tag,remote tag 三者值相同,代表同一个dailog

     四、 Transaction(事务)  事务发生于客户端和服务器端之间,包含从客户端发出请求给服务器,到服务器响应给客户端的最终消息(non-1xx message)之间的所有消息. 如果请求是一个"Invite"消息,并且最终的响应是一个non-2xx消息,那么该事务包含一个"Ack"响应消息.如果服务器的响应是一个2xx消息,那么,随后的ACK是一个单独的事务.

     

    branch参数含义   branch值相同代表同一个Transaction事务系列

    Branch是一个事务ID(Transaction ID),用于区分同一个Client所发起的不同Transaction。
    对于遵循RFC3261规范的实现,这个branch参数的值必须用magic cookie”z9hG4bK”打头. 其它部分是对“To, From, Call-ID头域和Request-URI”按一定的算法加密后得到。

    根据本标准产生的branch ID必须用”z9h64bK”开头。这7个字母是一个乱数cookie(定义成为7位的是为了保证旧版本的RFC2543实现不会产生这样的值),这样服务器收到请求之后,可以很方便的知道这个branch ID是否由本规范所产生的(就是说,全局唯一的)

  • 相关阅读:
    DDOS工具介绍转载 规格严格
    MSB和LSB 规格严格
    Java 脚本 规格严格
    Derby配置总结(原创) 规格严格
    new ImageIcon(String filename)的路径问题 规格严格
    转载JNI(Windows) 规格严格
    C++ 0x新特性:详细讲解lambda表达式
    Linux信号量线程控制
    虚拟机VMware中安装 RedHateEL4(图解)
    2011年7月编程语言排行榜:COBOL五角大楼出品
  • 原文地址:https://www.cnblogs.com/luoyinjie/p/7219379.html
Copyright © 2011-2022 走看看