sip服务器和p2p都要穿透nat,请问原理有何不同

sechelove 2009-04-08 10:02:22
最近在看sip服务器原理,一般包括sip register,sip proxy,stun server,rtp proxy
p2p也要服务器穿透4种类型nat
请问网络协议牛人,这2种方法有何不同
...全文
2201 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
UDX协议 2011-04-28
  • 打赏
  • 举报
回复
wanglovec 2011-03-12
  • 打赏
  • 举报
回复
都遇到同样的问题, 没什么的 也就是NAT 穿透 端口映设 防火墙穿透
NorZ 2010-07-09
  • 打赏
  • 举报
回复
可以在服务器修改SDP内容
abond 2010-04-15
  • 打赏
  • 举报
回复
在RTP的消息正文内,有UA能够成功通信所需要的一些信息。这种消息正文,就叫做SDP消息。
问题在于,SIP终端(UA)可能对NAT一无所知。因而在SDP中包含的IP地址,通常使用内部的IP地址,也就是SIP终端知道的IP。这样,当通信的对方想与SIP终端通信时,就查看SDP消息中的IP地址,但是什么也没有得到,因为这里使用的是内部IP地址。
看SIP的消息头
下面举个例子说明:

INVITE sip:040600@192.168.20.2:5060 SIP/2.0.
Record-Route: <sip:143.248.130.35;ftag=3a7ceb24a6ac50c4;lr=on>.
Via: SIP/2.0/UDP 143.248.130.35;branch=z9hG4bK758e.976609c7.0.
Via: SIP/2.0/UDP
192.168.20.3;rport=1024;received=223.178.140.109;branch=z9hG4bK34efcab2403aa20d.

SIP消息的标题头,类似于邮件的标题头。从后往前看,从From行开始,看到第一个Via行,这是SIP终端自己认为的IP地址,例如192.168.20.3。但是SIP代理服务器是聪明的,它知道这个消息是从哪里发过来的,它添加了rport和接收到的标志:
Via: SIP/2.0/UDP
192.168.20.3;rport=1024;received=223.178.140.109;branch=z9hG4bK34efcab2403aa20d

也就是说,SIP代理服务器,知道发消息的SIP终端的公网地址是223.178.140.109:1024。
这样,SIP代理服务器是可以与SIP终端通信的,因为它知道SIP终端的公网地址。

但是,可怜的老式的RTP被阻塞了,因为它的标题头如下:
v=0.
o=040618 8000 1 IN IP4 192.168.20.3.
s=SIP Call.
c=IN IP4 192.168.20.3.
t=0 0.
m=audio 38660 RTP/AVP 0 8 4 18 2 15 99.
a=sendrecv.
a=rtpmap:0 PCMU/8000/3.
a=rtpmap:8 PCMA/8000/3.

SIP终端期望从端口 port m=38660 且IP地址IP c= 192.168.20.3来接收RTP数据,而这个192.168.20.3:38660,就是通信的对方试图发RTP数据的目的地址。显然在NAT之后无法发送

这就是SIP电话振铃总是能够听到,而接起来却没有声音的原因。
sipPhone222 2010-03-12
  • 打赏
  • 举报
回复
同样想了解,帮顶。。。
sipPhone222 2010-03-03
  • 打赏
  • 举报
回复
不处理NAT穿越问题的话,是否可以传输RTP语音包呢?

现在碰到一个问题,能通过PC客户端拨打手机,让手机震铃,
但是接通后,双方都听不到声音。。。。
满衣兄 2010-01-07
  • 打赏
  • 举报
回复
sip主要是用来控制的,这部分协议一般都是直接和服务器交互的。对于RTP协议大部分还是要经过服务器转发的,也就是说你的语音数据要经过服务器转发的,而国内网络起步比较晚,公网IP很少,所以导致NAT占了绝大部分,另一个基于安全的考虑,公司一般也会用NAT的,而这当中对称NAT的份额比较大,所以在国内做P2P基本没有什么用处,行不通,最后还是要用服务器转发数据。像skype这类的软件是利用了超级节点,说到底还是服务器转发,只是把服务器压力分散了,根本算不上p2p,至于电驴之类的其实都不是。所以我建议楼主不要把精力浪费在这上面,一句话概括就是硬件不支持。
kwovex 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 channels_net 的回复:]
p2p 是一个技术
sip 是一个协议
[/Quote]

协议可以或者不采用穿透nat
但p2p却是建立在那个基础上的
zhuyx808 2009-10-14
  • 打赏
  • 举报
