基于sip的p2pnat穿越解决方案的制作方法

文档序号:7945871阅读:344来源:国知局
专利名称:基于sip的p2pnat穿越解决方案的制作方法
技术领域
本发明是针对P2P软件如何顺利穿透各种类型的NAT的研究,主要研究如 何实现UDP以及TCP的NAT无缝穿透,并提出了借助于SIP协议来实现P2P 的NAT穿越方法,涉及新一代通信网络业务识别及安全主动监控技术领域。
背景技术
Peer-to-Peer(P2P)技术是以非集中方式使用分布式资源来完成任务的一种 系统应用,它充分利用了客户端的内容,带宽等资源,具有极强的分布性和自组 织性。目前,P2P的网络应用在互联网上取得了飞速的发展,包括以BT为代表 的P2P文件共享和以Skype为代表的P2P音视频通信。
NAT设备很好地解决了 IPv4的地址稀缺和网络安全等问题,因而被广泛应 用,同时也给P2P提出了新的难题,比如内网和外网使用两种不同的IP地址, 而且很多NAT设备会过滤掉外部网络的IP包。如何在NAT环境中,实现P2P应 用是学术界和工业界普遍关注的问题。
SIP(会话发起协议)是IETF提出的基于文本的信令协议,已成为IP通信领 域的核心协议。很多P2P的应用都使用SIP协议作为通信的信令。如何将P2P 和SIP结合起来,相互利用各自的优势,已经成为一个热门的话题。

