SIP支持的传输协议

news2024/11/27 0:18:10

一、SIP支持的传输协议-UDP、TCP、TLS        

     SIP是一个应用层的会话协议,与一般协议不同的是,SIP协议可以同时支持各种传输协议。

    SIP支持UDP传输:UDP是一个无连接的协议,且不提供可靠性。在UDP上建立SIP连接存在不可靠性。

    SIP支持TCP传输:增加了SIP报文和语音传输的可靠性,通过TCP协议自身的特点为基于SIP的VoIP通信提供了面向连接和可靠的传输。SIP使用TCP传输协议后,SIP协议可以不需要考虑报文丢失和重传问题。

    SIP支持TLS(Transport Layer Security,传输层安全)传输:SIP支持TCP传输仅仅保证了SIP报文和语音传输的可靠性,而SIP支持TLS传输则保证了SIP报文传输的安全性。

以上三种传输协议各具特点,用户可以根据实际的应用环境采用不同的传输协议。

sip:的缺省传输协议是 UDP;sips:的缺省传输协议是TCP。tcp默认5060,tcp+tls5061;tcps5061

TCP传输示例:

REGISTER sip:192.168.110.237:20101;transport=tcp SIP/2.0

Via: SIP/2.0/TCP 192.168.110.247:50250;rport;branch=z9hG4bKPjda05353a7a96446799361429235bc0e5;alias

Max-Forwards: 70

From: <sip:32100045@192.168.110.237>;tag=6c33309d840849cf89aeffac78fe505e

To: <sip:32100045@192.168.110.237>

Call-ID: 3548dbde40f943d2bdaf41d727049ffc

CSeq: 54023 REGISTER

Supported: outbound, path

Contact: <sip:32100045@192.168.110.247:50250;transport=TCP;ob>;reg-id=1;+sip.instance="<urn:uuid:00000000-0000-0000-0000-000041d7c640>"

Expires: 30

Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS

Content-Length:  0

二、SIP选择传输协议

SIP支持多种传输协议,所以必须有一种管理它们的办法。

实现这一目标有两种方法。

第一种是通过SIP URI显式说明。

URI 描述中,transport=tcp或transport=sctp ( RFC 4168)的存在说明这个URI所选定的传输协议。注意:对于TLS传输来说,应当使用SIPS URI方案,虽然有些非标准的实现中会用transport=tls参数描述。如果有transport=udp就使用UDP。

第二种,URI中没有transport参数,那么采用以下规则决定传输协议:

  1. 如果URI中有数字IP地址,那么SIP URI应当使用UDP协议,SIPS URI使用TCP协议。
  2. 如果URI中没有数字地址,但有端口号,那么SIP URI应当使用UDP协议,SIPS URI使用TCP协议。
  3. Via中sent-by参数,具体参考下面via参数的具体说明。

三、Via和Contact参数

Via

Via该字段用于指示请求历经的路径。它可以防止请求消息传送产生环路,并确保响应和请求消息选择同样的路径,以保证通过防火墙或满足其它特定的选路要求。

发起请求的客户必须将其自身的主机名或网络地址插入请求的Via字段,如果未采用缺省端口号,还需插入此端口号。在请求前传过程中,每个代理服务器必须将其自身地址作为一个新的Via字段加在已有的Via字段之前。如果代理服务器收到一个请求,发现其自身地址位于Via头部中,则必须回送响应“检测到环路”。

格式:

Via=("Via"|"v")":" 1#(send-protocol send-by *(";" via-params)[comment])

via-params=via-hidden|via-ttl|via-maddr|via-received|via-branch|via-extension

via-hidden="hidden"

via-ttl="ttl" "="ttl

via-maddr="maddr" "="maddr

via-received="received" "="host[:port]

via-brance="branch" "="token

via-extension=token["="(token|quoted-string)]

send-protocol=protocol-bane"/"protocol-version"/"transport

protocol-name

参数说明:

transport:发送协议格式,协议名和协议版本的缺省值分别为SIP和UDP。

sent-by:发送方为通常的发送方主机和端口号。

via-hidden:隐藏参数就是关键词"hidden",如有此参数,表示该字段已由上游代理予以加密,以提供隐私服务。

via-ttl:生存期参数,格式 ttl=xxx。

via-maddr:多播地址参数,格式maddr=xxx。生存期参数与多播地址参数配用。

