SIP协议
了解SIP协议基础
提示
SIP(Session Initiation Protocol)是一种基于文本的协议,用于创建、修改和终止包括语音、视频、即时消息、在线游戏和虚拟现实在内的多媒体会话。
SIP协议的主要特点包括:
- 基于文本:SIP协议的消息是基于文本的,这使得它易于理解和调试。
- 灵活性:SIP协议可以用于创建各种类型的多媒体会话,不仅限于语音和视频通话。
- 可扩展性:SIP协议可以通过添加新的方法和头部字段来进行扩展。
SIP协议的工作原理是通过发送请求和接收响应来建立会话。请求可以是INVITE(邀请)、ACK(确认)、BYE(结束)等,响应可以是100(试图)、200(成功)等。
SIP协议的组成部分
SIP协议主要由以下几个部分组成:
- 请求行:请求行包含了请求的方法和请求的URI。常见的请求方法有INVITE、ACK、BYE等。
- 头部字段:头部字段包含了关于请求的各种信息,如From(发件人)、To(收件人)、Call-ID(呼叫标识)等。
- 消息体:消息体包含了请求的具体内容,如SDP(会话描述协议)。
一个GB28181协议中的SIPINVITE
请求长这样:
INVITE sip:34020000002000000001@3402000000 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.100:5060;rport;branch=z9hG4bK34020000001320000001
From: <sip:34020000001320000001@3402000000>;tag=34020000001320000001
To: <sip:34020000002000000001@3402000000>
Call-ID: 3402000000132000000120190815100052
CSeq: 20 INVITE
Contact: <sip:34020000001320000001@192.168.0.100:5060>
Max-Forwards: 70
User-Agent: IP Camera
Subject: 34020000001320000001:34020000002000000001,34020000002000000001:0201832000000001
Content-Type: application/sdp
Content-Length: 187
逐行解释一下,这些都是开发中会遇到的概念:
- 请求行:
INVITE sip:34020000002000000001@3402000000 SIP/2.0
INVITE
是一个SIP方法,在GB28181协议中,INVITE
通常用于请求视频流。sip:34020000002000000001@3402000000
是URI;在SIP协议中,URI通常用于标识会话的参与者。这个URI可能表示一个摄像头设备。SIP/2.0
SIP协议版本。
- Via头部字段:
Via: SIP/2.0/UDP 192.168.0.100:5060;rport;branch=z9hG4bK34020000001320000001
用于记录请求的转发路径。branch
用于唯一标识一个事务,可以帮助SIP设备正确地匹配请求和响应。一个请求和它的所有响应的branch
不变。
- From头部字段:
From: <sip:34020000001320000001@3402000000>;tag=34020000001320000001
表示请求的发送者。tag
用于唯一标识一个对话,一个对话通常包括一个或多个事务。当摄像头发送REGISTER
请求时,生成一个tag
,填充在From
头中,并在后续与这个注册会话相关的所有SIP消息中使用这个Tag
- To头部字段:
To: <sip:34020000002000000001@3402000000>
表示请求的接收者。- 当这个是服务器响应消息时,SIP服务器需要会填充tag,对于每个新的请求SIP服务器在响应时都会填充一个新的toTag
- Call-ID头部字段:
Call-ID: 3402000000132000000120190815100052
用于唯一标识一个会话。- 例如在摄像头注册的过程中,所有SIP消息中使用同一个
Call-ID
- 例如在摄像头注册的过程中,所有SIP消息中使用同一个
- CSeq头部字段:
CSeq: 20 INVITE
这是CSeq头部字段,用于标识请求的序列号和方法。 - Contact头部字段:
Contact: <sip:34020000001320000001@192.168.0.100:5060>
这是Contact头部字段,表示请求的发送者的联系信息。 - Max-Forwards头部字段:
Max-Forwards: 70
这是Max-Forwards头部字段,用于限制请求的最大转发次数。 - User-Agent头部字段:
User-Agent: IP Camera
这是User-Agent头部字段,表示请求的发送者的用户代理信息。 - Subject头部字段:
Subject: 34020000001320000001:34020000002000000001,34020000002000000001:0201832000000001
这是Subject头部字段,表示请求的主题。 - Content-Type头部字段:
Content-Type: application/sdp
这是Content-Type头部字段,表示消息体的媒体类型。 - Content-Length头部字段:
Content-Length: 187
这是Content-Length头部字段,表示消息体的长度。
SIP协议的工作流程
SIP协议的工作流程通常包括以下几个步骤:
- 发起请求:客户端向服务器发送一个INVITE请求,请求建立一个会话。
- 接收响应:服务器收到请求后,返回一个100 Trying响应,表示正在处理请求。
- 发送确认:服务器处理完请求后,返回一个200 OK响应,表示请求已被接受。客户端收到200 OK响应后,发送一个ACK请求,表示已收到响应。
- 维持会话:在会话期间,客户端和服务器可以通过发送INFO、UPDATE等请求来更新会话状态。
- 结束会话:当会话结束时,客户端向服务器发送一个BYE请求,请求结束会话。服务器收到BYE请求后,返回一个200 OK响应,表示会话已被结束。