发明内容
技术问题本发明选择SIP作为实现P2P NAT穿越的通信协议,该方法适 用于Full Core NAT, Restrict Core NAT禾Q Port Restrict Core NAT,尚不适用于 Symmetric NAT, Symmetric NAT可以通过TURN方法实现穿越。
UDP穿越NAT过程中使用STUN协议探测映射后的公网地址,该方案在笔 者参与的IP-PBX系统中已成功使用;TCP穿越NAT过程中则使用STUNT协议探测映射后的公网地址,TCP的NAT穿越受很多外界条件的制约,目前还尚未 成熟。
技术方案本发明提出了一种基于SIP的UDP/TCP穿越NAT的方案。 (1)基于SIP的UDP穿越NAT方案
UDP的NAT穿越相比TCP来说要简单些,根据通信双方是否都位于NAT内部, 可分为三种情况讨论 一、通信一方在NAT内部,另一方在公网上;二、通信双 方分别位于两个不同的NAT内;三、通信双方位于同一个NAT内。其中,当通信 双方位于两个不同NAT内时,交互过程最为复杂。本文就以这种情况介绍基于SIP 的UDP穿越NAT方案(其他两者情况也可使用该方案实现NAT的穿透)。该情况 的网络拓扑结构如附图1所示,NAT设备N和NAT设备M把两个不同的私网连接 到公网上(图中只画出了一台STUN服务器,实际应用中,两主机可以选择不同 的STUN服务器),公网上的SIP代理服务器用于中转HostA和HostB之间的SIP 消息,以协调NAT穿越中的消息流。
在通信之甜通信双方通过与公网上的STUN服务器的通信,可以获得某个内 网传输层地址经NAT映射后的地址,然后通过SIP消息(如INVITE消息),经SIP 服务器中转,把映射后的本机传输层地址告诉对方。此时,通信双方即可向该传 输层地址发送UDP消息,实现不同NAT内两主机间的直接通信。山于UDP包不需 要通过其他服务器中转,所以传送效率高,时延小。Skype软件就是通过类似的 方法实现不同NAT内主机间的语音通信的。
该方案的具体流程如附图2所示,在流程1中,通信双方HostA和Hos但通 过SIP消息的交互,表明建立通信的意图。在流程2中,通过和STUN服务器的 交互分别获得各自经NAT映射后的传输层地址,如主机HostA〈a,p〉经NAT设备 N映射后的传输层地址为〈A,P〉,主机HostB〈b,q〉经NAT设备M映射后的传输层 地址为〈B,Q〉。在流程3中,主机HostA和HostB通过SIP消息互通映射后的地 址。最后,在流程4中,由于已获得对方的映射地址,此时可以直接通过该地址发送 UDP包,实现端到端的UDP通信。
通信双方HostA和HostB如果位于同一个NAT内,则NAT设备必须支持环 回(HairPin)。环回是指HostA数据包发送的某传输层地址是同一个NAT内的 HostB经NAT映射后的地址。目甜,很多NAT设备并不支持此功能。但是,在涉及到多层NAT的穿越时,对环回的支持又是必需的。很多NAT设备制造商都 已经意识到了这点,越来越多的NAT将支持该特性。
在流程4中HostA和HostB已经向对方映射后的传输层地址发送UDP包,在各Q的 NAT上会有相应的记录,所以对方的数据包能顺利穿透NAT。在HostA和Hos但之间建立 单向通信时,如〈b,q〉发送数据包到〈a,p、则在HostB向HostA发送数据包之前,HostA必须先 向地址〈B,Q〉发送一个任意UDP包,川T在NAT设备N上打开一个入口 ,该技术就是所谓 的UDP打孔(puncture)。 (2)基于SIP的TCP穿越NAT方案
现有的TCP NAT穿越方案目前,TCP穿越NAT的方法主要有以下两种一 种方法是不同NAT内的两个主机同时建立TCP连接,该方法需要某个TCP端口既 作为监听端口又作为主动连接端口,微软的操作系统并不支持这一特性,因此该 方案在Windows操作系统下很难实现;另--种常用的方法是允许NAT设备内的主 机在NAT设备上建立明确的地址映射,如采用UPnP协议。但这种方法的缺点是 NAT设备必须支持UPnP等协议,否则P2P应用软件丌发者也无能为力。
我们的方案由于不同NAT内的两个主机同时建立TCP连接实现起来有很多 限制条件,笔者通过改造该方案使它更普遍地应用于各种环境。TCP的NAT穿越 相比UDP来说要复杂很多,因为TCP在传送数据之前先要通过三次握手建立连接。 在UDP的穿越中我们使用STUN协议预测UDP的映射端口,在TCP的穿越中我们使 用ST潔T协议来实现。STUNT是STUN的增强版本,用于预测TCP传输层地址经 NAT映射后的地址。TCP的NAT穿越网络拓扑结构与UDP的相类似(如图5所示), 只是在TCP的NAT穿越时,使用了 STUNT服务器,而非STUN服务器。
该方案的消息流程如图7所示,主机HostA和HostB在NAT设备看来都是TCP 连接的主动发起方,NAT设备不会阻碍任何数据包的传送。我们使用STUNT服务 器来获得TCP经NAT映射后的端口 ,与STUN服务器一样,STUNT服务器也必须 放置在公网上,所不同的是,STUNT服务器需要具备伪造IP包源地址的能力。 SIP代理服务器也放置在公网上,用于中转HostA和HostB之间的SIP消息,以 协调NAT穿越中的消息流。
整个TCP的穿越过程对A和B來说是对称的,我们就从A的角度来描述这个 流程。在附图3中,实线代表用于TCP三次握手的数据包,虚线代表与STUNT服务器和SIP代理服务器交互的数据包。在流程1中,HostA和HostB通过SIP 消息的交互,表明建立通信的意图。在流程2中,两主机通过和STUNT服务器的 交互获得经映射后的传输层地址,如主机HostA〈a, p〉经NAT N映射后的传输层地 址为〈A, P〉, HostB〈b, q〉经NAT M映射后的传输层地址为〈B, Q〉。在流程3中,主机 HostA和HostB通过S工P消息互通各自映射后的地址。HostA在收到HostB的映 射地址后,在流程4中向该地址发送SYN数据包。该SYN数据包有较低的TTL 值,确保SYN包能够穿过NAT设备N,而到达不了 NAT设备M (因为如果该SYN 包到达了 NAT设备M, M可能会关闭由主机HostB发出的SYN包打丌的NAT孔)。 在流程5中,主机HostA通过RAW socket获得流程4中SYN包中的内容,通过 SIP消息告诉主机HostB;同样,主机HostB也会把自己SYN包中的内容,通过 SIP消息告诉HostA。在流程6中,主机HostA把HostA和HostB发出的SYN包 中的内容一起发给STUNT服务器。在流程7中,STUNT服务器在收到该消息后, 就可以根据HostA和HostB发出的SYN包中的内容,伪造SYNACK包发往HostA, 该包的源地址伪造成HostB经NAT设备M映射后的地址,同时seq值伪造成HostB 发出的SYN包的seq值,把ack值伪造成HostA发出的SYN包的ask值加1。这 样,该伪造后的数据包经过NAT设备N到达HostA, HostA的操作系统以为该数 据包是发送SYN包后接收到的相应SYNACK包,HostA接着发送ACK数据包(流程 8),这个ACK数据包的TTL值被设成默认值,以确保它能够到达HostB,这样整 个TCP的三次握手就完成了, HostA和HostB就可以相互直接发送数据了 。