via-received:接收方标记,格式received=host[:port]。

via-branch:分支参数用于代理服务器并行分发请求时标记各个分支,当响应到达时,代理可判定是哪一分支的响应。

Contact

Contact通用头域可出现在INVITE、ACK和REGISTER请求中,1XX、2XX、3XX和485响应中。通常,它提供了一个URL,用户可以通过此URL来进行进一步的通信。INVITE和ACK请求:Contact域表明请求从哪个位置发起Contact(m) 包含一个 SIP 或 SIPS URI,它表示联系 Alice 的直接路由,它由绝对域名称(FQDN)中的用户名组成。选用 FQDN 的时候,许多终端系统没有注册域名,因此允许 IP地址。

Via 头字段告诉其它元素向哪里发送响应,而 Contact 头字段告诉其它元素以后向哪里发送请求。

四、tcp在sip上实现

      首先作为UAC和UAS和作为Proxy的概念上是不同的。那么那UAC来说,UAC需要主动连接UAS,即UAC通讯层打开一个连接。TCP使用长连接,并且不同事务共享这些连接。

UAC发送请求到UAS,UAS进行匹配处理;UAS处理完毕发送应答。理论上,UAS应该在通常的连接上发送应答,如果连接不存在,服务端需要创建一个连接来发送应答。如果存在”received”参数,就用对应的在”received”参数中指定的IP地址。如果存在”sent-by”参数,那么就用”sent-by”指定的port,如果不存在,那么就用缺省的port。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【K210模块】使用UART模块发送和接收数据

官方案例链接 【K210模块】使用UART模块发送和接收数据 官方案例链接 一、代码部分1、添加转换句&#xff08;1&#xff09;字节data 转字符串① 添加了转换语句② 没有添加转换语句 &#xff08;2&#xff09;字符串str 转 字节data 2、三种方式的比较&#xff0c;K210发送到S…

图解Vit 2:Vision Transformer——视觉问题中的注意力机制

文章目录 Patch Embedding 回顾Seq2Seq中的attentionTransformer中的attention Patch Embedding 回顾 上节回顾 Seq2Seq中的attention 在Transformer之前的RNN&#xff0c;其实已经用到了注意力机制。Seq2Seq。 对于Original RNN&#xff0c;每个RNN的输入&#xff0c;都是对…

vue3项目创建(vite3+ts+elementui-plus)

文章目录 1.创建工程 1.创建工程 目的&#xff1a;vue3vitets 安装依赖&#xff0c;安装vite的工具 Vite下一代的前端工具链为开发提供极速响应v4.3 npm install -g create-vite创建工程 create-vite font-userui --template vue-ts –template vue-ts 后面的是配置模板&#…

CS 144 Lab Zero

CS 144 Lab Zero 环境搭建使用socket写一个网络程序In-memory reliable byte stream 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab 0 对应的PDF: Lab Checkpoint 0: networking warmup Lab 0 会省去Telnet部分内容。 环境搭建 Run Ubuntu version 22.10, then ins…

基于linux下的高并发服务器开发(第二章)- 2.3 进程创建