回复
采用p2p的形式,当发生问题的时候,比如2个终端连不了,我如何才能获得双方的网络结构?
TRUE 2009-09-27
  • 打赏
  • 举报
回复
p2p在穿越NAT的时候,都应该是一样的,只是打洞的方式不一样了,
P2P的在2个终端建立链接后,就是2个终端的通讯了,和服务器没有关系了,只是维持一个链接罢了
一般的Sip和H323的都需要进行媒体转发,就是需要proxy进行转发了,不过应该能够可以改进实现P2P的模式,以上是我的理解,不知道是否能够对你有用
tg321000 2009-09-05
  • 打赏
  • 举报
回复
不好意思!sip报文穿越借助于rport参数,这个说法是不对的
tg321000 2009-09-05
  • 打赏
  • 举报
回复
sip报文穿越借助于rport参数,这个说法是完全对的!有时候存在sofx switch或IMS中途修改rport的情况
在voip中,媒体和信令是分开的,server只管信令的交互,至于rtp如何走,则是由路由协商决定了。
一般情况下,穿越是不需要的。它的存在只是为了提高VOIP的安全性,将私网隔离。同样此时对于sip和rtp的是否需要穿越这也是nat设备决定的,有时候SBC只做sip的穿越,有时候它要求rtp也要穿越到大网当中。
kingcat1 2009-07-31
  • 打赏
  • 举报
回复
顶一个
haoweir 2009-07-30
  • 打赏
  • 举报
回复
mark
申庆胜 2009-07-09
  • 打赏
  • 举报
回复
给你个正确的答案,sip报文穿越和rtp流穿越是两回事,sip报文穿越借助于rport参数,而rtp流穿越要借助于stun或者rtpproxy服务器,如果还有什么疑问,可以加我QQ156473555。
sxzj2008 2009-07-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lhsxsh 的回复:]
p2p 是一个技术
sip 是一个协议
[/Quote]
这也许就是定义上的区别吧
kingcat1 2009-06-29
  • 打赏
  • 举报
回复
yanghehong 说的很对,相对于来说,SIP信令没有穿越的问题,但是后续建立的RTP流就有这个问题了。因为注册的时候在服务器上留下了你的NAT的公网IP和端口,而NAT又和你的客户端的私网地址有一个映射的关系,而且你的客户端会在NAT上去维持这个这个映射。但是当你建立通话时,如果你的连接地址还是保持着你的私网地址话,这时NAT就会把这个RTP流给断掉,所以RTP流需要STUN穿越NAT。你可以看看关于NAT的分类,还有打洞的相关知识,不知道说的清楚不!
lhsxsh 2009-06-27
  • 打赏
  • 举报
回复
p2p 是一个技术
sip 是一个协议
wenblue7 2009-06-26
  • 打赏
  • 举报
回复
顶啊顶啊
Channels_net 2009-06-26
  • 打赏
  • 举报
