SIP 注册过程

2023-05-16

SIP协议包含两种类型的消息,一种是请求行用于发出邀请,而另一种则是状态行,用于标明当前通信的状态。请求行和状态行军包含三部分,其中每一部分以空格隔开,不论是请求行还是状态行均以CRLF换行符结束。在请求行中,三部分内容分别为Method 请求URI和SIP版本号。如下例所示:
Request-Line: REGISTER sip:192.169.1.150 SIP/2.0
在这里方法是REGISTER,也就是注册。空格之后的sip:192.169.1.150则是请求到达的URI目的地址,SIP/2.0则是SIP的版本号。
Status-Line: SIP/2.0 407 Proxy Authentication Required
状态行的例子如上所示,第一个部分和请求行的解释一样被作为SIP的版本号,第二部分则是一个状态码,类似于浏览器访问出现的404;最后一个部分则是对第二部分状态码进行一个简单的解释。
在上面两种行消息之后是消息头部,消息头部的组成也是以文本字符进行编码的。同样的,消息头部的每一个字段都是以CRLF换行作为结尾符。而每一个字段的格式如下:
Via: SIP/2.0/UDP 192.169.1.147:39814;rport;branch=z9hG4bK80051
上面是定义SIP消息头部字段格式的一种示例,冒号前面的是字段的名称,这里表示消息传递出去经过的路径;而第二部分则是传递的使用到的协议——基于UDP的SIP(SIP也可以基于TCP进行实现),第三部分则是起始地址的IP地址和端口号。第四部分的rport告诉服务器,哪里来的消息从哪里发送回去——IP和端口号都不会改变。第五部分则是一个标志ID,标志ID的前七个字母类似于一个魔数用于区别其他的协议。

下面看一个完整的SIP用户和用户代理之间的鉴权认证过程。

Session Initiation Protocol (REGISTER)
    Request-Line: REGISTER sip:192.169.1.150 SIP/2.0
        Method: REGISTER
        Request-URI: sip:192.169.1.150
        [Resent Packet: False]
    Message Header
        Via: SIP/2.0/UDP 192.169.1.147:39814;rport;branch=z9hG4bK80051
        Max-Forwards: 70
        To: <sip:102@192.169.1.150>
            SIP to address: sip:102@192.169.1.150
        From: <sip:102@192.169.1.150>;tag=z9hG4bK17086172
            SIP from address: sip:102@192.169.1.150
            SIP from tag: z9hG4bK17086172
        Call-ID: 281574552997@192.169.1.147
        CSeq: 1 REGISTER
            Sequence Number: 1
            Method: REGISTER
        Contact: <sip:102@192.169.1.147:39814;transport=udp>
            Contact URI: sip:102@192.169.1.147:39814;transport=udp
        Expires: 3600
        User-Agent: Sipdroid/3.6 beta
        Content-Length: 0


Session Initiation Protocol (407)
    Status-Line: SIP/2.0 407 Proxy Authentication Required
        Status-Code: 407
        [Resent Packet: False]
        [Request Frame: 1322]
        [Response Time (ms): 0]
    Message Header
        Via: SIP/2.0/UDP 192.169.1.147:39814;branch=z9hG4bK80051;received=192.169.1.147;rport=39814
        From: <sip:102@192.169.1.150>;tag=z9hG4bK17086172
            SIP from address: sip:102@192.169.1.150
            SIP from tag: z9hG4bK17086172
        To: <sip:102@192.169.1.150>;tag=13d0075e
            SIP to address: sip:102@192.169.1.150
            SIP to tag: 13d0075e
        CSeq: 1 REGISTER
            Sequence Number: 1
            Method: REGISTER
        Call-ID: 281574552997@192.169.1.147
        Allow: ACK, BYE, CANCEL, INFO, INVITE, MESSAGE, NOTIFY, OPTIONS, REFER, SUBSCRIBE
        User-Agent: miniSIPServer V16.0.7 (100 clients) build 20150324
        Proxy-Authenticate: Digest realm="myvoipapp.com",algorithm=MD5,nonce="328E3DAF06BC5374001D626160CB1C21",stale=FALSE
            Authentication Scheme: Digest
            Realm: "myvoipapp.com"
            Algorithm: MD5
            Nonce Value: "328E3DAF06BC5374001D626160CB1C21"
            Stale Flag: FALSE
        Content-Length: 0



