SIP协议学习笔记
INIVTE sip:jerry@california.tel.com
Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1
Route:<sip:[5555::a:b:c:d];lr>
Route:<sip:telcomx@scscf1.tel.com;lr>
Contact:<sip:[4444::2:3:4:5]:1537>
From:<sip: tom@telcomx.tel.com>;tag=6e87wa9
To:<sip: jerry@california.tel.com>
Call-ID: apb03a0s09dkjdfoaidy49555
CSeq: 1 INVITE
Max-Forwards: 70
Content-Length:183
(必须的空行)
(SDP 请求消息体)
注:类似HTTP协议有GET/POST/PUT/DELETE等基本操作一样,SIP中有INVITE/BYE/REGISTER等操作,INVITE通常用于A向B发起呼叫。
第2行,表示是这SIP协议,版本为2.0,采用UDP协议传输。
INVITE的响应示例:
SIP/2.0 183 Session in Progress
Via: SIP/2.0/UDP scscf2.california.tel.com;branch=12fd3
Via: SIP/2.0/UDP icscf2.california.tel.com;branch=24re3
Via: SIP/2.0/UDP scscf1.tel.com;branch=64w32
Via: SIP/2.0/UDP pcscf1.tel.com;branch=412d2
Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1
Route-Route:<sip pcscf2.california.tel.com;lr>
Route-Route:<sip scscf2.california.tel.com;lr>
Route-Route:<sip scscf1.tel.com;lr>
Route-Route:<sip pcscf1.tel.com;lr>
Route:<sip:telcomx@scscf1.tel.com;lr>
Contact:<sip:[4444:5:6:7:8]:1078>
From:<sip: jerry@california.tel.com>;tag=e42q14d
To:<sip: tom@telcomx.tel.com>;tag=6e87wa9
Call-ID: apb03a0s09dkjdfoaidy49555
CSeq: 2 183
Max-Forwards: 70
Content-Length:165
(必须的空行)
(SDP 请求消息体)
二、SIP协议所处的位置
下面是从网上淘来的一张图

可以看到,SIP跟HTTP一样,属于应用层协议。SIP下层即可使用UDP,也可以使用TCP。
三、相关术语
3.1 UAC/UAS
UAC 即User Agent Client 通常指发起呼叫的应用。UAS 即User Agent Server 通常指被叫端,主要负责接受、重定向或者拒绝请求,给到来的请求发送响应。UAC与UAS是一个相对的概念,当某个SIP终端(比如:软电话应用)向外拨打时,它就是UAC,而反过来,对方打电话给它,它变成被叫时,就是UAS。
3.2 Register Server
通常SIP终端(不管是软电话还是硬话机)使用前,要先向某个服务器,发出REGISTER请求注册自己,负责处理REGISTER请求的服务器,即为Register Server。
打个比方:某老板很忙,是一个空中飞人,经常来去不定,每次出行前只告诉助理自己的联系方式,别人要找他,必须先问助理:老板在哪?怎么联系?助理相当于就是Register Server.
3.3 Location Server
用于跟踪用户位置,Location Server与Register Server只是逻辑上的划分,通常都由一个物理实体充当2种角色。
3.4 Proxy Server
负责接收和转发 SIP 请求,如果有需要,也可以解析并修改SIP部分信息,但是不允许影响请求或会话的状态。
打个比方:张三要追李四的闺蜜,但是不知道怎么联系,李四说对他说,你写个情书,我帮你转交给她,这事儿包在我身上,这时候李四就是张三的Proxy Server.
3.5 Redirect Server
将请求的地址映射成新地址,对请求进行重定向,与Proxy Server的区别在于不转发INVITE。
还是刚才那个比方:张三要追李四的闺蜜,不知道怎么联系,李四说,我把闺蜜的微信号给你,你自己去加好友吧,成不成得靠你自己,我只能帮你到这儿了。这时候李四只是张三的Redirect Server,最终INVITE发起请求,还是张三自己来。
3.6 B2BUA
所谓的Back To Back User Agent (背靠背用户代理)。简单点讲,这是UAC+UAS的合体,FreeSwitch就是一个B2BUA的经典案例。
把上述术语都画到一张图里,感受下:

