1.SIP概念

SIP(Session Initiation Protocol,会话发起协议)是一个用于建立,更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体分发及多媒体会议。SIP协议采用Client/Server模型,主要通过与Proxy Server之间的通信来完成用户呼叫的建立过程。

SIP终端通过发送“邀请”消息给会话目的终端,消息中携带了自己的描述信息。目的终端可以根据“邀请”信息和自身的能力接受或拒绝请求。SIP可以通过称为“代理服务器”的实体来转发“邀请”消息。代理服务器可以完成确定目的终端的位置、查找路由的工作,根据会话终端的要求进行认证和授权,还能提供会话终端的呼叫路由策略。SIP通过“注册服务器”记录各终端的描述信息,包括地址信息,路由信息,号码信息等,各SIP终端可以通过发送“注册”消息给注册服务器,以登记或更新其描述信息。

另外,SIP作为应用层协议,在传输层上可以使用TCP,也可以使用UDP。SIP可以支持IPv4和IPv6。

2.SIP的功能和特点

SIP主要有五个基本功能:

  • 确定用户位置:确定被叫SIP终端所在的位置。SIP的最强大之处就是用户定位功能。SIP本身含有向注册服务器注册的功能,也可以利用其他定位服务器如DNS、LDAP等提供的定位服务器来增强其定位功能。

  • 确定用户可用性:确定被叫会话终端是否可以参加此会话。SIP支持多种地址描述和寻址,包括:用户名@主机地址、被叫号码@PSTN网关地址和普通电话号码(如Tel:01012345678)的描述等。这样,SIP主叫按照被叫地址,就可以识别出被叫是否在传统电话网上,然后通过一个与传统电话网相连的网关向被叫发起并建立呼叫。

  • 确定用户能力:确定被叫终端可用于参加会话的媒体类型及媒体参数。SIP终端在消息交互过程中携带自身的媒体类型和媒体参数,这使得会话都可以明确对方的会话能力。

  • 建立会话:建立主被叫双方的会话参数。SIP会话双方通过协商媒体类型和媒体参数,最终选择双方都具有的能力建立起会话。

  • 管理会话:可以更改会话参数或中止会话。

3.SIP方法
SIP定义了6种基本方法,如下:
REGISTER:注册联系信息。
INVITE: 初始化一个会话。
ACK: 对INVITE消息的最终响应。
CANCEL: 终止一个等待处理或正在处理的请求。
BYE: 终止一个会话。
OPTIONS: 查询服务器的性能。

SIP还定义一些扩展方法
SUBSCRIBE:订阅方法
NOTIFY: 事件通知方法
MESSAGE: 即时消息方法

4.SIP响应码
SIP状态码定义如下 :
100~199: 报告,表明请求已经收到、继续处理请求
200~299: 成功,表明行为已经成功收到,理解和接受
300~399: 重定向,表明为完成呼叫请求,还需要采取的进一步动作
400~499: 客户端错误,表明请求有语法或不能被服务器执行。客户端需要修 改请求,然后重发请求
500~599: 服务端错误,表明服务器出错,不能执行合法请求
600~699: 全局性错误

1xx

进展相应

临时相应

2xx

成功

最终相应

3xx

重定向错误

最终相应

4xx

客户端错误

最终相应

5xx

服务端错误

最终相应

6xx

全局错误

最终相应

5.SIP请求的标题头

6个必须标题头: From、To、Call-ID、CSeq、Via、Max-Forwards

标题头的解释:

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
Via Via头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路 Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
Max-Forwards 用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483。默认为70 Max-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
 

6.注册信令消息示范:

VIA域:包含了Alice接收发送请求的服务器地址(pc33.atlanta.com)。同样这个包含了一个分支参数来标志Alice和这个服务器的会话事务。

TO域:包含了显示姓名(Bob)和一个SIP或者SIPS URI(sip:bob@biloxi.com)请求将首先传输到这个URI中。显示姓名(Display names)在RFC 2822中描述。