Session Initiation Protocol (REGISTER)
    Request-Line: REGISTER sip:192.169.1.150 SIP/2.0
        Method: REGISTER
        Request-URI: sip:192.169.1.150
        [Resent Packet: False]
    Message Header
        Via: SIP/2.0/UDP 192.169.1.147:39814;rport;branch=z9hG4bK99109
        Max-Forwards: 70
        To: <sip:102@192.169.1.150>
            SIP to address: sip:102@192.169.1.150
        From: <sip:102@192.169.1.150>;tag=z9hG4bK17086172
            SIP from address: sip:102@192.169.1.150
            SIP from tag: z9hG4bK17086172
        Call-ID: 281574552997@192.169.1.147
        CSeq: 2 REGISTER
            Sequence Number: 2
            Method: REGISTER
        Contact: <sip:102@192.169.1.147:39814;transport=udp>
            Contact URI: sip:102@192.169.1.147:39814;transport=udp
        Expires: 3600
        User-Agent: Sipdroid/3.6 beta
        Proxy-Authorization: Digest username="102", realm="myvoipapp.com", nonce="328E3DAF06BC5374001D626160CB1C21", uri="sip:192.169.1.150", algorithm=MD5, response="bdf9504e7f2e0d6c685e57f9eef22f43"
            Authentication Scheme: Digest
            Username: "102"
            Realm: "myvoipapp.com"
            Nonce Value: "328E3DAF06BC5374001D626160CB1C21"
            Authentication URI: "sip:192.169.1.150"
            Algorithm: MD5
            Digest Authentication Response: "bdf9504e7f2e0d6c685e57f9eef22f43"
        Content-Length: 0



