本人主要用于工作笔记,如果有什么写的不对的地方欢迎大家批评指正,如有侵权,请联系本人。我写的是IP话机在注册到SIP服务器的流程。

什么是Sip?

两个话机需要通信,但是只知道对方的号码,这就需要一个服务器充当媒介,服务器负责接收一方的通信请求并通知另一方,直到他们建立通信,同样的,在一方请求结束通信,服务器应该回复请求,并且通知另一方。

但是实际上,通信流程中有很多坑,我来列举两个大家特别需要注意的地方。

1. 一般IP话机在建立通信以后,会变成直接连接,他们直接传输音频或者视频报文,但是有的IP话机会直接发给服务器,需要服务器转发,这就无形之中增加了建立服务器的难度。

2. 在结束通信的时候,一般客户端应该会给服务器发送BYE消息,然后让服务器转发,但是有的IP话机会直接发送给对方,不会过服务器,可能你们觉得这样会省很多事,这不是有利的吗?没错,大部分情况会对我们有利,但是有些不同品牌的IP话机会出现报文不识别的情况,这个时候,需要服务器进行处理,但是,BYE消息又不过我们服务器,这个时候,是不是又增加了一级难度。

SIP注册流程

sip注册主要分两种,带密码注册和不带密码注册

不带密码注册的流程为:

带密码注册流程为:

下面为带密码注册的交互流程

服务器IP: 100.1.21.252

话机 IP :100.1.21.11

1. 话机会向服务器发送一条不带认证信息的REGISTER

REGISTER sip:100.1.21.252 SIP/2.0
CSeq: 5 REGISTER
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
Contact: <sip:8043524@100.1.21.11>;expires=300
Content-Length: 0
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK20cd98777
User-Agent: Huawei-MC820/1.0.0
Supported: 100rel
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,PRACK,UPDATE
Expires: 300
Max-Forwards: 70

Call-ID:是由话机自己生成的,唯一的,后续注册流程都需要它

CSeq:本端,连续发送相同事务的报文,该值需要递增

expires:生存周期

2. 服务器返回401

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK20cd98777;received=100.1.21.11
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>;tag=as0fcd59f0
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
CSeq: 5 REGISTER
Server: Asterisk PBX 1.6.2.22
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="6bc0fb8a"
Content-Length: 0

algorithm=MD5  使用MD5进行密码编码

realm="asterisk" 主机名

nonce="6bc0fb8a" 由服务器自己生成的字符,一次性有效,用于对注册密码的编码和解码

3.话机发送带有认证信息的register发送给服务器

REGISTER sip:100.1.21.252 SIP/2.0
CSeq: 6 REGISTER
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
Contact: <sip:8043524@100.1.21.11>;expires=300
Content-Length: 0
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK02bc951e0
User-Agent: Huawei-MC820/1.0.0
Supported: 100rel
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,PRACK,UPDATE
Expires: 300
Authorization: Digest username="8043524",realm="asterisk",nonce="6bc0fb8a",uri="sip:100.1.21.252",response="ac24d103329a4313e5a24975e19db6ab",algorithm=MD5
Max-Forwards: 70

response="ac24d103329a4313e5a24975e19db6ab" 用MD5方式编码得到的 一般的方式为

MD5(username:realm:password)     MD5一般的编码方式

4. 服务器返回200 OK代表注册成功

SIP/2.0 200 OK
Via: SIP/2.0/UDP 100.1.21.11;branch=z9hG4bK02bc951e0;received=100.1.21.11
From: <sip:8043524@100.1.21.252>;tag=772b1332371e956b
To: <sip:8043524@100.1.21.252>;tag=as0fcd59f0
Call-ID: 69a76edc7fe2b2d33ec@100.1.21.11
CSeq: 6 REGISTER
Server: Asterisk PBX 1.6.2.22
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO
Supported: replaces, timer
Expires: 300
Contact: <sip:8043524@100.1.21.11>;expires=300
Date: Thu, 01 Jan 1970 00:07:15 GMT
Content-Length: 0

sip的抓包和我整理的一些资料存放在这里了SIP资料整理,如果没有积分下载,可以跟我联系。

sip 协议注册流程相关推荐

  1. sip协议呼叫流程详解

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

  2. (SIP-1-话机注册)关于IP话机通过SIP协议注册到PBX电话交换机的全过程解析-如何看wireshark中的报文

    识别wireshark中各个报文所对应的表示含义 我们以第一个SIP包为例子. 该包发送的场景为:IP话机注册到PBX上所发送的第一个报文.我们点开可以看到,该报文一共被封装了五层.我们都知道TCP/ ...

  3. SIP协议 基本流程 及 抓包数据

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

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

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

  5. GAT1400协议 注册流程

    本人最近工作需要对接1400协议,发现网上资料不多,于是自己摸索了一阵,在这给大家提供一些我的见解,我是用C语言写的代码,有需要的可以联系我 公安部制定了统一的标准即GAT1400"公安视频 ...

  6. SIP协议及其简单介绍

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

  7. SIP INVITE流程

    我们知道在SIP协议的流程中,SIP会话过程是非常重要的.那么对于请求和回复的内容,我们来详细了解一下这些方面的内容吧.那么通过SIP INVITE而发出的一些字段含义我们来着重讲解一下吧. SIP ...

  8. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

  9. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

最新文章

  1. 才做三个月的新业务,为何唐岩对陌陌直播寄予厚望
  2. 奥城大学计算机专业,美国研究生院,双录取的学校有哪些?都有什么专业?
  3. 问题-[Delphi]MainFrame.pas(4340): E2036 Variable required
  4. 操作系统:Android(Google公司开发的操作系统)
  5. Leetcode 130. 被围绕的区域 解题思路及C++实现
  6. eclipse远程开发
  7. [转]Qtopia2.2.0移植
  8. css html 抽屉,CSS快速入门-前端布局1(抽屉)(示例代码)
  9. P4449 于神之怒加强版
  10. specs.4.8.gz_使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试
  11. php序列化 java对象,在Java中反序列化一个序列化的php对象
  12. do_fork实现--下
  13. 周立功arm linux教程,极速搭建周立功IMX287A ARM Linux开发环境
  14. flask-SQLAlchemy数据库密码加密
  15. 扬帆际海:如何成为一个合格的跨境电商运营?
  16. [Java]用Random类来模拟双色球开奖
  17. golang源代码阅读--Negroni
  18. 内部环境--SWOT分析法
  19. MATLAB中的左除和右除
  20. 使用ORACLE DBCA创建数据库

热门文章

  1. YTU 计算机网络课程设计
  2. OC加强(三)之protocol(协议)/代理
  3. Numpy库及ndarrary基础知识
  4. 大话数据结构读书笔记系列(三)线性表
  5. excel转word_PDF一键转Word、转Excel、转PPT、转Html、转图片软件
  6. 你知道什么是POI吗?
  7. 让 AE 输出 MPEG
  8. orientdb实战
  9. 钉钉企业内部开发工具配置
  10. JavaWeb--使用Websocket实现在线聊天功能