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
]

2、SIP的更多相关文章

  1. VoLTE的前世今生...说清楚VoIP、VoLTE、CSFB、VoWiFi、SIP、IMS那些事...

    转:https://mp.weixin.qq.com/s?__biz=MzA3MTA3OTIwMw==&mid=401344844&idx=1&sn=497b351f524af ...

  2. SIP学习笔记(转)

    本文转发自:http://blog.chinaunix.net/uid-20655530-id-1589483.html 学习 SIP 协议最快捷的方法是通过范例来学习, 找到了一个完整的呼叫流程,l ...

  3. TCP/IP、Http、Socket、XMPP-从入门到深入

    TCP/IP.Http.Socket.XMPP-从入门到深入 终极iOS程序猿 2016-12-29 18:27 为了便于大家理解和记忆,我们先对这几个概念进行的介绍,然后分析他们的不同,再进行详细的 ...

  4. TCP/IP、Http、Socket的区别

    1.标准网络层次 网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP. ...

  5. TCP/IP、Http的区别

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只 ...

  6. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  7. RTP/RTCP/RTSP/SIP/SDP 关系(直接看总结)

    RTP/RTCP/RTSP/SIP/SDP 关系   RTP(实时传输协议,传输层) Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议 ...

  8. [百科] - SIP(会话发起协议)

    SIP(会话发起协议)SIP是类似于HTTP的基于文本的协议.SIP可以减少应用特别是高级应用的开发时间.由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的深远意义 ...

  9. SIP学习(实例详解)

    本文摘自:http://blog.chinaunix.net/uid-20655530-id-1589483.html 学习 SIP 协议最快捷的方法是通过范例来学习, 找到了一个完整的呼叫流程,le ...

随机推荐

  1. Lua C++ Binding之Lunar, Luna

    服务端引擎的脚本, 我们项目在老端游项目上发展, 采取的是Lua脚本. 当前服务端的发展趋势是瘦引擎, 胖脚本模式, 基本上引擎负责的功能非常少, 主要是网络, 定帧, 定时器, 引擎通过导出相应的接 ...

  2. Dubbo框架

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  3. AJAX 的简单用法:

    AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以 ...

  4. 在不安装mysql-connector-net的情况下使用FluentData框架

    最近在开发项目中使用了FluentData框架,通过使用这个框架减少了很多开发的工作量,FluentData是一个轻量级的框架操作起来的自由度很大也少了很多负责的配置.但是在开发的时候发现一个问题就是 ...

  5. error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    以前一直用的VC6.0,最近换成VS2010了.哎这几天光折腾VS2010了. 曾经我以为程序没啥头绪忒头疼,现在觉得乱七八糟的编译问题才叫一个头裂=口= 原因:VC6.0中,如果没有直接显示指定的返 ...

  6. 2016_09_21 Russia is seriously running out of cash_CNN

    After almost two years in recession,the country's rainy day fund has shrunk to just $32.2 billlion t ...

  7. Android studio 快捷键(Mac)

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  8. kvm

    硬件,os,内核模块,用户空间工具,命令行具体参数,日志 [root@localhost ~]# yum install pciutils [root@localhost ~]# lscpu;lspc ...

  9. js 常用方法

    1: 五秒后跳出提示框 setTimeout("alert('已经过了五秒了')",5000) 2:  十秒后自动关闭窗口 <script language="ja ...

  10. 简述Session

    Session的原理 1.session技术的概述 * session是服务器端技术 * 服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象 * 由于session为用户浏览器独 ...