回复
p2p 是一个技术
sip 是一个协议
加载更多回复(8)
NAT穿越服务器概要设计 编写目的 多媒体会话信令协议是在准备建立媒体流传输的代理之间交换信息的协议,例如SIP、RTSP、H.323等。媒体流与信令流截然不同,它们所采用的网络通道也不一致。由于协议自身设计上的原因,使得媒体流无法直接穿透网络地址转换/防火墙(NAT/FW)。因为它们生存期的目标只是为了建立一个在信息中携带IP地址的分组流,这在遇到NAT/FW 时会带来许多问题。而且这些协议的目标是通过建立P2P(Peer to Peer)媒体流以减小时延,而协议本身很多方面却与NAT存在兼容性问题,这也是穿透 NAT/FW的困难所在。 而NAT仍是解决当前公用IP地址紧缺和网络安全问题的最有力手段,它主要有四种类型:完全锥型NAT(Full Cone NAT),地址限制锥型NAT (Address Restricted Cone NAT),端口限制锥型NAT (Port Restricted Cone NAT),对称型NAT (Symmetric NAT)。前三种NAT,映射与目的地址无关,只要源地址相同,映射就相同,而对称型NAT的映射则同时关联源地址和目的地址,所以穿透问题最为复杂。 不少方案已经被应用于解决穿越NAT问题,例如:ALGs(Application Layer Gateways)、Middlebox Control Protocol、STUN (Simple Traversal of UDP through NAT)、TURN(Traversal Using Relay NAT)、ICE(Interactive Connectivity Establishment)、RSIP(Realm Specific IP)、symmetric RTP等。 本文档描述基于STUN/TURN协议解决穿越NATNAT穿越服务器Nat Traversal Server)的概要设计说明书。
WebRTC 简介 WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。 WebRTC提供了实时音视频的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。 虽然WebRTC的目标是实现跨平台的Web端实时音视频通讯,但因为核心层代码的Native、高品质和内聚性,开发者很容易进行除Web平台外的移殖和应用。很长一段时间内WebRTC是业界能免费得到的唯一高品质实时音视频通讯技术。 为什么需要 WebRTC 开发者教程? 虽然WebRTC技术已经较为成熟,其集成了最佳的音/视频引擎,十分先进的codec,且包含了使用STUN、ICE、TURN、RTP-over-TCP的关键NAT和防火墙穿透等众多门槛并不低的技术。抛开音视频技术本身的复杂性外,要想找到合适的资料、完整的代码和库、配合合适的IDE和辅助工具能正常地实现编译和安装都非常的不容易,而这还只是个开始。没有靠谱的教程,你该怎么开始?那么地坑等在那,难道你打算一个一个趟过去? 本《WebRTC 零基础开发者教程》主要讲了什么 本文中提供下载的《WebRTC 零基础开发者教程》将以一个初学者的角度,从0开始逐步引导你掌握WebRTC开发的方方面面(当然,教程中更多的是操作性的内容,具体到技术原理和实现,显然不是本教程的讨论范畴)。 《WebRTC 零基础开发者教程》目录 1 工具 1.1 depot_tools 1.1.1 目标 1.1.2 Chromium 1.1.3 使用说明在这儿 1.1.4 下载 1.1.5 使用 1.1.6 具体使用例子 1.2 Gyp工具 1.3 Python工具 1.4 本地集成开发环境(IDE ) 1.4.1 Visual studio 1.4.2 Kdevelop 1.4.3 Eclipse 2 Webrtc 2.1 下载、编译 2.1.1 Windows下 2.1.2 ubuntu下编译 2.1.3 编译Android(只能在 linux 下) 3 webrtc开发 3.1 开发P2P视频软件需要处理的问题 3.1.1 用户列的获取、交换、信令的交换 3.1.2 P2P通信 3.1.3 多媒体处理 3.2 webrtc架构 3.2.1 WebRTC架构组件介绍 3.2.2 WebRTC核心模块API介绍 3.2.3 webRTC核心API详解 4 Libjingle详细介绍 4.1 重要组件 4.1.1 信号 4.1.2 线程和消息 4.1.3 名称转换 4.1.4 SSL支持 4.1.5 连接 4.1.6 传输,通道,连接 4.1.7 候选项 4.1.8 数据包 4.2 如何工作 4.2.1 Application模块 4.2.2 XMPP Messaging Component 模块 4.2.3 Session Logic and management commponent 模块 4.2.4 Peer to peer Component 模块 4.2.5 其他 4.3 建立libjingle应用程序 5 代码分析 5.1 音频通道建立过程 5.2 音频接收播放过程 5.3 视频接收播放过程 6 协议 6.1 XMPP协议 6.1.1 原理介绍 6.1.2 XMPP 协议网络架构 6.1.3 XMPP 协议的组成 6.1.4 Xmpp介绍 6.1.5 协议内容 6.2 Stun协议 6.2.1 P2P实现的原理 6.2.2 P2P的常用实现 6.2.3 Stun URI 6.2.4 内容 6.2.5 中文内容 6.2.6 开源服务器 6.2.7 公开的免费STUN服务器 6.3 Turn协议 6.3.1 概念 6.3.2 Turn uri 6.3.3 开源服务器工程 6.3.4 开源库 6.4 交互式连接建立(Interactive Connectivity Establishment) 6.4.1 IETF规格 6.4.2 开源工程 6.5 XEP-0166 Jingle 6.5.1 绪论 6.5.2 需求 6.6 Sctp协议 6.7 Rtp协议 7 附件 7.1 Gyp工具 7.2 Google test程序 7.3 Webrtc库介绍 7.4 webrtc代码相关基础知识 7.5 STUN和TURN技术浅析 7.6 基于ICE的VoIP穿越NAT改进方案 7.7 ubuntu安装使用stuntman 7.8 一个开源的ICE库——libnice介绍 7.9 4种利用TURN穿越对称型NAT方案的设计与实现 7.10 基于ICE方式SIP信令穿透Symmetric_NAT技术研究

1,394

社区成员

发帖
与我相关
我的任务
社区描述
VOIP相关技术探讨专区
社区管理员
  • VOIP技术探讨社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