Session Initiation Protocol (200)
    Status-Line: SIP/2.0 200 OK
        Status-Code: 200
        [Resent Packet: False]
        [Request Frame: 1324]
        [Response Time (ms): 0]
    Message Header
        Via: SIP/2.0/UDP 192.169.1.147:39814;branch=z9hG4bK99109;received=192.169.1.147;rport=39814
        From: <sip:102@192.169.1.150>;tag=z9hG4bK17086172
            SIP from address: sip:102@192.169.1.150
            SIP from tag: z9hG4bK17086172
        To: <sip:102@192.169.1.150>;tag=55d70430
            SIP to address: sip:102@192.169.1.150
            SIP to tag: 55d70430
        CSeq: 2 REGISTER
            Sequence Number: 2
            Method: REGISTER
        Call-ID: 281574552997@192.169.1.147
        Allow: ACK, BYE, CANCEL, INFO, INVITE, MESSAGE, NOTIFY, OPTIONS, REFER, SUBSCRIBE
        User-Agent: miniSIPServer V16.0.7 (100 clients) build 20150324
        Contact: <sip:102@192.169.1.147:39814;transport=udp>
            Contact URI: sip:102@192.169.1.147:39814;transport=udp
        Expires: 180
        Content-Length: 0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SIP 注册过程 的相关文章

  • RTSP协议,与sip区别

    RTSP Real Time Streaming Protocol 是应用层中的实时流协议 xff0c 处于RTP RTCP SRTP等之上 xff0c 使用RTP或TCP来进行数据的传输 xff0c 其本身并不传输媒体流数据 xff0c
  • sip 认证分析

    SIP类似Http协议 其认证模式也一样 Http协议 xff08 RFC 2616 xff09 规定可以采用Basic模式和摘要模式 xff08 Digest schema xff09 RFC 2617 专门对两种认证模式做了规定 RFC
  • SIP鉴权—摘要式认证

    SIP 认证过程源自 HTTP 摘要式认证 HTTP Digest Authentication xff0c 它是一种基于质询的安全机制 当服务器收到一个请求 xff0c 将质询请求的发起者 xff0c 要求提供相应的身份信息 服务器发出的
  • SIP注册过程

    SIP的注册过程很容易理解 首先我有一个号码 xff0c 但我的号码可以移动的话 xff0c 那服务器如何才能找到我呢 xff1f SIP的注册机制将sip终端的位置报告给注册服务器 这里的注册服务器仅仅是一个逻辑角色 并不一定是独立的物理
  • sip注册示例

    这里给出一个sip注册的示例 xff0c 其中平台注册的密码为12345678 xff0c 供相关开发参考 REGISTER sip 34020000002000000001 64 192 168 88 119 SIP 2 0 Via SI
  • pjsip库使用时,顺序也有一定要求,

    LIBS PWD third lib pjsip lib libpjsua aarch64 unknown linux gnu a LIBS PWD third lib pjsip lib libpjsip ua aarch64 unkno
  • Window下编译PJSIP,不编译Media模块

    Windows系统下使用VS2017进行编译PJSIP 下载地址 PJSIP的地址 https github com pjsip pjproject 在线clone太慢的话 可以直接在这里下载比clone会快很多 https github
  • 如何使用 C# 构建软件电话(使用 SIP 协议)[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我面临的挑战是使用 C 或 net 技术构建 sip 软电话 请指导我构建此类所需的技术 要求和规范 可能的要求 支持的编解码器 G 722 1 G 723 1 G 726 G
  • C# SIP 堆栈/库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个好的 SIP 库 要么用 C 编写 要么提供 C 包装器 不一定需要免费 有人用过什么好东西吗 为了澄清起见 我说的是 VoIP 协议
  • 在 Raspberry PI 上安装“ring.cx SIP 客户端”

    情况 我希望在我的 Raspberry Pi 上进行基于终端 无头 的 SIP 呼叫 并且我已经使用 linphone 尝试过此操作 RaspberryPI 使用 linphonec 或替代 SIP 软电话进行 SIP 出站呼叫 由于我目前
  • 如何编码 WAV 以使用 SIPp 播放

    通过观察另一个SIPp相关问题我了解到现在可以使用rtp stream action 我尝试了几个不同的 WAV 文件 但没有成功 我听到的只是一些噪音 而不是预期的声音 在上述问题的一条评论中 有一条简单的指令将 WAV 文件转换为兼容格
  • 使用 Android SIP 堆栈进行点对点 SIP 呼叫?

    我一直在寻找一种方法来设置 Android SIP 堆栈 以便能够以临时方式在同一网络上的两个设备之间建立 SIP 呼叫 即无需注册到 SIP 服务器 我无法让它工作 因为 SIP 演示包括服务器注册 如果没有此步骤 我无法让它拨打或接听电
  • 应用程序在 Android 模拟器上正常工作时无法访问设备上的互联网?

    我开发了一个基于 SIP 的应用程序 该应用程序在 Android 设备上调试时无法使用互联网连接 但在模拟器上调试时却可以正常工作 我已在manifest xml 中授予了有关互联网连接的所有权限 是否有任何其他权限可以使用互联网连接在设
  • 思科可视消息等待指示器(VMWI 或 MVI)

    如何以编程方式点亮 Cisco IP 电话可视消息等待指示灯 VMWI 或 MWI 对于 sipwiz 的回答 IP地址10 1 1 2 gt 是我将在其中发送 SIP 通知消息的本地 IP IP地址10 1 1 9 gt 是 IP 地址思
  • 为什么 Android 2.3 中包含的本机 SIP 堆栈无法在 3g 上工作?

    我想知道为什么 Android 框架 自 2 3 起 中包含的本机 SIP 堆栈不能在 3g 上工作 这是否与谷歌对其合作伙伴可能有的任何法律或限制有关 此外 有人知道是否有计划取消该限制吗 Thx In 姜饼 http androidxr
  • Android 中通过 SIP 进行视频通话

    我是 Android 初学者 正在开发一个可以使用 SIP 通过 IP 进行视频通话的应用程序 我在 Google 和 StackOverflow 上搜索了很多 得到的只是我需要一些 Native Library 而我对它没有太多了解 我关
  • SIP ACK 对话框为空

    我正在使用 JAIN SIP 在 java 中创建 SIP 客户端 我已经成功注册并发送 INVITE 但是当将 ACK 发送回服务器时 我收到错误消息 Cannot Create ACK no remote Target 我检查了 Dia
  • 如何使用Python套接字发送SIP消息

    我需要使用 Python 套接字发送 SIP 消息 我已经让客户端向服务器发送一些内容 但我无法让客户端向服务器发送 SIP 消息 INVITE usr bin python import socket R IP 192 168 2 1 R
  • 星号:发起呼叫未在拨号方案中设置 CALLERID

    我正在使用 Asterisk PBX 呼叫软件电话 我使用此命令 发起 SIP 100 分机 4004 在拨号计划中 我必须获取 CALLERID 变量 但在这种情况下 它始终为空 P S 如果我从软件电话 100 拨打分机号 4004 则
  • 如何在Android应用程序中添加g729编解码器?

    我正在开发一个用于拨打和接听电话的 SIP 应用程序 我想在我的应用程序中添加 G729 编解码器 目前我正在对开源项目进行分析SipDroid http code google com p sipdroid 如果我想让该应用程序支持 G7