图1是通信双方位于两不同NAT内的网络拓扑。 图2是UDP穿越NAT方案流程。 图3是TCP穿越NAT方案流程。
权利要求
1.基于SIP的UDP穿越NAT方案,其基本流程为(1)通信双方HostA和HostB通过SIP消息的交互,表明建立通信的意图。(2)通过和STUN服务器的交互分别获得各自经NAT映射后的传输层地址,如主机HostA<a,p>经NAT设备N映射后的传输层地址为<A,P>,主机HostB<b,q>经NAT设备M映射后的传输层地址为<B,Q>。(3)主机HostA和HostB通过SIP消息互通映射后的地址。(4)由于已获得对方的映射地址,此时可以直接通过该地址发送UDP包,实现端到端的UDP通信。方法流程图
2. 基于SIP的TCP穿越NAT方案,其基本流程为(1) HostA和HostB通过SIP消息的交互,表明建立通信的意图。(2) 两主机通过和STUNT服务器的交互获得经映射后的传输层地址,如主机 HostA〈a,p〉经NAT N映射后的传输层地址头〈A,P、HostB〈b,q〉经NAT M映射后 的传输层地址为〈B,Q〉。(3) 主机HostA和HostB通过SIP消息互通各自映射后的地址。HostA在收到 HostB的映射地址后,(4) 向该地址发送SYN数据包。该SYN数据包有较低的TTL值,确保SYN 包能够穿过NAT设备N,而到达不了NAT设备M (因为如果该SYN包到达了NAT 设备M, M可能会关闭由主机HostB发出的SYN包打开的NAT孔)。(5) 主机HostA通过RAW socket获得(4)中SYN包中的内容,通过SIP消 息告诉主机HostB;同样,主机HostB也会把自己SYN包中的内容,通过SIP消息 告诉HostA。(6) 主机HostA把HostA和HostB发出的SYN包中的内容一起发给STUNT服务器。(7) STUNT服务器在收到该消息后,就可以根据HostA和HostB发出的SYN 包中的内容,伪造SYNACK包发往HostA,该包的源地址伪造成HostB经NAT设备M映射后的地址,同时seq值伪造成HostB发出的SYN包的seq值,把ack值伪造 成HostA发出的SYN包的ack值加1 。(8)这样,该伪造后的数据包经过NAT设备N到达HostA, HostA的操作 系统以为该数据包是发送SYN包后接收到的相应SYNACK包,HostA接着发送 ACK数据包,这个ACK数据包的TTL值被设成默认值,以确保它能够到达 HostB。
全文摘要
本文针对目前越来越多的P2P应用,给出了P2P软件穿透NAT的方法。很多P2P应用使用SIP协议作为通信协议,因此本文使用SIP协议作为NAT穿越时的信息交互协议,具有很大的现实意义。对于P2P的NAT穿越的研究,用于UDP穿越NAT设备的STUN协议已比较成熟,该协议被广泛应用在Skype等很多P2P软件中,本文结合STUN协议和SIP协议给出了UDP的NAT穿越解决方案。
文档编号H04L12/58GK101599992SQ20091002729
公开日2009年12月9日 申请日期2009年5月27日 优先权日2009年5月27日
发明者丁元彬, 张顺颐, 攀 王, 颜学智 申请人:南京欣网视讯科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1