SIP协议学习笔记

SIP概述

概念

  • sip(Session Initiation Protocol)会话初始协议是一个在IP网络上基于文本进行多媒体通信的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。

  • SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。

特点

  • 一个重要特点是它不定义要建立的会话的类型,而只定义应该如何管理会话。

  • 独立于传输层。因此SIP应用可以在TCP、UDP或其他低层网络协议上运行

  • 灵活简练,可扩展,开放,兼容。

功能

SIP通过以下逻辑功能来完成通信:

  • 用户定位功能:确定参与通信的终端用户位置。

  • 用户通信能力协商功能:确定参与通信的媒体终端类型和具体参数。

  • 用户是否参与交互功能:确定某个终端是否加入某个特定会话中。

  • 建立呼叫和控制呼叫功能:包括向被叫“振铃”、确定主叫和被叫的呼叫参数、呼叫重定向、呼叫转移、终止呼叫等。

网络元素

  • 用户代理(user agent)

  • 代理服务器(proxy server)

  • 重定向服务器(redirect server)

  • 注册服务器(registor server)

  • 位置服务器(location server)

消息类

SIP协议的亮点却不在于它的强大,而是在于:简单!

SIP协议是一个Client/Sever协议,因此SIP消息分两种:请求消息和响应消息。

请求消息是SIP客户端为了激活特定操作而发给服务器端的消息。常用的SIP请求消息如下:

Method说明
REGISTER表示客户端向SIP服务器端注册列在To字段中的地址信息
INVITE表示主叫用户发起会话请求,邀请其他用户加入一个会话。也可以用在呼叫建立后用于更新会话(此时该INVITE又称为Re-invite)
ACK客户端向服务器端证实它已经收到了对INVITE请求的最终响应
PRACK表示对1xx响应消息的确认请求消息
BYE表示终止一个已经建立的呼叫
CANCEL表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响
OPTIONS表示查询被叫的相关信息和功能
MESSAGERFC3428对Sip协议的扩展,增加了MESSAGE方法。采用Pager Model进行通信,传递不超过1300字节的数据。MESSAGE方法详细可参考 “SIP-RFC3428” RFC 3428: Session Initiation Protocol (SIP) Extension for Instant Messaging
SUBSCRIBERFC6665对Sip协议的扩展,建立订阅关系,以获取特定事件的通知
NOTIFYRFC6665对Sip协议的扩展,传递某种特定事件发生的信息,NOTIFY通常在订阅者与能和者之间建立的dialog内发送
INFO-

SIP协议中的响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。

状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类

状态代码由3位数字组成,表示请求是否被理解或被满足。第一个数字有6种可能的取值:

Status-Code含义
1xx:临时响应、表示请求消息正在被处理
2xx成功响应、表示请求已被成功接收完全理解并接收
3xx重定向响应、表示需采取进一步完成请求
4xx客户机错误、表示请求消息中包含语法错误信息或服务器无法完成客户机的请求
5xx服务器错误、表示服务器无法合法完成请求
6xx全局故障 、表示任何服务器都无法完成该请求

常用的一些响应消息:

Status-Codemsg含义
100Trying试呼叫
180Ringing振铃
181Call is Being Forwarded呼叫正在前转
200OK成功响应
302Moved Temporarily临时迁移
400Bad Request错误请求
401Unauthorized未授权
403Forbidden禁止
404Not Found用户不存在
408Request Timeout请求超时
480Temporarily Unavailable暂时无人接听
481Call Leg Does Not Exist呼叫/事务不存在
486Busy Here线路忙
487Request terminated请求终止
504Server Time-out服务器超时
600Busy Everywhere全忙

消息体格式

  • 请求行(request-line) or 状态行(status-line)

    • 请求行格式:Method Request-URI SIP-Version CRLF

    • 状态行格式: SIP-Version Status-Code Reason-Phrase CRLF

  • 消息头(header)

    Header含义说明举例
    Call-ID由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变Call-ID: asd88asd77a@1.2.3.4
    From表示请求的发起者From: sip:user1@domain.com;tag=49583
    To表示请求的接收者To: sip:user2@domain.com
    ViaVia头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
    Max-Forwards用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483。默认为70Max-Forwards: 70
    Contact包含源的URI信息,用来给响应方直接和源建立连接用Contact: sip:192.168.100.1:1111
    Content-Type指明消息体的类型 (SDP会话描述协议)Content-Type: text/plain;Content-Type: application/sdp; Content-Type: application/cpim;
    Content-Length指明消息体的字节大小Content-Length: 18
  • 正文(body)

基本流程

注册流程

下图显示了SIP注册流程

