SIP协议、linphone学习(一)

SIP协议介绍

网络上很多应用需先建立“会话”再传输数据,而现实中用户可能移动、有多个联系方式、传输内容多样。SIP(会话初始协议)就是帮设备找人、发起邀请、建立会话的协议,借助代理服务器精准定位用户,轻量通用,可创建、修改、结束各类会话,不依赖底层网络和会话类型。

SIP协议功能概况

SIP是应用层控制协议,核心用于建立、修改、终止网络电话、视频会议等多媒体会话,可邀请他人加入会议、增减通话媒体。它支持用户移动,凭固定ID即可定位,无需关注实际网络地址,主要负责用户定位、有效性、能力核查,以及会话建立与管理,需配合其他协议实现完整服务,还具备安全防护,支持IPv4和IPv6。

SIP基本流程

通过简单的实操示例,讲解SIP完整实现流程,展示SIP定位终端、发起请求、协商参数、建立会话、结束会话的全步骤。

  • 基础说明
    本次示例为经典的SIP梯形模型。场景:小夏用电脑SIP软电话,拨打小杨的互联网SIP话机,全程经过两台SIP代理服务器完成连接。
    呼叫依靠SIP URI(统一资源标识符),格式类似邮箱,由用户名+主机名组成:
地址地址说明
小夏地址sip:xia@atlanta.com
小杨地址sip:yang@biloxi.com
加密安全地址sips:yang@biloxi.com(全程TLS加密传输)

SIP采用请求-应答模式,和HTTP协议类似,一次通信包含一个请求,至少一个应答。

  • 核心流程步骤
    步骤1:发起呼叫(INVITE请求)
    小夏软电话发送INVITE请求,发起通话邀请,报文示例:
INVITE sip:yang@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards:70
To: Yang <sip:yang@biloxi.com>
From: Xia <sip:xia@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:xia@pc33.atlanta.com>
Content-Type: application/sdp
Content-Length: 142
(小夏的SDP会话描述未展示)

核心字段释义

字段说明
Via记录主叫设备地址,标识会话事务
To/From被叫、主叫信息,附带唯一tag标记
Call-ID全局唯一呼叫标识
CSeq命令序列,请求序号递增
Contact主叫直连地址
Max-Forwards限制消息转发次数
Content-Type/Length消息正文格式与长度

媒体参数(编码、采样率等)由SDP协议承载,附在SIP报文正文里,不直接由SIP描述。

步骤2:代理服务器转发请求

  1. 小夏设备未知小杨地址,先将INVITE发给自身代理服务器atlanta.com;
  2. atlanta.com回复100 Trying,告知已接收请求,通过DNS查找小杨服务器biloxi.com,转发INVITE;
  3. biloxi.com收到后,同样回复100 Trying,查询内部定位库,获取小杨实时IP,转发至小杨话机;

步骤3:振铃提示(180 Ringing)

小杨话机收到INVITE后开始振铃,同时返回180 Ringing消息,沿原代理服务器路径传回小夏,小夏终端响起回铃音。

步骤4:接听通话(200 OK+ACK确认)
小杨接听后,话机发送200 OK应答,携带自身SDP媒体参数,报文示例

SIP/2.0 200 OK
Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bKnashds8;received=192.0.2.3
Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds ;received=192.0.2.1
To: Yang <sip:yang@biloxi.com>;tag=a6c85cf
From: Xia <sip:xia@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:yang@192.0.2.4>
Content-Type: application/sdp
Content-Length: 131
(小杨的SDP会话描述未展示)

小夏收到200 OK后,发送ACK确认报文,完成INVITE-200 OK-ACK三方握手,会话正式建立。
此时双方媒体数据直接传输,无需经过代理服务器。

步骤5:会话修改(re-INVITE)
通话中,任意一方可发送re-INVITE请求,修改媒体属性(切换音视频、调整清晰度等)。对方同意回复200 OK,拒绝返回错误码,修改失败不影响当前通话。

步骤6:结束会话(BYE请求)

通话结束,小杨挂机并发送BYE消息,直接发给小夏设备(跳过代理)。小夏回复200 OK,会话终止,BYE请求无需ACK确认。

  • SIP注册服务

注册是SIP核心功能,用于服务器定位用户:

  1. 小杨话机开机或定时,向biloxi.com服务器发送REGISTER报文,上报当前地址;
  2. 服务器将账号与地址绑定,存入定位服务库;
  3. 代理服务器通过库内信息,精准转发呼叫请求。
    用户可多设备同时注册,代理支持多地址并发寻呼;注册仅做地址映射,不负责身份认证。此外,SIP还支持取消请求、查询服务器状态等功能,后续章节详解。
  • 协议结构
    SIP属于分层协议,由多个关联性较弱的处理层级组成,分层讲解是为了理清逻辑、方便理解,协议本身不规定具体的实现方式。这里提到的“包含某一层”,指的是符合该层的规则约束,并非每个SIP组件都必须包含所有层级。
    另外,SIP定义的组件是逻辑组件,并非物理实体,一个物理设备,可以同时实现多个逻辑组件的功能。SIP自下而上,一共分为四层:
层次说明
第一层:语法和编码层这是SIP最底层,负责协议的语法规范与编码格式,采用扩展BNF范式来定义。完整的语法规后续继续学习
第二层:传输层传输层是SIP的通信基础,所有SIP组件都具备这一层。它主要规定了客户端发送请求、接收应答的方式,以及服务器接收请求、回复应答的规则,详细内容后续继续学习
第三层:事务层事务是SIP的核心组成单元,一个事务指客户端发送请求、服务器返回对应应答的完整过程。事务层负责处理请求重发、应答匹配、超时控制等工作。用户代理、有状态代理服务器包含事务层,无状态代理服务器不包含。事务层分为客户端事务和服务器事务,均可通过有限状态机处理指定请求,相关细则后续继续学习
第四层:事务用户(TU)事务层上方为事务用户,除无状态代理外,其余SIP实体都属于事务用户。事务用户可以创建、取消客户端事务,取消操作通过CANCEL请求实现,终止当前事务并回滚状态,相关细节则后续继续学习

核心组件与相关规范

  • SIP核心组件包含用户代理客户端(UAC)、用户代理服务端(UAS)、有状态/无状态代理服务器、注册服务器。除无状态代理外,其余组件核心都属于事务用户。
  • UAC负责发起请求,UAS负责处理请求并回复应答,处理REGISTER注册请求的UAS也叫注册服务器。
  • 对话是两端用户之间持久的端到端SIP连接,能保证消息有序传输、路由准确,只有INVITE请求能建立对话。
  • INVITE是SIP最关键的请求方法,用于创建会话;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值