专利名称::一种基于pcp协议的tcpnat穿越方法
技术领域:
:本发明涉及一种基于PCP(PeercastProtocol)协议的TCPNAT5穿越方法c
背景技术:
:目前有许多P2P视频播放软件是基于Peercast开发实现的,如浙江电信目前使用的Tvants视频播放软件,Peercast是由国外开发的开源P2P流媒体软件,Peercast自定义了PCP(PeercastProtocol)io协议,Peercast之间的媒体数据和控制消息均通过PCJ3协议传递,PCP协议是建立在TCP/UDP传输层上的应用层协议,目前PCP协议使用TCP传输层协议,在当前Internet网络环境中存在大量的NAT(NetworkAddressTranslation)设备,创建了逻辑上分离的区域,使得处于NAT后的对等节点不能直接进行连接和通信,因此,在基于15Peercast上开发的视频播放软件都会面临TCPNAT穿越的问题。
发明内容本发明为了解决上述问题,在研究TCPNAT穿越的各种解决方案以及PCP协议的基础上,提出了一种可靠的基于PCP协议的TCPNAT穿越方法。本发明利用了TCPNAT穿越实现原理和对PCP协议的扩展,20通过注册、NAT类型检测、端口预测、互相交换NAT映射IP地址和Port端口号、发起连接方打洞以及被连接方穿洞几个关键步骤来实现两私网内主机之间的连接与通信,其实现原理如下图所示,其具体过程如下1)、首先由被连接方先连接NAT穿越服务器,建立注册通道。通过该通道使用标识本机的ID号来完成注册,注册完后如果以前没有进行NAT类型检测或者发现NAT配置有变更,则需要进行NAT类型检测,检测过程如下5被连接方向NAT穿越服务器连续发起四次连接,建立回响通道。NAT服务器通过该通道分别返回四次连接对应的NATN映射IP地址和端口号,被连接方对返回的结果进行分析判断并做记录予以保存,检测完之后等待接收发起连接方的连接请求;2)、发起连接方也需要如上述一样完成注册、NAT类型检测并io分析判断和记录,接着发起连接方连接NAT穿越服务器,建立通信通道,发起连接方通过该通道发送连接请求;3)、NAT穿越服务器在接收到发起连接方的连接请求后,分别向发起连接方和被连接方发送建立交换通道所需要的IP地址和Port端口号,发起连接方接收到之后立即进行端口预测并将预测的NATM15映射IP地址和端口号通过交换通道发送给NAT穿越服务器,被连接方同时也完成同样的动作。在NAT穿越服务器分别接收到NATM和NATN映射的IP地址和Port端口号之后,通过交换通道分别将NATN映射的IP地址和Port端口号发送给发起连接方,将NATM映射的IP地址和Port端口号发送给被连接方;204)、发起连接方在收到对方NATN映射的IP地址和Port端口号之后立即向被连接方发起连接,也即开始打洞。打洞成功后在本地监听,等待被连接方的连接请求;5)、被连接方在接收到对方NATM映射的IP地址和Port端口号之后立即向发起连接方发起连接,也即开始穿洞。穿洞成功后,发起连接方会向被连接方发送确认ACK包,这样就实现了双方的连接和通信。<formula>formulaseeoriginaldocumentpage7</formula><table>tableseeoriginaldocumentpage7</column></row><table>在实际应用中将上述TCPNAT穿越实现原理与PCP扩展协议相结合,就可以实现基于PCP协议的TCPNAT穿越,所谓PCP协议,也就是PeercastProtocol,是Peercast用来在节点间传送媒体数据包和各种控制消息所自定义的协议,该协议是建立在TCP/UDP协议上的应用层协议,目前PCP协议使用传输层协议,为实现基于PCP协议的TCPNAT穿越需要对PCP协议进行扩展,扩展后的PCP协议栈如下图所示:PCTHTTP(穿洞消息〕HTTP(打洞消息)HTTP(消息和数据〕TCP/UDPIP一条是打洞消息,另一条是穿PCP扩展协议主要是增加了两条消息5洞消息,如下所示打洞消息0PENH0LE*HTTP/1.1PEERID:对方主机ID号CHANID:频道ID号10穿洞消息THROUGHHOLE*HTTP/1.1GROUP:组号HOPS:跳数TTL:延时15DESTID:目的主机ID号FROMID:源主机ID号CHANID:频道ID号VERSION:版本号这两条消息被封装在HTTP协议中分别被单播和广播发送-TCPNAT穿越实现原理和PCP扩展协议相结合后,其具体步骤如下节点A要播放某一频道时,会向流媒体服务器发送频道请求。流媒体服务器收到该请求后,先进行判断节点A是否存在防火墙或处于5NATM之后,随后判断本机是否可以为该节点提供媒体数据,如果流媒体服务器不能提供媒体数据,则流媒体服务器将从该频道的节点列表中选择一节点,如果选中的该节点也处于NAT或防火墙之后,则向节点B等发送广播穿洞请求,延时N秒后向节点A单播打洞请求消息,节点B接收到广播穿洞请求消息后,判断该消息是否发送给本机的,10如果是,则借助NAT穿越服务器完成注册和NAT类型检测,之后等待节点A打洞完成,节点A接收到打洞请求消息后,借助NAT穿越服务器完成注册、NAT类型检测、端口预测、与节点B互换NAT映射IP地址和Port端口号,之后开始打洞,成功之后在本地进行监听,节点B在节点A打洞完成后开始穿洞,也即向节点A发起连接,连接建立15后两节点之间就可以开始传输PCP消息和媒体数据,为了更好的说明这个实现过程,特将本方法绘制成图,实现过程如下图所示节点A升始打洞,打洞f功C开始监听NAT设备M发送频近诺求发送打洞请求流媒体服务器SNAT设备N消息和数一交换^J断是否可以提供媒休源广播穿洞*求延时N秒向对力'发起连接连接逑立消总和数据交换等待对方打洞完成1015其中节点A和节点B分别'位于NATM和NATN之后的两私网内的主机,节点B和流媒体服务器已经建立连接并已能够正常发送和接收消息和媒体数据。本发明利用TCPNAT穿越实现原理以及对PCP协议的扩展,实现了基于PCP协议的TCPNAT穿越,也即实现了两私网内主机之间的连接和PCP消息与媒体数据的交换。具体实施方式实施例1假设客户端A做为发起连接方,客户端B做为被连接方,服务端S做为NAT穿越服务器,实现TCPNAT穿越的过程可分为以下五步1)、客户端B先连接服务端S,建立注册通道,通过该通道使用标识本机的ID号来完成注册,注册完后如果以前没有进行NAT类型检测或者发现NAT配置有变更,则需要进行NAT类型检测,检测过程如下客户端B向服务器S连续发起四次连接,建立回响通道,服务器S通过该通道分别返回四次连接对应的NATN映射IP地址和端口号。户端B等待接收客户端A的连接请求;52)、客户端A同样需要完成注册、NAT类型检测并分析判断和记录,接着客户端A连接服务端S,建立通信通道,客户端通过该通道发送连接请求;3)、服务端S在接收到客户端A发送的连接请求后,分别向客户端A和客户端B发送建立交换通道所需要的IP地址和Port端口号,10客户端A接收到之后立即进行端口预测并将预测的NATM映射IP和端口号通过交换通道发送给服务端S,客户端B也完成同样的动作,在服务端分别接收到NATM和NATN映射的IP地址和Port端口号之后,通过交换通道分别将NATN映射的IP地址和Port端口号发送给客户端A,将NATM映射的IP地址和Port端口号发送给客户端B,15这样就为两客户端实现了交换各自NAT映射IP地址和Port端口号的目的;4)、客户端A在收到对方NATN映射的IP地址和Port端口号之后立即向客户端B发起连接,也即开始打洞,打洞成功后在本地监听客户端B的连接请求;205)、客户端B在接收到对方NATM映射的IP和Port之后立即向客户端A发起连接,也即开始穿洞。穿洞成功后,客户端A会发送确认ACK包给客户端B,这样双方的连接就建立起来了,之后就可以通信了。<image>imageseeoriginaldocumentpage12</image>实施例2将上述TCPNAT实现穿越原理与PCP协议相结合来实现TCPNAT穿越,其穿越过程如下图所示。其中节点A和节点B分别位于NATM和NATN之后的两私网内的主机,S是流媒体服务器,节点B和流媒体服务器S已经建立连接并已能够正常发送和接收消息与媒体数据,实现过程如下当节点A要播放某一频道时,会向流媒体服务器S发送频道请求。服务器S收到该请求后,先进行判断节点A是否存在防火墙或处于NATM之后,随后判断本机是否可以为该节点提供媒体数据。如果服务器S不能提供,则从该频道的节点列表中选择一节点。如果选中的该节点也处于NAT或防火墙之后,则向B等节点发送广播穿洞请求。5延时N秒后向节点A单播打洞请求消息。节点B接收到广播穿洞请求消息后,判断该消息是否发送给本机的,如果是,则借助NAT穿越服务器完成注册和NAT类型检测,之后等待对方打洞完成。节点A接收到打洞请求消息后,借助NAT穿越服务器完成注册、NAT类型检测、端口预测、与节点B互换NAT映射IP地址和Port端口号,之后开始io打洞,打洞成功之后在本地进行监听。节点B在节点A打洞完成后开始穿洞,也即向节点A发起连接。连接建立后两节点之间就可以传输PCP消息和媒体数据。<image>imageseeoriginaldocumentpage13</image>权利要求1.一种基于PCP(PeercastProtocol)协议的TCPNAT(NetworkAddressTranslation)穿越方法,其特征在于包括注册、NAT类型检测、端口预测、互相交换NAT映射IP地址和Port端口号、发起连接方打洞以及被连接方穿洞几个步骤。2、根据权利要求1所述的一种基于PCP协议的TCPNAT穿越方法,其特征在于包括如下步骤1)、首先由被连接方先连接NAT穿越服务器,建立注册通道,通过该通道使用标识本机的ID号来完成注册,注册完后如果以前没io有进行NAT类型检测或者发现NAT配置有变更,则需要进行NAT类型检测,检测过程如下被连接方向NAT穿越服务器连续发起四次连接,建立回响通道。NAT穿越服务器通过该通道分别返回四次连接对应的NAT映射IP地址和端口号,被连接方对返回的结果进行分析判断并做记录予以保存,15检测完后,被连接方等待接收发起连接方的连接请求;2)、发起连接方也需要如上述一样完成注册、NAT类型检测并分析判断和记录,之后发起连接方连接NAT穿越服务器,建立通信通道。发起连接方通过该通道发送连接请求;3)、NAT穿越服务器在接收到发起连接方的连接请求后,分别向20发起连接方和被连接方发送建立交换通道所需要的IP地址和Port端口号,发起连接方接收到之后立即进行端口预测并将预测的NATM映射IP地址和端口号通过交换通道发送给NAT穿越服务器,被连接方同时也完成同样的动作,在NAT穿越服务器分别接收到NATM和NATN映射的IP地址和Port端口号之后,通过交换通道分别将NATN映射的IP地址和Port端口号发送给发起连接方,将NATM映射的IP地址和Port端口号发送给被连接方,这样就达到了互换NAT映射IP地5址和Port端口号的目的;4)、发起连接方在收到对方NATN映射的IP地址和Port端口之后立即向被连接方发起连接,也即开始打洞,打洞成功后在本地监听被连接方的连接请求;5)、被连接方在接收到对方NATM映射的IP地址和Port端口io号之后立即向发起连接方发起连接,也即开始穿洞。穿洞成功后,发起连接方会发送确认ACK包给被连接方,这样就实现了两私网内主机之间的连接。3、一种基于PCP协议的TCPNAT穿越的方法,其特征在于与PCP协议的结合。4、如权利要求3所述的一种基于PCP协议的TCPNAT穿越的方法,其特征在于与PCP协议的结合,其过程如下节点A和节点B分别位于NATM和NATN之后的两私网内的主机,节点B和流媒体服务器已经建立连接并已能够正常发送和接收消息和媒体数据。节点A要播放某一频道时,会向流媒体服务器发送频道请求,服务器收到该请求后,先进行判断节点A是否存在防火墙或处于NATM之后,随后判断本机是否可以为该节点提供媒体数据,如果流媒体服务器不能提供媒体数据,则流媒体服务器将从该频道的节点列表中选择一节点,如果选中的该节点也处于NAT或防火墙之后,则流媒体服务器向B等节点发送广播穿洞请求消息,延时N秒后向节点A单播打洞请求消息,节点B接收到广播穿洞请求消息后,判断该消息是否发送给本机的,如果是,则通过NAT穿越服务器完成注册和NAT5类型检测,之后等待对方打洞完成,节点A接收到打洞请求消息后,通过NAT穿越服务器完成注册、NAT类型检测、端口预测、与节点B互换NAT映射IP地址和Port端口号,之后开始打洞,成功之后在本地进行监听,节点B在节点A打洞完成后开始穿洞,也即向节点A发起连接,连接建立后两节点之间就可以开始传输PCP消息和媒体数据。全文摘要本发明公开了一种基于PCP(PeercastProtocol)协议的TCPNAT(NetworkAddressTranslation)穿越的方法,本发明利用NAT类型检测和端口预测、NAT穿越服务器的设计以及PCP协议扩展这三个关键技术,将TCPNAT穿越实现原理与PCP扩展协议相结合,通过注册、检测NAT类型、预测端口、互换NAT映射IP地址和Port端口号、发起连接方打洞以及被连接方穿洞几个关键步骤,实现了两私网内主机之间的连接和消息与媒体数据的交换。文档编号H04L12/56GK101374141SQ20071007097公开日2009年2月25日申请日期2007年8月23日优先权日2007年8月23日发明者叶挺群,宋革联,杨晓波,胡伟中,江袁,邢小良,郑金荣,金朝晖,炜黄,轩龚申请人:浙江省电信有限公司