随机推荐

  • Java多线程(含生产者消费者模式详解)

    多线程 导航 多线程1 线程 进程 多线程概述2 创建线程 xff08 重点 xff09 2 1 继承Thread类 xff08 Thread类也实现了Runnable接口 xff09 2 2 实现Runnable接口 xff08 无消息返
  • Java网络编程(两种聊天室:TCP和UDP)

    网络编程 您的导航 网络编程网络编程基础知识一 网络编程三要素IP地址端口协议 二 IP地址与InetAddress类IP地址分类InetAddress类三 端口 xff08 Port xff09 与 InetSocketAddressIn
  • 免费发布一个网站(保姆级图文教程)

    利用GitHub Pages发布一个网页 第一步 xff1a 注册一个github账户 访问官网 点这两个都可以注册 根据提示输入一些信息 xff0c 然后创建账户 xff1a 然后你会收到一封邮件 xff0c 输入验证码或是打开邮件的验证
  • 修改键盘映射、交换按键

    修改键盘映射 交换按键 导航 修改键盘映射 交换按键写在前面一 创建配置文件二 修改键盘映射三 重启四 键位表 写在前面 这两天买了个黑爵的小键盘 xff0c del和ins键是同一个键 xff0c 通过fn来区分 xff08 我的笔记本电
  • Spring Cloud Gateway(黑马springcloud笔记)

    Gateway 目录 Gateway一 为什么需要网关二 gateway入门三 断言工厂四 过滤器工厂五 全局过滤1 实现2 过滤器执行顺序 六 跨域问题 一 为什么需要网关 不能让外部能够直接访问微服务 xff0c 而是需要通过网关访问
  • Docker(黑马spring cloud笔记)

    Docker 目录 Docker一 介绍和安装1 安装2 启动3 镜像加速 二 Docker基本操作1 镜像操作2 容器操作3 数据卷操作 三 Dockerfile1 镜像结构2 Dockerfile 四 Docker Compose1 安
  • RabbitMQ(黑马spring cloud笔记)

    MQ 目录 MQ一 同步通讯和异步通讯1 同步通讯2 异步通讯 二 RabbitMQ1 部署2 架构3 常见消息模型3 1 基本消息队列 xff08 Basic Queue xff09 3 2 工作消息队列 xff08 Work Queue
  • Redis实战—黑马点评(一) 登录篇

    Redis实战 黑马点评 xff08 一 xff09 登录篇 来自黑马的redis课程的笔记 黑马程序员Redis入门到实战教程 xff0c 深度透析redis底层原理 43 redis分布式锁 43 企业解决方案 43 黑马点评实战项目
  • tigerVNC的简单使用教程(CentOS的远程桌面连接)

    tigerVNC的简单使用教程 xff08 CentOS的远程桌面连接 xff09 1 环境和软件准备 1 CentOS 6 3下 root 64 localhost rpm q tigervnc tigervnc server tiger
  • Redis实战—黑马点评(二)缓存篇

    Redis实战 黑马点评 xff08 二 xff09 缓存篇 目录 Redis实战 黑马点评 xff08 二 xff09 缓存篇1 什么是缓存1 1 缓存的作用和成本 2 添加 Redis 缓存3 缓存更新策略3 1 三种更新策略3 1 1
  • Reids实战—黑马点评(三)秒杀篇

    Reids实战 黑马点评 xff08 三 xff09 秒杀篇 来自黑马的redis课程的笔记 黑马程序员Redis入门到实战教程 xff0c 深度透析redis底层原理 43 redis分布式锁 43 企业解决方案 43 黑马点评实战项目
  • RT-Thread Stm32f103开启UART2(中断接收及轮询发送) 使用RT-Thread Studio

    RT Thread Stm32f103开启UART2 使用RT Thread Studio 1 使用RT Thread Studio新建RT Thread项目 2 修改dricer gt doard h 增加UART2的宏定义设置gpio接
  • 串口收发数据

    1 1 字符串接收函数 发送方结束标志是你接收方判断的依据 xff0c 也可以说是属于协议的一部分 我们这里使用串口助手数据发送自动添加了 r n xff0c 所以我们将它们看成结束标志 1 2 数据传输方式 计算机与外部进行沟通只有并行和
  • VsCode Studio的C/C++代码自动补全

    关于VsCode Studio的C C 43 43 代码自动补全 第一步 xff1a 需要下载VsCode中的C C 43 43 插件 如图 xff1a 插件下载后 xff0c 最好是重新启动一下VS 第二步 xff1a 找到设置 在输入框
  • Nginx lua设置Cookie,及学习Cookie

    网上看到这篇文章 xff0c 很喜欢这种分析思路 xff0c 这里学习记录一下 最近小了解了下cookie 以前觉得cookie无非就是一连串键值对 在深入了解之后发现 远没自己想的那么简单 自己果真太肤浅了 好吧 这里主要探讨一下以下几个
  • nginx中不同client设置User-Agent与user_agent的坑

    最近发现nginx内部用lua获取user agent xff0c 得到的是一个table值 xff0c 很奇怪 xff0c 自己测试记录一下 xff1a 1 nginx配置 location zcy hello set by lua re
  • Nginx - request_time和upstream_response_time详解

    网上查了查资料 xff0c 这里记录一下 前言 最近分析服务器性能 xff0c 考虑到nginx在前面做反向代理 xff0c 这里查一下nginx日志来反应服务器处理时间的问题 注 xff1a 本文提到的所有变量 xff0c 如果需要区分
  • Spring Boot 2.3.0 Redis拓扑动态感应,使用Lettuce拓扑刷新

    背景 关于 Redis 在生产中我们一般情况下都会选择 redis cluster 高可用架构部署 xff0c 既能保证数据分片并且实现节点的故障自动转移 基本部署拓扑如下 xff1a 创建测试集群 这里通过我封装的 pig4cloud r
  • Country Codes and Language Codes

    ISO 3166 Country Codes and ISO 639 Language Codes 1 ISO 3166 Country Codes Table 20 1 ISO 3166 Country Codes Country ISO
  • SIP 注册过程

    SIP协议包含两种类型的消息 xff0c 一种是请求行用于发出邀请 xff0c 而另一种则是状态行 xff0c 用于标明当前通信的状态 请求行和状态行军包含三部分 xff0c 其中每一部分以空格隔开 xff0c 不论是请求行还是状态行均以C