SIP消息简单理解-包括释放过程!

由于是远古笔记,所以大家将就一下,最下边有sip全部释放细节,可直接看大神的!
sip消息格式****
sip消息=起始行 (起始行=请求行/状态行)
*消息头部(一个或多个)
[消息体]

1)请求消息的起始行为请求行
由 方法名、请求url、协议版本组成 (各部分用空格分隔)
示例:INVITE sip:guest@192.xxx.x.x sip/2.0 (地址中不能出现空格)(sip目前版本为2.0)

方法名:(rfc3261)定义了6个方法:
INVITE,ACK,CANCEL,(用于建立会话连接)
OPTION,用于查询服务器能力
BYE, 终结连接
REGISTER 注册
2)响应消息的起始行为状态行
由:协议版本、状态码、状态相关的文本描述组成(各部分用空格分隔)
示例:sip/2.0 200 OK

sip头字段格式如:field-name:fileid-value

FROM头字段由:可选的名字、URL、uac选定的tag参数
示例:From: ”Bob”sip:bob@192.168.2.10;tag=22s9a

TO头字段组成:(允许有显示名称)、url组成
(tag参数,标示了一个对话,如果对话没有建立,tag就不应当出现)
(对话外的请求消息中不可以包含tag参数)
示例:”Alice”sip:alice@192.168.2.10

Call-ID头字段是用来将消息分组的唯一性标识。
示例:Call-ID: f81d4fae7dec11d0a765@aaa.cn

CSeq消息顺序编号由:对应请求方法、32位无符号整数组成

Max-Forwards最大跳数
(每经过一跳,就减一,如果达到目的地变为0
那么将报错483)
UAC必须把每个请求中都插入max-forwards:70 (值为70)

VIa头字段定义SIP事务的下层(传输层)传输协议,
并标识响应消息将要被发送的位置。/
只有当到达下一跳所用的传输协议被选定后,
才能在请求消息中加入Via头字段值。/
头字段中必须包含一个branch参数,
该参数用来标识由当前请求所建立的事物。/
branch必须以“z9hG4bK”开头
示例:Via: SIP/2.0/UDP aaa.cn:5060;branch=z9hG4bK74bf9

Contact头字段指定一个SIP或SIPS URI,
后续请求可以用它来联系到当前的UA。/
任何能够建立对话的请求消息中都必须有Contact头字段,
并且该头字段中只能包含一个SIP或SIPS URI。/
contact包含的uri即使任何对话外的后继消息中,该uri也必须有效。
示例:Contact: sip:192.168.2.198:12347

Record-Route头字段由代理服务器插入请求消息中,
这样可以使该对话中将来的请求仍能经过该代理服务器。/
示例:Record-Route:sip:beijing.aaa.cn;lr

Route头字段在SIP消息中构成一个列表,用来指定请求消息的路由
示例:Route:sip:shanghai.aaa.cn;lr

Content-Length头字段用十进制数指定发送的消息体的大小(字节数)
(该字段所指示的消息体的大小不包括分隔头字段和消息体的CRLF字符。
如果消息中无消息体,那么该字段必须设为0)
示例:Conrent-length:0

Content-Type头字段指定消息体的媒体类型
(如果消息体不为空,Content-Type头字段必须存在。)
示例:Content-Type: application/sdp

请求消息的路由:
即请求消息传输的路径是由请求消息中的Route头字段构成的路由集决定的。
而路由集则是根据建立会话的INVITE消息中的Record-Route头字段来创建的

(在初始的INVITE消息中,如果一个代理想要继续留在后续消息的路径中,
它需要向INVITE消息中插入一个Record-Route头)

在一个已建立的会话中,任何一方发出请求消息
都必须根据路由集向请求消息中插入相应的Route头字段

响应消息的路由:
是由对应的请求消息中的Via头字段决定的。/
当一个SIP实体在发出一条请求消息时,
它会在请求消息中插入一个Via头字段,以指示该请求的响应消息接收的地址。
这个Via头字段必须加在请求中现存的所有Via头字段的上方。/
对请求作出响应的SIP实体根据最顶部的Via头来决定把响应消息发送到哪里。/
当一个代理服务器接收到响应消息的时候,
需要把自己加入的Via头去掉,
然后根据剩下的Via头把该响应消息发送到下一跳地址。/

SDP消息解析
//SIP Request line/Status line + Headers + CRLF
v=0 //版本号为0
o=UserA 2890844526 2890844526 IN IP4 here.com
//建立者用户名+会话ID+版本+网络类型+地址类型+地址
s=Session SDP //会话名
c=IN IP4 100.101.102.103 //连接信息:网络类型+地址类型+地址
t=0 0 //会话活动时间 起始时间+终止时间
m=audio 49172 RTP/AVP 0
//媒体描述:媒体+端口+传送+格式列表
音频 + 端口49172 + 传输协议RTP + 格式AVT,有效负荷0(u率PCM编码)
a=rtpmap:0 PCMU/8000
//0或多个会话属性: 属性 + 有效负荷+ 编码名称 + 抽样频率。
// rtpmap + 0型 + PCMU + 8KHz
…… //其他SDP描述

SDP描述会话协议
用来描述多媒体会话的应用层控制协议
基于文本的协议
用于会话建立过程中的媒体类型和编码方案的协商。

SIP 会话发起协议
( 是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP
语音会话控制协议,具有灵活、易于实现、便于扩展等特点)

示例:

通话Ø 正常呼叫释放过程:
(1)用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求;
(2)代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址。若已包含,说明发生环回,返回指示错误的应答;若没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示的被叫终端代理B传送Invite请求。
(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。
(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。
(5)终端代理B指示被叫用户振铃,用户振铃后向代理服务器发送180Ringing振铃信息。
(6)代理服务器向终端代理A转发被叫用户振铃信息。
(7)被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200OK)
(8)代理服务器向终端代理A转发该成功指示(200OK)
(9)终端代理A收到信息后,向代理服务器发ACK信息进行确认
(10)代理服务器将ACK确认消息转发给终端代理B。
(11)主被叫用户之间建立通信连接,开始通话。

全部释放过程大神总结点击

posted @ 2021-07-03 18:49  ybt&kexiao  阅读(764)  评论(0编辑  收藏  举报