INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Bob <sip:[email protected]>
From: Alice <sip:[email protected]>;tag=1928301774
Call-ID: [email protected]
CSeq: 314159 INVITE
Contact: <sip:[email protected]>
Content-Type: application/sdp
Content-Length: 142(Alice’s SDP not shown)
1. Via
Via: SIP/2.0/UDP
pc33.atlanta.com;branch=z9hG4bK776asdhds1.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:[email protected]>3.1 目的地的绝对地址,包含补叫的display name 和被
叫URL,&前面带的是设备号或被叫号码,&后带的是Proxy地址;3.2 这个地址用于给Proxy们找路由的,一般会经过Proxy一步步定位到最精确的位置【改为其它精确地址】.
4. From
From: Alice
<sip:[email protected]>;tag=19283017744.1 格式与To一样,表示Caller的绝对地址,但是会加一个Tag标签;
4.2 Tag 他是一个随机码【Todo:可不可变?】用于 identification
purposes.
5. Call-ID
Call-ID: [email protected]
5.1
Call-ID由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变;5.2 对于用户发出Invite消息,本地会生成From Tag
和Call-ID全局唯一码,被叫方代理生成 To tag全局唯一码,这三个随机码做为整个对话中对话标识(dialog
indentifier).
6. Cseq
CSeq: 314159
INVITE6.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:[email protected]>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