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


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=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:[email protected]>

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

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

4. From

From: Alice
<sip:[email protected]>;tag=1928301774

4.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
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:[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

时间: 2024-08-25 22:18:19

[SIP01]SIP Header Fields里面各字段用途的相关文章

Status Code: 431 Request Header Fields Too Large

Status Code: 431 Request Header Fields Too Large 原文地址:https://www.cnblogs.com/yuanjiangw/p/11725663.html

FreeSWITCH协议参数之自定义sip header

一.主动发送 1. 加入sip_h_前缀 这样FreeSWITCH就能自动加上后面的扩展头. 2. 示例 <action application="set" data="sip_h_X-Product-ID=123456"/> 这样后续的SIP呼叫消息会带上自定义头: X-Product-ID:123456 3. 注意:这个头的封装创建是FreeSWITCH来完成的. 二.被动接收 1. 约定X-前缀 这样收到的自定义头能被FreeSWITCH解析出来.

[转]HTTP Response Header Fields

当浏览器发送了HTTP请求之后,服务器就会通过一个HTTP response来响应这个请求.http header请求完成之后,你的浏览器可能会收到如下的HTTP响应: HTTP/1.x 200 OKTransfer-Encoding: chunkedDate: Sat, 28 Nov 2009 04:36:25 GMTServer: LiteSpeedConnection: closeX-Powered-By: W3 Total Cache/0.8Pragma: publicExpires:

List of HTTP header fields

https://en.wikipedia.org/wiki/List_of_HTTP_header_fields Content-Type The MIME type of the body of the request (used with POST and PUT requests) Content-Type: application/x-www-form-urlencoded 常见 MIME type Type application application/json: JavaScrip

http2协议翻译(转)

超文本传输协议版本 2 IETF HTTP2草案(draft-ietf-httpbis-http2-13) 摘要 本规范描述了一种优化的超文本传输协议(HTTP).HTTP/2通过引进报头字段压缩以及多路复用来更有效利用网络资源.减少感知延迟.另外还介绍了服务器推送规范. 本文档保持对HTTP/1.1的后向兼容,HTTP的现有的语义保持不变. 1 介绍 The Hypertext Transfer Protocol (HTTP) is a wildly successful protocol.

HTTP报文头解析

HTTP报文头解析 本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每个值之间有逗号分隔.如果该值需要优先级,那么在值的后方跟上优先级q=0.8(q的值由0~1,优先级从低到高).值与优先级中间由分号相隔. 头部字段名:值1, 值2;q=0.8 下方就是截取的网络请求中Request Headers的部分内容.红框中的Accept-Language

图解HTTP第六章:HTTP首部

学习HTTP首部的结构和首部中各字段的用法. HTTP首部字段 使用首部字段是为了给浏览器和服务器提供报文主体大小.所使用的语言.认证信息等内容. 首部字段对应单个HTTP首部可以有多个值.如果首部字段重复,根据浏览器逻辑处理,有的以第一个为准,有的以最后出现的为准. 4种首部字段类型 通用首部字段(General Header Fields) 请求首部字段(Request Header Fields) 响应首部字段(Response Header Fields) 实体首部字段(Entity H

HTTP要点概述:三,客户端和服务器,请求和响应

一,客户端和服务器: HTTP协议主要用于客户端和服务器之间的通信. 1,客户端(client):请求访问资源的一端.(知道为啥用C表示客户端了吧) 2,服务器(server):提供资源响应的一端. 两台使用HTTP协议通信的两台计算机,在一条通信线路上,必定有一端是客户端,另一端是服务器.就实际情况而言,两台计算机之间作为服务器或者客户端角色可能会发生互换,就一条通信线路而言(记得好像是信道,information channels)客户端和服务器角色是固定的,并且HTTP可以明确区分哪个是客

[小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证

在一些 Web 系统中,身份验证是依靠硬件证书进行的:在电脑上插入 USB 证书,浏览器插件读取证书的相关信息,然后在发送 HTTP 登录请求时顺便在 Header 字段附加上身份信息.服务器端处理这样的登录请求的思路也很简单,就是读取 HTTP Header 相关信息,然后进行相应的处理. 在 ASP.Net MVC 架构的网站中,自然也可以使用这样的机制,下面基于 Visual Studio 2012 演示一下操作步骤. 首先建立一个ASP.Net MVC 4 项目. 选择模板的时候,保留默