From域:也同样包含一个显示姓名(Alice)和一个SIP或者SIPS URI(sip:alice@atlanta.com)这个URI用来标志请求的原始发起者。

这个域也包含了一个TAG参数,这个TAG参数是一个随机字串(1928301774),是软电话(softphone)在URI上增加的一个随机串。用来做标志用途的。

Call_ID:包含一个全局的唯一标志,用来唯一标志这个呼叫,通过随机字串和softphone的自己名字或者IP抵制混和产生的。通过TO TAG, FROM TAG和CALL-ID完整定义了Alice和Bob之间的端到端的SIP关系,并且表示这个是一个对话性质的关系。

CSEQ或者Command Sequence:包含了一个整数和一个请求名字。这个Cseq数字是顺序递增的。每当对话中发起一个新的请求都会引起这个数字的顺序递增。

Contact:域包含一个SIP或者SIPS URI用来表示访问Alice的直接方式,通常由用户名和一个主机的全名(Fully Qualified Domain Name FQDN)组成。当FQDN作为首选的时候,许多终端用户由于不会由名字登记(而导致不能访问Alice的主机),所以IP地址是可选的。

VIA域告诉大家本请求发送到哪里并且应答到哪里,Contract域告诉大家将来的请求将发送到哪里(奇怪…不是Alice发起的么,将来的请求应该是Bob才对啊)。

Max-Forwards:最大转发数量限制了通讯中转发的数量。它是由一个整数组成,每转发一次,整数减一。

Content-type:包含了消息正文的描述(比如前面提到的application/sdp)

Content-length:包含消息正文的长度(字节数)

Register sip:SIP服务器编码@目的域名或者IP地址端口  SIP/2.0

Via:SIP/2.0/UDP 源域名或者IP地址端口

From:<sip:SIP设备编码@源域名>;tag=185328220

To: <sip:SIP设备编码@源域名>

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

CSeq:1 Register

Contact: <sip:SIP设备编码@源IP地址端口>

Max-Forwords:70

Expires: 7200

Content-Length: 0

SIP/2.0 401 Unauthorized

To: sip:SIP设备编码@源域名

Content-Length: 0

CSeq:1 Register

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

From:<sip:SIP设备编码@源域名>;tag=185328220

Via:SIP/2.0/UDP 源域名或者IP地址端口

WWW-Authenticate: Digest realm=”64010000”,nonce=”6fe9ba44a76be22a”

Register sip:SIP服务器编码@目的域名或者IP地址端口  SIP/2.0

Via:SIP/2.0/UDP 源域名或者IP地址端口

From:<sip:SIP设备编码@源域名>;tag=185328220

To: <sip:SIP设备编码@源域名>

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

CSeq:2 Register

Contact: <sip:SIP设备编码@源IP地址端口>

Authorization: Digest username=”64010000002020000001”,realm=”64010000”, nonce=”6fe9ba44a76be22a”,uri=”sip:64010000002020000001@172.18.16.5:5060”,response=”9625d92d1bddea7a911926e0db054968”,algorithm=”MD5”

Max-Forwords:70

Expires: 7200

Content-Length: 0

SIP/2.0 200 OK

To: <sip:SIP设备编码@源域名>;tag=69113a2a

Contact: sip:SIP设备编码@源IP地址端口

Content-Length: 0

CSeq:2 Register

Call-ID:ms1214-322164-681262131542511620107-0@172.18.16.3

From:<sip:SIP设备编码@源域名>;tag=185328220

Via:SIP/2.0/UDP 源域名或者IP地址端口

Date:2010-11-02T15:01:26.115

Expires: 7200

7.常用的状态码举例:

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