四、SIP请求方法列表及响应码含义
| 请求名称 | 含义 | 参考协议 |
| REGISTER | 将URI注册到Location服务器 | RFC 3261 |
| INVITE | 发起电话呼叫 | RFC 3261 |
| ACK | 确认INVITE请求 | RFC 3261 |
| BYE | 挂断电话 | RFC 3261 |
| CANCEL | 取消Pending中的请求 | RFC 3261 |
| OPTIONS | RFC 3261 | |
| SUBSCRIBE | 订阅事件 | RFC 6665 |
| NOTIFY | 通知事件 | RFC 6665 |
| PRACK | 临时确认 | RFC 3262 |
| UPDATE | RFC 3311 | |
| MESSAGE | 发送文本消息 | RFC 3428 |
| REFER | RFC 3515 | |
| PUBLISH | RFC 3903 | |
| INFO | RFC 6086 |
常见响应码:
| 分类 | 代码 | 含义 | 最终状态? |
| 1xx | 临时应答 | No | |
| 100 | 试呼叫(Trying) | ||
| 180 | 振铃(Ringing) | ||
| 181 | 呼叫正在前转(Call is Being Forwarded) | ||
| 2xx | 会话成功 | Yes | |
| 200 | 成功响应(OK) | ||
| 3XX | 重定向 | Yes | |
| 302 | 临时迁移(Moved Temporarily) | ||
| 4xx | 请求失败 | Yes | |
| 400 | 错误请求(Bad Request) | ||
| 401 | 未授权(Unauthorized) | ||
| 403 | 禁止(Forbidden) | ||
| 404 | 用户不存在(Not Found) | ||
| 408 | 请求超时(Request Timeout) | ||
| 480 | 暂时无人接听(Temporarily Unavailable) | ||
| 486 | 线路忙(Busy Here) | ||
| 5xx | 服务器错误 | Yes | |
| 504 | 服务器超时(Server Time-out) | ||
| 6xx | 全局错误 | Yes | |
| 600 | 全忙(Busy Everywhere) |
SIP协议学习笔记的更多相关文章
- HTTP协议学习笔记(四)
HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...
- HTTP协议学习笔记(三)
HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...
- HTTP协议学习笔记(二)
HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. H ...
- HTTP协议学习笔记(一)
HTTP协议学习笔记(一) 1.HTTP协议用于客户端和服务端之间的通信 客户端:请求访问文本或图像等资源的一端服务端:提供资源响应的一端 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定 ...
- TCP/IP协议学习笔记
计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...
- RSA算法、SSL协议学习笔记
最近学习计算机网络,涉及到SSL协议,我想起了去年密码学课程讲过的非对称加密RSA算法,结合阮老师的博客,写写学习笔记,这里再回忆一下. RSA算法 RSA算法是一种非对称密码算法,所谓非对称,就是指 ...
- 网络协议学习笔记(二)物理层到MAC层,交换机和VLAN,ICMP与ping原理
概述 之前网络学习笔记主要讲解了IP的诞生,或者说整个操作系统的诞生,一旦有了IP,就可以在网络的环境里和其他的机器展开沟通了.现在开始给大家讲解关于网络底层的相关知识. 从物理层到MAC层:如何在宿 ...
- 流媒体学习二-------SIP协议学习(基本场景分析 )
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol) ...
- tcp/ip协议学习笔记一
一. 简述 以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什 ...
- 实验:传输层:UDP协议 学习笔记
一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...
随机推荐
- Spring--IOC注解用法初探
创建一个UserDao接口,和一个UserDaoImp的实现类 UserDao接口 package com.zjw.spring.demo1; public interface UserDao { p ...
- Web前端入门第 45 问:CSS 变量 var() 轻松实现主题换肤功能
HELLO,这里是大熊的前端开发笔记. 曾经主题切换功能可以作为软件中亮眼的卖点存在,毕竟那时候要实现换肤可不容易,一套主题一套样式,这代码的重复率嗖嗖嗖的就涨上去了~~当然也可以借助 CSS 预编译 ...
- MyCAT 2实现mysql8主从同步读写分离
一.MyCAT2介绍 1.1 什么是MyCAT?MyCAT是目前最流行的分布式数据库中间插件,是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器.前端用户可以把它看作一个数据库代理,用M ...
- K8s进阶之外部访问Pod的几种方式
概述 K8s集群内部的Pod默认是不对外提供访问,只能在集群内部进行访问.这样做是为什么呢? 安全性考虑 Kubernetes设计时遵循最小权限原则,即组件仅获得完成其任务所需的最少权限.直接暴露Po ...
- TVM:设计与架构
本文档适用于想要了解 TVM 架构和/或积极开发项目的开发人员.页面组织如下: 示例编译流程概述了 TVM 将模型的高层描述转换为可部署模块所采取的步骤.要开始使用,请先阅读本节. 逻辑架构组件部分描 ...
- 用装饰器简化大量if-elif代码
源码地址:https://github.com/edgedb/edgedb/blob/master/edb/common/value_dispatch.py 鸣谢原文:一日一技:使用装饰器简化大量 i ...
- 《经验分享——在CSDN编写文章时如何实现空格、空行》
经验分享--在CSDN编写文章时如何实现空格.空行 一.富文本编辑器: 1.空格: 按空格键 2.空行 先按Tab,再按回车键 二.Markdown编辑器: 1. 空格: 按空格键 2.空行: 输入& ...
- 网易游戏DB SaaS引入OceanBase:存储成本降60%,备份恢复提速3倍
作者:田维繁,网易游戏 SaaS 服务关系型数据库运维小组负责人 首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 #数据库.#A ...
- 从 DeepSeek 突然爆发,看数据开发的应用市场
在数字化快速发展的当下,人工智能与数据技术不断迭代.近期,DeepSeek 凭借自身技术实力在市场中迅速崛起,为剖析数据开发应用市场提供了视角. DeepSeek 爆发:技术与市场的双重驱动 1.1 ...
- 数栈技术分享前端篇:TS,看你哪里逃~
数栈是-站式大数据开发平台,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变化的数据 ...