VoIP的落地通信模型和要考虑几个大的方面问题及基本概念和交互流程整理

目录

一、VoIP的落地通信模型和要考虑几个大的方面问题... 1

关于SIP NAT防火墙穿越的汇总... 2

2.1 ALG(Application Level Gateway)... 3

2.2 MidCom(IETF MIDCOM(Middlebox Communications)... 3

2.3 STUN(Simple Traversalof UDP Through Network). 3

2.4 SBC(Session Border Controller). 3

3.2 实例 rport方式主要是对sip信令中Via字头的扩展,不过同时也要求SIP Proxy支持该功能。 NAT之后的sip client在发送请求的时候在via字头中添加rport字段... 4

网络延时,抖动,丢包对voip和视频业务QoS的影响... 6

二、工具:... 7

三、sip相关基本概念理解... 8

0、SIP协议功能概况... 8

1、什么是Outbound proxy(外出代理服务器)?应当设置Outbound proxy 吗?... 11

2、用户ID(User ID)和认证ID(Authentication ID)有什么区别?... 11

3、应当选用哪种语音编码方法?... 11

4、Voice_Frames_Per_TX是什么意思?它与以太网的流量有什么关系?... 12

5、Voice_Frames_Per_TX应当设置为什么值?... 12

6、以太网加到RTP数据包上的开销是多少?... 13

7、各种编码方法的帧的速率及比特速率是多少?... 13

9、什么是STUN服务,我是否需要使用STUN服务?... 13

10、如果我的电话机使用了STUN服务,能够正常地工作,我还需要设置外出代理服务器(Outbound proxy)吗?     14

四、SIP的基础数据包中项的含义... 15

(1)Request-URI:呼叫请求发送地址,UA生成初始请求消息时,该域中的消息一般与TO中的地址相同,经过网络服务器后,由于实际路由问题,该值可能发生变化;... 15

(2)From:发起请求方的地址,一般采用USERINFO@HOSTPOST形式,tag参数为随机产生的整数。     16

(3)To:接受方地址,采用USERINFO@HOSTPOST形式,当该域存在于最终响应消息中时,将会有tag参数。... 16

(4)Call-ID:识别呼叫参数,在同一个DIALOG中,该参数不发生变化,该参数与From中的tag参数、To域中的tag参数相结合用以保证呼叫的唯一性。... 16

(5)CSeq:表征transaction的参数,由于同一个呼叫中会存在多个transaction,因此通过该参数来保证同一个UA发送的不同请求消息间的顺序。... 16

(6)Via:表征呼叫经过的路径,UA生成SIP消息时,会在该域中填写自己的地址;proxy在转发请求消息时,将会增加一个填有自己地址的Via域,表示经过本proxy。Via域的存在可以保证响应消息按照原路径返回到主叫方,代理服务器用它检查其内容,如果新端点已出现在Via列表中,则表示有环路了。     16

(7)Contact:告知对端自己的地址,当对端发送下一个请求消息时,可直接向该地址发送,不需要关心前一个路由信息(除非有特定原则,例如PROXY可以通过RECORD-ROUTE域来保证下一个请求消息必须经过本PROXY,即使CONTACT域中填写对端客户的地址)。... 16

(8)Expires:给出消息内容超期的时间。... 16

(9)Max-Forwards:用来限制请求到他的目的地中间的跳转,包含一个每隔一个跳转就自动减一的数字,如果Max-Forwards在到达目的之前就减到0,他会报告一个483(太多的路由)错误回应。     16

(10)Require :UAC通过Require字段列出的选项标签,告知UAS处理请求时需要支持的选项。     16

(11)Record-Route:由于CONTACT域的存在使得两个用户后续的请求消息可能不经过PROXY,为了运营需要,PROXY在初始INVITE消息中增加了RECORD-ROUTE域,这样可以保证后续请求(例如BYE消息)经过PROXY.通过RECORD-ROUTE与CONTACT的结合,既可避免后续请求旁路网络服务器的行为,又可减少后续请求路径上的环节。... 16

(12)Content-Length头域用来确定每一个SIP消息在通讯流中的结束位置的。... 16

(13)SIP应答头... 18

SIP: From ,Contact, Via Record-Route/Route head. 20

ptime指示接受的打包间隔,但并不要求双方的ptime值一致。但发送媒体流时应该按照ptime指示的打包间隔来发送。... 21

为了控制通过re-INVITE和UPDATE方法进行周期性的会话(session)刷新,以判别会话两端是否存活,增加了两个头域:Session-Expires(会话的生命期)和Min-SE(会话时钟的最小值) 其中Min-SE头域中的值只能增加不能减少,Session-Expires头域的值只能减少不能增加,但不能少于Min-SE头域中的值     21

五、SIP交互流程详解... 21

1、SIP注册... 21

1 构造一个REGISTER请求... 21

2 处理REGISTER请求... 24

2、基本呼叫建立过程... 25

3、会话更改流程      用户代理服务端向用户代理客户端发送Invite消息,带有新的SDP协商信息;     26

4、正常呼叫释放过程  主叫用户挂机后... 27

5、被叫忙呼叫释放    呼叫请求送到被叫终端代理B后,被叫忙... 27

6、被叫无应答流程一  被叫久振铃无应答,终端代理A判断超时... 28

7、被叫无应答流程二  被叫久振铃无应答,终端代理B判断超时后... 29

8、遇忙呼叫前转流程  终端代理B忙线中,代理服务器对此呼叫进行前转,向终端代理C发送Invite请求消息     30

9、无应答呼叫前转    被叫久振铃无应答,代理服务器判断超时后,向终端代理B送Cancel消息放弃该呼叫,代理服务器对此呼叫进行前转,向终端代理C发送Invite请求消息;... 31

10、呼叫保持         被叫用户摘机,代理终端向代理服务器发送Reinvite请求消息     33

11、呼叫等待         用户A,B正处于通话阶段,用户C向A发起呼叫,然后B保持,A和C通话。     33

SIP中的DNS过程... 35

1.1.SIP消息涉及的DNS过程... 35

1.2.如何发送SIP请求消息... 35

1.3.如何发送响应消息... 36

虚拟号/转接号/Sip号码... 36

产品参考... 37

参考:... 37

 

怎样才能实现SIP协议来拨打落地电话?

https://www.zhihu.com/question/23474774

已经实现了SIP协议的VOIP软电话,用 kamailio 搭建的,实现了PC to Phone,Photo to Phone。现在是想实现Skype、爱聊、有信一类的网络电话,现在问题是怎么才能打通传统的座机和手机落地电话(PSTN)?跟运营商合作么?如果拨打全球电话的话,怎么实现?

一、VoIP的落地通信模型和要考虑几个大的方面问题

软终端→SIP server→语音网关→运营商中继→PSTN终端


 

VoIP 语音网关能够连接传统PSTN网络与IP网络,他是将传统电信网络的和话音流量转化为IP网络的数据流量的设备,并且提供双向的连接,既可以就收传统电信 网络并转发到IP网络,同时也能够将IP网络的拨号连接到传统网络;

IP PBX也是VoIP中常见的设备IP PBX就是在传统PBX基础上多了通往IP网络的通道,即使用因特网协议传送语音电话。目前主要有托管 IP PBX和虚拟IP PBX

 

所以,你缺语音网关,严格而言是语音网关或者会话边界控制器。具体用什么设备完全取决于中继线路类型,我简单写个对照表:

  1.  
  2.  
  3.  

      4.SIP中继线路:一般是第三方代理提供的虚拟中继线,部分地区的运营商也会直接提供,其实就是一个IP地址,用于让你的SIP server或网关设备与该IP地址做SIP Trunk;

上面四种方案,考虑到你的实际情况,第4种是最快最方便成本最低的实现线路落地的方案.,前三种都需要购买硬件设备放置在你的机房或者托管机房,第四种是可能不需要购买设备的,为什么是可能,而不是确定呢?因为要看你的具体sip server是否可以允许直接访问到对方提供的虚拟线路的IP地址,具体而言不展开了,可以跟线路运营商沟通,对方会帮你出对接方案的。


 

如果想真的在VoIP领域研究深点,并实现各种实际生产环境下应用的话,这是远远不够的。至少你还要考虑几个大的方面问题:

一、VoIP的NAT穿透问题!比如多层网络的复杂NAT。

二、VoIP的安全防护问题!怎么防止恶意扫描,sip洪水攻击等,客户端如果在公网下,如何解决向sip server的正常注册和发起呼叫?

三、用户端要不要支持webrtc?比较前沿了。

四、应用层的会话负载均衡等等问题……

 

 

 

关于SIP NAT防火墙穿越的汇总

 

1.SIP中的rport机制-NAT网络地址转换

NAT:网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

NAT常用的分类如下:

Full Cone NAT(完全圆锥型) 会将客户机地址{X:y}转换成公网地址{A:b}并绑定。任何包都可以通过地址{A:b}送到客户主机的{X:y}地址上。

Address Restricted Cone NAT(地址限制圆锥型 )  会将客户机地址{X:y}转换成公网地址{A:b}并绑定,只有来自主机{P}的包才能和主机{X:y}通信

Port Restricted Cone NAT(端口限制圆锥型会将客户机地址{X:y}转换成公网地址{A:b}并绑定,只有来自主机{P,q}的包才能和主机{X:y}通信。

Symmetric NAT(对称型)   会将客户机地址{X:y}转换成公网地址{A:b}并绑定为{X:y}|{A:b}<->{P:q}。对称型NAT只接受来自{P:q}incoming packet,将它转给{X:y} ,每次客户机请求一个不同的公网地址和端口,NAT会新分配一个端口号{C,d} 

 

 SIP Proxy无法穿过NAT回送SIP信令

因为SIP信令中的FromContact头域记录的是私网地址和端口,NAT无法识别和转换。如图所示:

 

2.NAT的常用解决方案

2.1 ALGApplication Level Gateway

可以识别SIP信令,能够适当地修改数据包。ALG可以是单独的连接于外网和内网之间的设备,也可以是内置于防火墙内的插件。

FW/NAT发现外网呼叫信令为SIP,将其转发到ALG(应用层网关),通过ALG建立起内网伪地址终端与外网终端的通信连接。

使用ALG需要对现有设备升级改造。例如思科的路由器都支持配置ALG

 

2.2 MidComIETF MIDCOM(Middlebox Communications

允许第三方(MIDCOM Agent )成为受FW/NAT信任的实体,然后代表FW/NAT做出决定,强迫其开放端口传送媒体流或数据流。这些受信任的实体通过“MidCom”定义的新协议与FW/NAT进行通信。

协议的识别不由Middlebox完成,而是由外部的MIDCOM Agent完成。

使用MidCom需要对现有设备升级改造

 

2.3 STUN(Simple Traversalof UDP Through Network)

 

   IETF RFC 3489定义了如何确定由NAT分配的公网地址和端口,不需要改造现有NAT

主要特色

能够让客户端发现NAT的存在以及类型;

能够让客户端发现NAT的绑定生命周期;

可以工作在多NAT串联环境下;

非常简单的协议,易于实现,负载低;

l STUN服务器可以位于公网任何地方。

适用范围

不适用于Symmetric NAT

对于Non- Symmetric NAT都适用;

如果双方都位于同一个NAT之后,就不适用。

 

2.4 SBC(Session Border Controller)

             
    l 
Signaling Solution

SBC可以帮助SIP信令穿越已经存在的FW/NAT,而不需要对现有的FW/NAT设备做任何改变;

对于SIP终端,SIP终端设备会周期性发送注册消息到SBC。  为了控制通过re-INVITEUPDATE方法进行周期性的会话(session)刷新,以判别会话两端是否存活为了保持这个绑定,客户端应该在每隔20s左右重发INVITE请求,这种重发机制需要发生在收到一个临时的响应后。大多数的NAT绑定有超过1分钟的超时时间

Media Traversal Solution

SBC可以把相应的媒体流发送到防火墙上的相关IP地址和端口,然后正确地使媒体流到达防火墙后的用户侧。

为了穿越对称性的对称性的NAT,响应需要发送到相同的IP地址和端口。当服务器在多端口或接口的请求上监听请求时,它必须记住请求是从何处发的。对一个稳定的Proxy,在一个传输的持续时间中,记住这些东西是没有问题的。但是对于不稳定的Proxy,它不存储请求和响应中的状态信息,为了达到本规范的要求,它需要将地址和端口信息加密到Via头字段中,在响应信息到达的时候,它能提取加密的信息并将它放到响应中。

rport机制需要终端支持该种机制,因此应用情况比较受限。但是在笔者的应用场景(呼叫中心)中,主要要解决的问题是坐席能在NAT环境中穿越,给服务器发送信息。因为坐席所使用的SIP软电话是本公司开发的,所以可以保证是支持rportreceived的。

 

3.2 实例 rport方式主要是对sip信令中Via字头的扩展,不过同时也要求SIP Proxy支持该功能。
NAT之后的sip client在发送请求的时候在via字头中添加rport字段

下面举一个发送REGISTER信息的实例,在请求信息的Via头中包含了没有值的rport参数,如下所示:

http://www.blogjava.net/Images/OutliningIndicators/None.gif  REGISTER sip:  124.40  .  120.188  :  5060   SIP  /  2.0
http://www.blogjava.net/Images/OutliningIndicators/None.gifVia: SIP/ 
 2.0  /  UDP   124.42  .  4.203  :  15500  ;branch  =  z9hG4bK  -  d8754z  -  1049ed261d2e643d  -  1  ---  d8754z  -;rport
http://www.blogjava.net/Images/OutliningIndicators/None.gifMax 
 -  Forwards:   70
http://www.blogjava.net/Images/OutliningIndicators/None.gifContact: < 
 sip:  19988888888  @  192.168  .  2.65  :  12344  ;rinstance  =  7cd1c532e92fdb0e  >  ;expires  =  
http://www.blogjava.net/Images/OutliningIndicators/None.gifTo: "  19988888888  "  <  sip:  19988888888  @  124.40  .  120.188  :  5060  >
http://www.blogjava.net/Images/OutliningIndicators/None.gifFrom: " 
 19988888888  "  <  sip:  19988888888  @  124.40  .  120.188  :  5060  >  ;tag  =203ba359
http://www.blogjava.net/Images/OutliningIndicators/None.gifCall  -ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
http://www.blogjava.net/Images/OutliningIndicators/None.gifCSeq:   1 REGISTER
http://www.blogjava.net/Images/OutliningIndicators/None.gifAllow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
http://www.blogjava.net/Images/OutliningIndicators/None.gifUser 
 -  Agent: eyeBeam release 1105a stamp   56793
http://www.blogjava.net/Images/OutliningIndicators/None.gifContent- 
 Length: 

    发送到的服务器支持rport机制,它看到请求中的rport后,将通过分析UDP包信息得到的的NAT的公网地址(124.42.4.203)和端口信息(15500)分别作为receivedrport属性带给客户端:

http://www.blogjava.net/Images/OutliningIndicators/None.gif  SIP  /  2.0     200   OK
http://www.blogjava.net/Images/OutliningIndicators/None.gifVia: SIP
  /  2.0  /  UDP   124.42  .  4.203  :  15500  ;branch  =  z9hG4bK  -  d8754z  -  1049ed261d2e643d  -  1  ---  d8754z  - ;rport  =  15500 ;received  =  124.42  .  4.203  
http://www.blogjava.net/Images/OutliningIndicators/None.gifFrom:   "  19988888888  "  <  sip:  19988888888  @  124.40  .  120.188  :  5060  >  ;tag  =  203ba359
http://www.blogjava.net/Images/OutliningIndicators/None.gifTo: 
  "  19988888888  "  <  sip:  19988888888  @  124.40  .  120.188  :  5060  >  ;tag  =  0005  -  058  -  7d6dc90516ae2e21
http://www.blogjava.net/Images/OutliningIndicators/None.gifCall
  -  ID: Yzc4N2IwMzY5OWU4MTdkMzY0NWY4OWU3NjMzNmJiM2U.
http://www.blogjava.net/Images/OutliningIndicators/None.gifCSeq: 
  4   REGISTER
http://www.blogjava.net/Images/OutliningIndicators/None.gifAllow: INVITE,ACK,OPTIONS,BYE,CANCEL,REGISTER,INFO,UPDATE,PRACK,REFER,SUBSCRIBE,NOTIFY,MESSAGE
http://www.blogjava.net/Images/OutliningIndicators/None.gifContact: 
  <  sip:  124.40  .  120.188  :  5060  >  
http://www.blogjava.net/Images/OutliningIndicators/None.gifContent  -  Length: 

   客户端在得到响应信息后,知道了所使用的公网地址和端口,在而后定期重发的REGISTER信息中,Contact变换成124.42.4.203: 15500,例如新发的REGISTER信息变为:

http://www.blogjava.net/Images/OutliningIndicators/None.gif  REGISTER sip:  124.40  .  120.188  :  5060   SIP  /  2.0  
http://www.blogjava.net/Images/OutliningIndicators/None.gifVia: SIP  /  2.0  /  UDP   124.42  .  4.203  :  15500  ;branch  =  z9hG4bK  -  d8754z  -  1049ed261d2e643d  -  1  ---  d8754z  - ;rport
http://www.blogjava.net/Images/OutliningIndicators/None.gifMax  -  Forwards:   70  
http://www.blogjava.net/Images/OutliningIndicators/None.gifContact:   <  sip:  19988888888  @  124.42   4.203  :   15500  ;rinstance  =  7cd1c532e92fdb0e  >  ;expires  =  
http://www.blogjava.net/Images/OutliningIndicators/None.gifTo:   "  19988888888  "  <  sip:  19988888888  @  124.40  .  120.188  :  5060  >  
http://www.blogjava.net/Images/OutliningIndicators/None.gifFrom:   " 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二、实验要求: 1、 内网为一个企业的内部网络。其中,PC1是总经理机器,PC2是业务部机器, PC3为财务部机器,PC2和PC3分属两个VLAN,PC1可以同时访问财务部和业务部。 2、 二层交换机1和三层交换机1之间实现聚合;二层交换机2和三层交换机1之间实现RSTP。 3、 PC4为FTP服务器,只允许管理人员总经理访问,其他工作人员不允许访问。 4.该内网只有一个合法的上网地址,pc5为外网上的web服务器,作路由使得内外网之间可以通信,并且在Router1上作NAPT,使得只有pc1所在的网段和pc4可以登录外网,且pc4向外网提供ftp服务。 三、实验步骤 二层交换机1的配置: S2126G-1>enable 14 Password: S2126G-1#conf Enter configuration commands, one per line. End with CNTL/Z. S2126G-1(config)# S2126G-1(config)#hostname % Incomplete command. S2126G-1(config)#hostname wde 2008-06-26 17:09:29 @5-CONFIG:Configured from outband wde(config)#vlan 10 2008-06-26 17:09:34 @5-CONFIG:Configured from outband wde(config-vlan)#end 2008-06-26 17:09:38 @5-CONFIG:Configured from outband wde#conf Enter configuration commands, one per line. End with CNTL/Z. wde(config)#interface range fastethernet 0/3-6 2008-06-26 17:10:26 @5-CONFIG:Configured from outband wde(config-if-range)# wde(config-if-range)#switchport access vlan 20 2008-06-26 17:11:02 @5-CONFIG:Configured from outband %Warning : Access VLAN does not exist. Creating vlan 20 wde(config-if-range)#exit 2008-06-26 17:11:08 @5-CONFIG:Configured from outband wde(config)#interface aggregateport 1 2008-06-26 17:15:43 @5-CONFIG:Configured from outband wde(config-if)#switchport mode trunk 2008-06-26 17:16:04 @5-CONFIG:Configured from outband wde(config-if)#exit 2008-06-26 17:16:08 @5-CONFIG:Configured from outband wde(config)#interface range fastethernet 0/1-2 2008-06-26 17:16:48 @5-CONFIG:Configured from outband wde(config-if-range)#port-group 1 2008-06-26 17:17:12 @5-CONFIG:Configured from outband wde(config-if-range)#exit 2008-06-26 17:17:16 @5-CONFIG:Configured from outband wde(config)# Press RETURN to get started!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值