• 2、SIP


    1、初学者笔记:http://www.cnblogs.com/gnuhpc/archive/2012/01/16/2323637.html

    2、SIP头字段解释:http://www.cnblogs.com/my_life/articles/2282364.html

                              http://www.cnblogs.com/zhongwencool/p/3705359.html

                              http://www.cnblogs.com/share-everything-i-do/archive/2012/11/04/2754053.html

    3、SDP各个字段解释:http://blog.csdn.net/frankiewang008/article/details/12914819

                                 http://blog.chinaunix.net/uid-790245-id-2037592.html

    4、SIP常见问题集锦:http://blog.sina.com.cn/s/blog_a34ac27e010159fl.html

    4、最近看log,发现有些header自己理解的还不是很透彻,特此做如下总结:

    首先看一个例子,我结合例子来解释各个header的含义,I believe it is a better method.

    [INVITE sip:6328403011@ims.luqdlab.com;user=phone SIP/2.0
    Via: SIP/2.0/UDP 127.0.0.1;branch=z9hG4bK_004_167458-887569916
    Via: SIP/2.0/UDP 135.252.36.232:5060;received=135.252.36.232;branch=z9hG4bK87fc24e85060-75116;rport=5060
    From: "QD6328403045"<sip:+16328403045@ims.luqdlab.com>;tag=87FC24E813C4-80515FDC0
    To: <sip:6328403011@ims.luqdlab.com;user=phone>

    【解释】to字段总是包含被呼叫方的地址(通过sip代理时是公用地址,点对点时是真实ip),要注意的是区别该标题头和sip消息请求行中的Request-URI。To在信令路径中不会被代理改变,然而Request-URI包含的是信令路径中下一跳的地址,因此在路途中被每个代理改变


    Call-ID: 33-7fdce916-993170d4@87fc24e8
    CSeq: 1 INVITE

    【解释】1、 又叫Command Seqence(命令队列),每发一个新的请求,这个数就会+1,最大2^31;

    2、 用来标识命令和命令顺序,整数部用于同一session(CallID决定)中不同的请求排序,它将请求和应答相匹配:比如:Alice 发1 Invite 没返回--->再发 2 Invite--->没返回--->再发3 Invite--->这时返回了2 Invite就知道是第2个请求得到了响应(这个数是一直递增1的); 【因为在同一个transtation里面,invite其它消息都没有变化的,所以得用cseq来区别了】 
    - Ack的CSeq:这个是与Invite里面的一样的,这使代理为非成功最终应答产生Ack时不用再建立新的CSeq,保证唯一性,只用client代理创建哦; 
    - Cancel的CSeq:这个也是与Invite里面的一样的,这也是为什么CSeq里面要加Method的原因,如果不加,client就不知道这个是cancel还是invite的应答了;


    User-Agent: SIP-6328-2Re-v4.2.70-+16328403045/v2.0 Enabled

    【解释】User-Agent通用头域包含了关于发送初始请求的客户用户代理的消息。
    此头域用于统计目的,跟踪违反协议的情况、用户代理的自动认可的情况,以便在编制响应时避免特定用户代理的限制。用户代理应在请求中包含此头域。


    Contact: "QD6328403045"<sip:+16328403045@135.252.36.232:5060>

    【解释】0、此字段是设备标示

    1、后续Request将根据Contact头域的内容决定目的地的地址(因为Contact头域的内容是具体的物理地址),同时将Contact头域的内容放到Request-URI中。它还可以用来指示没有在Record-Route头域中记录的Proxies的地址。同时它还可以被用在Redirect servers和REGISTER requests 和responses。

    2、包含源的URI信息,用来给响应消息直接和源建立连接用;

    3、注意和From的差别:这个是可以让被叫方Bob直接找到呼叫方的绝对地址。


    Allow: ACK,BYE,CANCEL,INVITE,NOTIFY,INFO,OPTIONS,PRACK,REFER,REGISTER,UPDATE

    【解释】列明UAS支持哪些方法
    Accept: application/sdp

    【解释】Accept域用于INVITE、OPTIONS和REGISTER请求方式中,指示在响应中能够接收的媒体的类型(缺省值为application/sdp)。


    Max-Forwards: 69

    【解释】2.1 用于表示这个包最多可以传送多少跳,当Max-Forwards==0&&没到达目的地时,系统会返回483(Too many hops);一般会在有Request的包里面;

    2.2 默认为70;

    2.3 原理:每经过一跳时【Todo:一个代理?】都会减一向下一跳传去.


    Supported: replaces,100rel,path
    P-Preferred-Identity: "QD6328403045"<sip:+16328403045@ims.luqdlab.com>
    Content-Type: application/sdp

    【解释】指明消息体的类型为SDP
    Content-Length: 292

    【解释】指明消息体的字节大小

    v=0
    o=- 848095510 848095510 IN IP4 135.252.36.232
    s=InnoMedia SIP Call
    c=IN IP4 135.252.36.232
    t=0 0
    m=audio 10000 RTP/AVP 0 8 18 101
    a=rtpmap:0 PCMU/8000
    a=rtpmap:8 PCMA/8000
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=ptime:20
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    ]

  • 相关阅读:
    Jenkins安装
    Python操作yaml文件
    class 中构造函数与析构函数
    python发送邮件(yagmail模块)
    filter、map函数的区别
    python redis操作
    多个 python的pip版本选择
    python Excel操作
    python MD5操作
    缓存淘汰算法之LRU实现
  • 原文地址:https://www.cnblogs.com/suinuaner/p/work_SIP1.html
Copyright © 2020-2023  润新知