image-20210622142345556

F1:sip代理向sip服务器发送Register请求,未包含Authorization字段

F2:sip服务器向sip代理发送响应401,并在响应的消息头WWW-Authenticate字段中给出适合sip代理的认证体制和参数

F3:sip代理向sip服务器重新发送Register请求,在请求的Authorization字段给出信任书,包含认证信息

F4:sip服务器对请求进行验证,如果检查出sip代理身份合法,向sip代理发送成功响应200OK,如果身份不合法则发送拒绝服务应答

呼叫流程

下图显示了SIP会话的基本呼叫流程

sip_call

主叫方A呼叫被叫方B:

  • 步骤1:主叫方A发送INVITE请求到代理服务器;

  • 步骤2:代理服务器发送100 Trying 响应主叫方A;

  • 步骤3~6:代理服务器搜索被叫方B的地址,获取地址后转发INVITE请求;

  • 步骤7~9:被叫方B生成的180 振铃响应,返回给主叫方A;

  • 步骤10~12:被叫方B生成的200 OK响应,返回给主叫方A;

  • 步骤13~17:主叫方A收到被叫方B200 OK响应后,向被叫方B发送一个ACK,会话建立;

  • 步骤18~20:会话结束后,任何参与者(A或B)都可以发送一个BYE请求来终止会话;

  • 步骤21~23:主叫方A发送200 OK响应来确认BYE,会话终止。

注:以上的整个流程称之为一个Dialog

订阅流程

UA 使用SUBSCRIBE方法来建立订阅关系,以获取特定事件的通知(通过NOTIFY方法),SUBSCRIBE和NOTIFY都定义于RFC6665。订阅成功后在UAC和UAS间建立一个dialog。订阅请求包含一个Expires头域,它说明订阅存在的持续时间。期满之后,订阅关系自动终止。期满之前,可以再发一条SUBSCRIBE请求来刷新。服务端接受订阅时返回一条200 OK应答,它也包含一个Expires头域。限定的时间可以和请求一致,服务端可以缩短时间,不能延长时间。SIP中没有定义UNSUBSCRIBE方法,如果需要提前终止订阅,还是要通过SUBSCRIBE方法完成,Expires:0就表示终止。订阅终止时(不论是时间到期还是通过请求提前终止),都需要最后发一条NOTIFY消息来说明订阅已经终止。对SUBSCRIBE请求回应202 Accepted,并不表示订阅已经通过授权,它仅说明服务端已经了解订阅信息。

    下图显示了订阅的基本流程。客户端发出SUBSCRIBE请求,收到成功应答。服务端事件触发时,客户端会收到NOTIFY。在订阅到期之前,客户端重新发SUBSCRIBE请求来展期,以便获知更多通知。
    注意:客户端在收到SUBSCRIBE对应的200 OK应答之前,就应该准备好接收NOTIFY。此外,因为下游可能有分支,客户端必须准备好接收不同服务端的NOTIFY。尽管SUBSCRIBE只会收到一条对应的200 OK应答,但是,由于NOTIFY的To tag不同,因此需要建立独立的dialog。

image-20210622145022161

参考

SIP 介绍_w3cschool

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty SIP协议是一种基于Netty框架的会话初始化协议SIP代表会话初始化协议,它是一种基于文本的通信协议,用于在IP网络上建立、修改和终止多媒体会话。Netty是一个基于Java的异步事件驱动的网络应用编程框架,提供了高性能、可扩展的网络通信能力。 Netty SIP协议的设计目标是提供一个可靠、高速的会话初始化协议,以满足多媒体会话的需求。它基于Netty的事件驱动模型和异步IO,能够在网络通信中实现高性能和低延迟。 Netty SIP协议主要包含以下几个核心组件: 1. SIP消息格式:Netty SIP协议定义了SIP消息的格式,包括请求和响应的格式。这样可以方便地将SIP消息进行编解码,并在网络上进行传输。 2. SIP状态管理:Netty SIP协议通过状态管理来处理会话的各种状态。它能够跟踪会话的建立、修改和终止,并在需要时触发相应的事件。 3. 路由与转发:Netty SIP协议支持路由和转发功能,能够根据会话的相关信息将消息正确地转发到目标节点。这样可以构建一个分布式的会话系统。 4. 会话管理:Netty SIP协议提供了会话管理功能,能够管理会话的生命周期和相关的资源。它允许创建、销毁和管理会话,以及处理会话的各种事件。 总的来说,Netty SIP协议是一个基于Netty框架的高性能、可扩展的会话初始化协议。它能够实现多媒体会话的建立、修改、终止和管理,为网络通信提供了可靠和高效的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值