友情提示:初次接触SIP(Session Initiation Protocol)协议的同学,强烈建议先将文末参考文章中的链接,先看至少二遍!
 
一、SIP协议是一个文本协议
言外之意:不同于二进制难以阅读,SIP是仅凭肉眼就能看懂大意的协议。来一个示例:
 
INVITE的请求示例:
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协议学习笔记的更多相关文章

  1. HTTP协议学习笔记(四)

    HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...

  2. HTTP协议学习笔记(三)

    HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...

  3. HTTP协议学习笔记(二)

    HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. H ...

  4. HTTP协议学习笔记(一)

    HTTP协议学习笔记(一) 1.HTTP协议用于客户端和服务端之间的通信 客户端:请求访问文本或图像等资源的一端服务端:提供资源响应的一端 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定 ...

  5. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  6. RSA算法、SSL协议学习笔记

    最近学习计算机网络,涉及到SSL协议,我想起了去年密码学课程讲过的非对称加密RSA算法,结合阮老师的博客,写写学习笔记,这里再回忆一下. RSA算法 RSA算法是一种非对称密码算法,所谓非对称,就是指 ...

  7. 网络协议学习笔记(二)物理层到MAC层,交换机和VLAN,ICMP与ping原理

    概述 之前网络学习笔记主要讲解了IP的诞生,或者说整个操作系统的诞生,一旦有了IP,就可以在网络的环境里和其他的机器展开沟通了.现在开始给大家讲解关于网络底层的相关知识. 从物理层到MAC层:如何在宿 ...

  8. 流媒体学习二-------SIP协议学习(基本场景分析 )

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol) ...

  9. tcp/ip协议学习笔记一

    一. 简述 以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什 ...

  10. 实验:传输层:UDP协议 学习笔记

    一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...

随机推荐

  1. Spring--IOC注解用法初探

    创建一个UserDao接口,和一个UserDaoImp的实现类 UserDao接口 package com.zjw.spring.demo1; public interface UserDao { p ...

  2. Web前端入门第 45 问:CSS 变量 var() 轻松实现主题换肤功能

    HELLO,这里是大熊的前端开发笔记. 曾经主题切换功能可以作为软件中亮眼的卖点存在,毕竟那时候要实现换肤可不容易,一套主题一套样式,这代码的重复率嗖嗖嗖的就涨上去了~~当然也可以借助 CSS 预编译 ...

  3. MyCAT 2实现mysql8主从同步读写分离

    一.MyCAT2介绍 1.1 什么是MyCAT?MyCAT是目前最流行的分布式数据库中间插件,是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器.前端用户可以把它看作一个数据库代理,用M ...

  4. K8s进阶之外部访问Pod的几种方式

    概述 K8s集群内部的Pod默认是不对外提供访问,只能在集群内部进行访问.这样做是为什么呢? 安全性考虑 Kubernetes设计时遵循最小权限原则,即组件仅获得完成其任务所需的最少权限.直接暴露Po ...

  5. TVM:设计与架构

    本文档适用于想要了解 TVM 架构和/或积极开发项目的开发人员.页面组织如下: 示例编译流程概述了 TVM 将模型的高层描述转换为可部署模块所采取的步骤.要开始使用,请先阅读本节. 逻辑架构组件部分描 ...

  6. 用装饰器简化大量if-elif代码

    源码地址:https://github.com/edgedb/edgedb/blob/master/edb/common/value_dispatch.py 鸣谢原文:一日一技:使用装饰器简化大量 i ...

  7. 《经验分享——在CSDN编写文章时如何实现空格、空行》

    经验分享--在CSDN编写文章时如何实现空格.空行 一.富文本编辑器: 1.空格: 按空格键 2.空行 先按Tab,再按回车键 二.Markdown编辑器: 1. 空格: 按空格键 2.空行: 输入& ...

  8. 网易游戏DB SaaS引入OceanBase:存储成本降60%,备份恢复提速3倍

    作者:田维繁,网易游戏 SaaS 服务关系型数据库运维小组负责人 首先为大家推荐这个 OceanBase 开源负责人老纪的公众号 "老纪的技术唠嗑局",会持续更新和 #数据库.#A ...

  9. 从 DeepSeek 突然爆发,看数据开发的应用市场

    在数字化快速发展的当下,人工智能与数据技术不断迭代.近期,DeepSeek 凭借自身技术实力在市场中迅速崛起,为剖析数据开发应用市场提供了视角. DeepSeek 爆发:技术与市场的双重驱动 1.1 ...

  10. 数栈技术分享前端篇:TS,看你哪里逃~

    数栈是-站式大数据开发平台,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变化的数据 ...