非常详细的SIP协议总结相关推荐

  1. wireshark分析SIP协议——注册

    SIP 是VOIP目前非常流行的一种协议.有关协议的详细原理参照相关文档.     本文通过wireshark抓包分析SIP user agent(用户代理客户机,uac)与SIPserve之间的交互 ...

  2. sip协议详解_SIP协议详解-INVITE消息发送过程

    SIP协议是VoIP中最重要的信令控制协议.SIP中第一件事情就是主叫发送INVITE给被叫,被叫响铃.本文从多角度详细描述INVITE消息发送的全过程. 一.阅读RFC权威描述 关于INVITE消息 ...

  3. SIP协议详解(中文)-6

    由于MIME包体是在"inner"消息中的,实现中通常会加密MIME指定的头域,包括:MIME-Version,Content-Type,Content-Length, Conte ...

  4. SIP协议简介(一)之SIP基本的概述

    本篇文章主要是对RFC3261翻译进行的,也包含着自己的一些理解.希望能给需要的人带来一些帮助 补充说明:RFC即Request For Comments(RFC),是一系列以编号排定的文件.文件收集 ...

  5. SIP协议及其简单介绍

    SIP协议及其简单介绍 概述 流程 SIP流程 两台设备建立会话 原理 使用场景 概述 SIP(Session Initiation Protocol,会话初始化协议)是一个应用层协议,用于在互联网上 ...

  6. android sip协议栈,基于Android平台及SIP协议的软电话系统的研究

    摘要: 随着互联网通信技术不断发展以及智能手机的日益流行,VoIP(Voice Over InternetProtocol)技术得到了越来越广泛的应用.VoIP技术能结合这两者改变传统长途电话费用高昂 ...

  7. sip协议呼叫流程详解

    1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和 ...

  8. VoIP通话-基于SIP协议的Asterisk(一)-实现流程

    文章首发及后续更新:https://mwhls.top/4122.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

  9. 基于VOIP的SIP协议分析

    转载地址:http://blog.renren.com/blog/250046791/466595416 1. 实验目的 1.1  学习VOIP软件X-Lite的使用: 1.2  学习SIP协议的工作 ...

最新文章

  1. Java入门学习注意事项有哪些?
  2. React 虚拟Dom 转成 真实Dom 实现原理
  3. 刘知远 陈慧敏:流言止于“智”者——网络虚假信息的特征与检测
  4. assert()函数用法总结【转】
  5. 语法分析生成器 - LEX
  6. AAAI 2021最佳论文亚军:Attention+积分梯度=归因解释新方法
  7. Python第三方库的安装及路径查看总结
  8. java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间
  9. 安装了pygame、但是在python无法导入_详解有关PyCharm安装库失败的问题的解决方法...
  10. [SHELL] LAMP一键安装脚本设计(v2.1)
  11. 从没见过干净图片,英伟达AI就学会了去噪大法 | ICML论文
  12. c语言万年历编写程序分析,C语言 万年历程序
  13. backfire openwrt安装click modular router
  14. 华为网络设备——利用三层交换机实现VLAN间路由配置实例
  15. 拯救阿拉德大陆--竞码编程H-20‘
  16. android 点击对话框按钮 不关闭按钮,Android在单击PositiveButton后不要关闭AlertDialog...
  17. C++互斥量、原子锁、自旋锁等比较
  18. JQuery fadeOut()函数与remove()函数合用时不生效的解决办法
  19. XSS靶场prompt.ml过关详解
  20. mongodb集群-副本集(CSRS)

热门文章

  1. VSCode设置中文语言显示
  2. 【偏振光1】什么是偏振光
  3. 笔试真题:100颗糖果,甲乙轮流从糖果盒中取出糖果,每次可取出2、4或6颗,若取得最后糖果的玩家为最终胜者,若甲先取z则(甲获胜,乙获胜,平局,不确定)
  4. 联想rd640服务器装系统,RD640操作系统安装手册.pdf
  5. 汽车定位追踪器有什么功能,汽车GPS有什么作用
  6. 怎样下载土豆、六间房等视频网站的在线视频
  7. 201621123028《Java程序设计》第二周学习总结
  8. BI和大数据的区别在哪里?
  9. 《惢客创业日记》2020.07.18-19(周六)谦逊的野人-马斯克
  10. 上海 python 培训 兄弟连