/*#include <sys/types.h>#include <unistd.h>pid_t fork(void)函数的作用&#xff1a;用于创建子进程返回值&#xff1a;fork()的返回值会返回两次。一次是在父进程中&#xff0c;一次是在子进程中在父进程中返回创建的子进程的ID&#xff0c;在子进程中返回0如何…

《微服务架构设计模式》第十三章 微服务架构的重构策略

微服务架构的重构策略 一、重构到微服务需要考虑的问题1、为什么重构2、重构形式3、重构策略 二、设计服务与单体的协作方式三、总结 一、重构到微服务需要考虑的问题 1、为什么重构 单体地狱造成的业务问题&#xff1a; 交付缓慢充满故障的软件交付可扩展性差 2、重构形式 …

itheima苍穹外卖项目学习笔记--Day6: 微信登录 / 商品浏览

Day6 a. HttpClientGET方式请求&#xff1a;POST方式请求&#xff1a; b. 微信登录 a. HttpClient HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新…

chrome插件reading-time开发

本插件开发文档翻译于Google官方文档Chrome Extensions Tutorial: Reading time - Chrome Developers 一、reading-time reading-time项目的功能是 将预期的阅读时间添加到任何Chrome extension 和 Chrome Web Store documentation 页面里面 通过这个项目&#xff0c;我们可以…

拓扑序列及其排序

目录 一、拓扑序列及其排序的相关概念拓扑序列的定义拓扑序列的性质出度、入度、度数拓扑排序 二、拓扑序列及其排序的应用有向图的拓扑序列代码实现 一、拓扑序列及其排序的相关概念 拓扑序列的定义 拓扑序列是对一个 有向无环图(DAG)&#xff08;也称为拓扑图&#xff09;而…

SpringBoot整合gRPC -- 简单明了

项目结构 pom引入(parent中引入即可) <properties><net-devh-grpc.version>2.14.0.RELEASE</net-devh-grpc.version><os-maven-plugin.version>1.6.0</os-maven-plugin.version><protobuf-maven-plugin.version>0.5.1</protobuf-mave…

Python绘制一个圆

代码 import matplotlib.pyplot as plt import numpy as npradius 10 # 半径的长度 center np.array([0,0]) # 圆心的坐标 t np.linspace(0, 2 * np.pi, 100) x center[0] radius * np.cos(t) y center[1] radius * np.sin(t)plt.figure(figsize(5,5)) plt.plot(x,y) p…

C# Modbus通信从入门到精通(5)——Modbus RTU(0x03功能码)

1、03(0x03)读保持寄存器 使用该功能码能从远程地址中读取1到125个保持寄存器的值,每个保持寄存器都占两个字节,读取的保持寄存器数量由主站读取时指定。 2、发送报文格式 更详细的格式如下: 从站地址+功能码+起始地址高位+起始地址低位+寄存器数量高位+寄存器数量低位+…

Redis进阶源码 - 主流程源码

redis底层是C语言编写的一个可执行程序&#xff0c;主方法为server.c 中main方法 主要包括&#xff1a;从初始化 到 EventLoop整个流程源码内容介绍 画的分析图太大了&#xff0c;需要的直接下载看吧.....想提醒大家的是&#xff0c;看源码时一定要带着目标去看&#xff0c;比…

《微服务架构设计模式》第十一章 开发面向生产环境的微服务应用

内容总结自《微服务架构设计模式》 开发面向生产环境的微服务应用 一、开发安全的服务1、安全性概述2、单体应用安全性3、微服务应用安全性 二、如何使用外部化配置模式三、如何使用可观测性模式四、使用微服务基底模式开发服务1、使用微服务基地2、从微服务到服务网格 五、总结…

前端开发面试题及答案整理(合集)

前端开发面试题及答案 1、对Web标准以及W3C的理解与认识? 答&#xff1a;标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外链CSS和JS脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组…

2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷1

第一题: 小码君在和朋友们玩密室逃脱。他们被困在一个封闭的房间中,只有破解密码,才能逃出密室。密码提示如下:“将 1 到 100 以内,能被 7 整除的数的个数以及这些数累加起来的和拼在一起即是打开房门的密码” 。请帮小码君算出密码。(注:只需显示表示结果的纯数字,不…

动手学深度学习——softmax回归的从零开始(代码详解)

目录 1. softmax回归的从零开始实现1.1 初始化模型参数1.2 定义softmax操作1.3 定义模型1.4 定义损失函数1.5 分类精度1.6 训练1.7 预测1.8 小结 1. softmax回归的从零开始实现 引入Fashion-MNIST数据集&#xff0c; 并设置数据迭代器的批量大小为256。 import torch from IP…

快速实现单数据表编辑

目录 1 简介 2 准备电子表格 3 初始化 4 根据电子表格生成数据库表并导入数据 5 使刚创建的表显示在待编辑列表中 6 开始编辑单表 7 一段代码用于实现中文字段名、调整列宽、只读字段、隐藏字段 1 简介 单数据表是最容易实现的表。由于不需要从零开始一个一个地增加字段…

pwm呼吸灯

文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化&#xff0c;使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …

当你输入URL并按下回车后,发生了什么?

大概发生了八步的事情&#xff1a; URL解析->DNS解析->服务器建立连接->发送HTTP请求->服务器处理请求->服务器响应->接收和渲染页面->关闭连接 URL解析 URL&#xff0c;统一资源定位符&#xff0c;是用来表示从互联网上得到的资源位置和访问这些资源的…