码迷,mamicode.com
首页 > 其他好文 > 详细

[SIP01]SIP Header Fields里面各字段用途

时间:2014-05-04 12:34:06      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

bubuko.com,布布扣
INVITE sip:bob@biloxi.com SIP/2.0
      Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
      Max-Forwards: 70
      To: Bob <sip:bob@biloxi.com>
      From: Alice <sip:alice@atlanta.com>;tag=1928301774
      Call-ID: a84b4c76e66710@pc33.atlanta.com
      CSeq: 314159 INVITE
      Contact: <sip:alice@pc33.atlanta.com>
      Content-Type: application/sdp
      Content-Length: 142

      (Alice’s SDP not shown)
bubuko.com,布布扣

1. Via

Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds

1.1 用来标识Responeses消息的返回路径(todo:各router的区别),包含SIP版本,通过的路径,branch;每个Request-Line(请求消息)路过代理Server时都会记录,然后原路返回;

1.2 用来检查路由环,因为每经过server都会把他放在via里面,每都一个Server里先检查via头里面有没有这个server如果有,出现了路由环【Todo:出错?】;

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

1.4 全局唯一性,【Todo:与CallID全局唯一性区别】.

2.Max-Forwards

Max-Forwards: 70

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

2.2 默认为70;

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

3. To

To: Bob <sip:bob@biloxi.com>

3.1 目的地的绝对地址,包含补叫的display name 和被 叫URL,&前面带的是设备号或被叫号码,&后带的是Proxy地址;

3.2 这个地址用于给Proxy们找路由的,一般会经过Proxy一步步定位到最精确的位置【改为其它精确地址】.

4. From

From: Alice <sip:alice@atlanta.com>;tag=1928301774

4.1 格式与To一样,表示Caller的绝对地址,但是会加一个Tag标签;

4.2  Tag 他是一个随机码【Todo:可不可变?】用于 identification purposes.

5. Call-ID

          Call-ID: a84b4c76e66710@pc33.atlanta.com

5.1 Call-ID由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变;

5.2 对于用户发出Invite消息,本地会生成From Tag 和Call-ID全局唯一码,被叫方代理生成 To tag全局唯一码,这三个随机码做为整个对话中对话标识(dialog indentifier).

6. Cseq

CSeq: 314159 INVITE

6.1  又叫Command Seqence(命令队列),每发一个新的请求,这个数就会+1,要用于2*31;

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

以上几个字段是所有 SIP 消息体所必须的,其它头字段有些是可选的,有些在特定请求也是必须

 

7. Contact

Contact: <sip:alice@pc33.atlanta.com>

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

7.2 注意和From的差别:这个是可以让被叫方Bob直接找到呼叫方的绝对地址,【Todo:呼叫转移变的是To的地址,这个可能会变么?】

8. Content-Type,Content-Length

Content-Type: application/sdp %%指明消息体的类型为SDP【Todo: SDP会话描述协议】

Content-Length: 142                    %%指明消息体的字节大小

 

 

To be continue……

 

[SIP01]SIP Header Fields里面各字段用途,布布扣,bubuko.com

[SIP01]SIP Header Fields里面各字段用途

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/zhongwencool/p/3705359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!