SIP协议

了解SIP协议基础

提示

SIPopen in new window(Session Initiation Protocol)是一种基于文本的协议,用于创建、修改和终止包括语音、视频、即时消息、在线游戏和虚拟现实在内的多媒体会话。

SIP协议的主要特点包括:

  1. 基于文本SIP协议open in new window的消息是基于文本的,这使得它易于理解和调试。
  2. 灵活性SIP协议open in new window可以用于创建各种类型的多媒体会话,不仅限于语音和视频通话。
  3. 可扩展性SIP协议open in new window可以通过添加新的方法和头部字段来进行扩展。

SIP协议open in new window工作原理是通过发送请求和接收响应来建立会话。请求可以是INVITE(邀请)、ACK(确认)、BYE(结束)等,响应可以是100(试图)、200(成功)等。

SIP协议的组成部分

SIP协议open in new window主要由以下几个部分组成:

  1. 请求行:请求行包含了请求的方法和请求的URI。常见的请求方法有INVITE、ACK、BYE等。
  2. 头部字段:头部字段包含了关于请求的各种信息,如From(发件人)、To(收件人)、Call-ID(呼叫标识)等。
  3. 消息体:消息体包含了请求的具体内容,如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

逐行解释一下,这些都是开发中会遇到的概念:

  1. 请求行INVITE sip:34020000002000000001@3402000000 SIP/2.0
    • INVITE是一个SIP方法,在GB28181协议中,INVITE通常用于请求视频流
    • sip:34020000002000000001@3402000000是URI;在SIP协议中,URI通常用于标识会话的参与者。这个URI可能表示一个摄像头设备。
    • SIP/2.0 SIP协议版本。
  2. Via头部字段Via: SIP/2.0/UDP 192.168.0.100:5060;rport;branch=z9hG4bK34020000001320000001 用于记录请求的转发路径。
    • branch用于唯一标识一个事务,可以帮助SIP设备正确地匹配请求和响应。一个请求和它的所有响应的branch不变。
  3. From头部字段From: <sip:34020000001320000001@3402000000>;tag=34020000001320000001 表示请求的发送者。
    • tag用于唯一标识一个对话,一个对话通常包括一个或多个事务。当摄像头发送REGISTER请求时,生成一个tag,填充在From头中,并在后续与这个注册会话相关的所有SIP消息中使用这个Tag
  4. To头部字段To: <sip:34020000002000000001@3402000000> 表示请求的接收者。
    • 当这个是服务器响应消息时,SIP服务器需要会填充tag,对于每个新的请求SIP服务器在响应时都会填充一个新的toTag
  5. Call-ID头部字段Call-ID: 3402000000132000000120190815100052 用于唯一标识一个会话。
    • 例如在摄像头注册的过程中,所有SIP消息中使用同一个Call-ID
  6. CSeq头部字段CSeq: 20 INVITE 这是CSeq头部字段,用于标识请求的序列号和方法。
  7. Contact头部字段Contact: <sip:34020000001320000001@192.168.0.100:5060> 这是Contact头部字段,表示请求的发送者的联系信息。
  8. Max-Forwards头部字段Max-Forwards: 70 这是Max-Forwards头部字段,用于限制请求的最大转发次数。
  9. User-Agent头部字段User-Agent: IP Camera 这是User-Agent头部字段,表示请求的发送者的用户代理信息。
  10. Subject头部字段Subject: 34020000001320000001:34020000002000000001,34020000002000000001:0201832000000001 这是Subject头部字段,表示请求的主题。
  11. Content-Type头部字段Content-Type: application/sdp 这是Content-Type头部字段,表示消息体的媒体类型。
  12. Content-Length头部字段Content-Length: 187 这是Content-Length头部字段,表示消息体的长度。

SIP协议的工作流程

SIP协议open in new window的工作流程通常包括以下几个步骤:

  1. 发起请求:客户端向服务器发送一个INVITE请求,请求建立一个会话。
  2. 接收响应:服务器收到请求后,返回一个100 Trying响应,表示正在处理请求。
  3. 发送确认:服务器处理完请求后,返回一个200 OK响应,表示请求已被接受。客户端收到200 OK响应后,发送一个ACK请求,表示已收到响应。
  4. 维持会话:在会话期间,客户端和服务器可以通过发送INFO、UPDATE等请求来更新会话状态。
  5. 结束会话:当会话结束时,客户端向服务器发送一个BYE请求,请求结束会话。服务器收到BYE请求后,返回一个200 OK响应,表示会话已被结束。