非常详细的SIP协议总结
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协议总结相关推荐
- wireshark分析SIP协议——注册
SIP 是VOIP目前非常流行的一种协议.有关协议的详细原理参照相关文档. 本文通过wireshark抓包分析SIP user agent(用户代理客户机,uac)与SIPserve之间的交互 ...
- sip协议详解_SIP协议详解-INVITE消息发送过程
SIP协议是VoIP中最重要的信令控制协议.SIP中第一件事情就是主叫发送INVITE给被叫,被叫响铃.本文从多角度详细描述INVITE消息发送的全过程. 一.阅读RFC权威描述 关于INVITE消息 ...
- SIP协议详解(中文)-6
由于MIME包体是在"inner"消息中的,实现中通常会加密MIME指定的头域,包括:MIME-Version,Content-Type,Content-Length, Conte ...
- SIP协议简介(一)之SIP基本的概述
本篇文章主要是对RFC3261翻译进行的,也包含着自己的一些理解.希望能给需要的人带来一些帮助 补充说明:RFC即Request For Comments(RFC),是一系列以编号排定的文件.文件收集 ...
- SIP协议及其简单介绍
SIP协议及其简单介绍 概述 流程 SIP流程 两台设备建立会话 原理 使用场景 概述 SIP(Session Initiation Protocol,会话初始化协议)是一个应用层协议,用于在互联网上 ...
- android sip协议栈,基于Android平台及SIP协议的软电话系统的研究
摘要: 随着互联网通信技术不断发展以及智能手机的日益流行,VoIP(Voice Over InternetProtocol)技术得到了越来越广泛的应用.VoIP技术能结合这两者改变传统长途电话费用高昂 ...
- sip协议呼叫流程详解
1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和 ...
- VoIP通话-基于SIP协议的Asterisk(一)-实现流程
文章首发及后续更新:https://mwhls.top/4122.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...
- 基于VOIP的SIP协议分析
转载地址:http://blog.renren.com/blog/250046791/466595416 1. 实验目的 1.1 学习VOIP软件X-Lite的使用: 1.2 学习SIP协议的工作 ...
最新文章
- Java入门学习注意事项有哪些?
- React 虚拟Dom 转成 真实Dom 实现原理
- 刘知远 陈慧敏:流言止于“智”者——网络虚假信息的特征与检测
- assert()函数用法总结【转】
- 语法分析生成器 - LEX
- AAAI 2021最佳论文亚军:Attention+积分梯度=归因解释新方法
- Python第三方库的安装及路径查看总结
- java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间
- 安装了pygame、但是在python无法导入_详解有关PyCharm安装库失败的问题的解决方法...
- [SHELL] LAMP一键安装脚本设计(v2.1)
- 从没见过干净图片,英伟达AI就学会了去噪大法 | ICML论文
- c语言万年历编写程序分析,C语言 万年历程序
- backfire openwrt安装click modular router
- 华为网络设备——利用三层交换机实现VLAN间路由配置实例
- 拯救阿拉德大陆--竞码编程H-20‘
- android 点击对话框按钮 不关闭按钮,Android在单击PositiveButton后不要关闭AlertDialog...
- C++互斥量、原子锁、自旋锁等比较
- JQuery fadeOut()函数与remove()函数合用时不生效的解决办法
- XSS靶场prompt.ml过关详解
- mongodb集群-副本集(CSRS)
热门文章
- VSCode设置中文语言显示
- 【偏振光1】什么是偏振光
- 笔试真题:100颗糖果,甲乙轮流从糖果盒中取出糖果,每次可取出2、4或6颗,若取得最后糖果的玩家为最终胜者,若甲先取z则(甲获胜,乙获胜,平局,不确定)
- 联想rd640服务器装系统,RD640操作系统安装手册.pdf
- 汽车定位追踪器有什么功能,汽车GPS有什么作用
- 怎样下载土豆、六间房等视频网站的在线视频
- 201621123028《Java程序设计》第二周学习总结
- BI和大数据的区别在哪里?
- 《惢客创业日记》2020.07.18-19(周六)谦逊的野人-马斯克
- 上海 python 培训 兄弟连