CN101442492A - 一种p2p网络中实现nat穿越的方法和系统 - Google Patents

一种p2p网络中实现nat穿越的方法和系统 Download PDF

Info

Publication number
CN101442492A
CN101442492A CNA2008102411760A CN200810241176A CN101442492A CN 101442492 A CN101442492 A CN 101442492A CN A2008102411760 A CNA2008102411760 A CN A2008102411760A CN 200810241176 A CN200810241176 A CN 200810241176A CN 101442492 A CN101442492 A CN 101442492A
Authority
CN
China
Prior art keywords
node
message
nat
udp
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008102411760A
Other languages
English (en)
Other versions
CN101442492B (zh
Inventor
马晨光
杨平改
李军
刘靖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Silicon Valley innovation Digital Technology Co., Ltd.
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Priority to CN2008102411760A priority Critical patent/CN101442492B/zh
Publication of CN101442492A publication Critical patent/CN101442492A/zh
Application granted granted Critical
Publication of CN101442492B publication Critical patent/CN101442492B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种P2P网络中实现NAT穿越的方法和系统,包括:用户节点向NAT服务器进行注册;用户节点通过与NAT服务器交互,确定该用户节点的网络类型为公网中节点或者内网中节点;如果用户节点为公网中节点,通过让对方节点进行反连来实现NAT穿越;如果用户节点为内网中节点,通过内网内广播确定对方节点与本用户节点不在同一内网,使用UDP进行打洞并模拟TCP方式来实现NAT穿越。本发明的P2P网络环境下NAT穿越的方法和系统较之现有的NAT穿越系统相比具有可靠、高效的特点。

Description

一种P2P网络中实现NAT穿越的方法和系统
技术领域
本发明涉及网络地址转换(Network Address Translator,NAT)技术领域,更具体地,本发明涉及一种P2P网络中实现NAT穿越的方法和系统。
背景技术
随着计算机性能的不断提高和网络技术的不断发展,客户机-服务器通信模式在国际互联网中的统治地位已被打破,点对点(Peer-to-Peer,P2P)的通信模式被越来越多的网络应用所使用。在P2P通信模式中,主机之间可以直接通信以实现资源共享和信息交换,这给用户之间的沟通和交流提供了更大的便利。P2P也称为对等连接或对等网络,在这种网络中,所有通信节点的地位都是平等的,每个节点都扮演着客户机和服务器的双重角色,节点之间通过直接通信实现文件信息、处理器运算能力、存储空间等资源的共享。
然而,在目前的IPv4网络环境中,由于网络地址匮乏而广泛存在的NAT设备使得处于不同内部私有网络中的主机难以进行直接通信,这在很大程度上限制了P2P的应用和发展。NAT是一种把内部网络(简称内网)私有IP地址转换成外部网络(简称公网)公共IP地址的技术,它使得一个机构内的多台主机可以共享Internet连接,以一个(或少数几个)公网IP地址连接到Internet。NAT的存在给处于不同内网的主机之间进行通信带来了障碍。NAT穿越技术就是通过采用一定的技术措施而使得处于不同内网的主机间可以实现互联的技术。常用的NAT穿越技术包括STUN(Simple Traversal of UserDatagram Protocol through Network Address Translators)协议、UDP穿越NAT、TCP穿越NAT等。目前所应用的NAT穿越技术主要是UDP打洞技术,它侧重于在处于两个不同的内网之间建立其UDP连接,使其可以实现通信。
使用UDP打洞技术实现NAT穿越的P2P通信方案中,由于不同内网用户间建立的是UDP连接,并不考虑流控制和错误控制,在收到坏的数据段之后也不会进行重传,这使得不同内网用户之间不能建立可靠的连接。因此,从P2P应用的层面来看,公网用户之间可以通过TCP建立起可靠连接,而不同内网用户之间由于需要用UDP进行NAT穿越而不能建立起可靠连接,也不能实现可靠通信。
发明内容
为克服现有P2P网络应用中不同内网间通信可靠性差、效率低的缺陷,本发明提出一种P2P网络中实现NAT穿越的方法和系统。
根据本发明的一个方面,提出了一种P2P网络中实现NAT穿越的方法,包括:
步骤10)、用户节点通过向NAT服务器发送包括用户节点信息的数据报文在NAT服务器上注册;
步骤20)、用户节点与NAT服务器交互,通过比较交互数据包中的地址信息,确定该用户节点的网络类型为公网中节点或者内网中节点;
步骤30)、如果用户节点为公网中节点,通过让对方节点进行反连来实现NAT穿越;如果用户节点为内网中节点,通过内网内广播确定对方节点与本用户节点不在同一内网,使用UDP进行打洞并模拟TCP方式来实现NAT穿越。
其中,步骤10)还包括:每个用户节点通过确定能与对方节点建立TCP连接而与对方节点进行TCP连接通信。
其中,步骤10)包括:
步骤110)、用户节点发送包括该用户节点ID的数据报文给NAT服务器;
步骤120)、NAT服务器记录所收到的用户节点ID,提取并保存所接收的数据报文中的用户节点IP地址和UDP端口号以及用户节点ID;
步骤130)、NAT服务器保存完成后,向用户节点发送注册成功的消息。
其中,步骤20)包括:
步骤210)、NAT服务器收到用户节点发送的一个空报文后构造包括空报文中的源IP地址和UDP端口号的一个数据包,发送到用户节点;
步骤220)、用户节点收到NAT服务器返回的数据包后,比较其中的IP地址和本用户节点的IP地址,若相等,则用户节点为公网用户,否则为内网用户。
其中,步骤30)中,通过让对方节点进行反连的步骤包括:
步骤310)、用户节点给NAT服务器发送请求反连的消息,让NAT服务器转告通信对方节点;
步骤320)、NAT服务器根据用户节点ID查找到对方节点的IP地址和端口号,然后给其发送反连消息,告知对方要反连的IP地址和端口号;
步骤330)、对方节点收到请求消息后,向所述用户节点发起TCP连接,进行数据传输。
其中,步骤30)还包括:用户节点在内网中发送广播消息,查询与自己身处同一内网的其他用户节点,直接与其建立TCP连接。
其中,步骤30)中,使用UDP打洞的步骤包括:
步骤310’)、用户节点给NAT服务器发送打洞请求报文A,请求通信对方节点进行UDP打洞,报文A的内容包括用户节点ID和通信对方的节点ID;
步骤320’)、NAT服务器收到报文A后,查找节点ID对应的IP地址和端口号,并给双方节点均发送打洞命令报文B,其中包含对方的IP地址和端口号;
步骤330’)、用户节点和通信对方节点收到报文B后,发送ping消息给NAT服务器所指定的报文B中的对方IP地址和端口号;
步骤340’)、若其中一方收到另一方发来的ping消息后,将进行ping回复,收到ping回复消息的节点确认打洞成功。
其中,步骤30)中,使用UDP模拟TCP方式的步骤包括:
步骤350’)、使用UDP模拟TCP通信,在应用层实现基于UDP报文的超时与重传机制、慢启动机制、拥塞避免机制、快速重传与快速恢复机制。
根据本发明的另一方面,提出了一种P2P网络中实现NAT穿越的系统,包括:
终端、NAT服务器和索引服务器;
其中,所述终端用于向NAT服务器进行注册,请求通信对方节点进行反连或者使用UDP进行打洞并模拟TCP方式实现NAT穿越;
所述NAT服务器用于保存所述终端的注册信息,转发终端的打洞请求;
所述索引服务器用于为所述终端提供可连接的peer的列表信息。
其中,所述终端包括:
TCP反向连接模块,用于终端处于公网而对方终端处于内网时建立TCP连接;
UDP打洞模块,利用UDP打洞技术,使得当两个终端节点处于不同NAT内的情况下建立UDP连接;
内网发现模块,用于处于同一内网的终端建立TCP直连;
传输模块,用于UDP模拟TCP进行数据传输。
其中,所述终端发送包括终端节点ID的数据报文给NAT服务器;NAT服务器记录所收到的终端节点ID,提取并保存所接收的数据报文中的节点IP地址和UDP端口号以及终端节点ID;NAT服务器保存完成后,向所述终端发送注册成功的消息。
其中,所述TCP反向连接模块用于给NAT服务器发送终端请求反连的消息,让NAT服务器转告通信对方节点;NAT服务器根据终端节点ID查找到对方节点的IP地址和端口号,然后给其发送反连消息,告知对方节点要反连的IP地址和端口号;对方节点收到请求消息后,向所述终端发起TCP连接,进行数据传输。
其中,所述UDP打洞模块给NAT服务器发送打洞请求报文A,请求通信对方节点进行UDP打洞;NAT服务器收到报文A后,查找终端节点ID对应的IP地址和端口号,并给双方节点均发送打洞命令报文B;终端节点和通信对方节点收到报文B后,发送ping消息给NAT服务器所指定的报文B中的对方IP地址和端口号;若其中一方收到另一方发来的ping消息后,将进行ping回复,收到ping回复消息的终端节点确认打洞成功。
其中,所述传输模块在应用层实现基于UDP报文的超时与重传机制、慢启动机制、拥塞避免机制、快速重传与快速恢复机制。
本发明的P2P网络环境下NAT穿越的方法和系统较之现有的NAT穿越系统相比具有可靠、高效的特点:其中可靠性体现在本发明的内网发现特征和用UDP模拟TCP的特征;高效性体现在同一内网用户进行TCP直连而绕过NAT穿越这一步,从而实现数据高速可靠的传输。本发明的这些特性能够有力的推动P2P应用,尤其是P2P在文件下载、视频点播等方面的应用。
附图说明
图1是根据本发明的P2P网络中的NAT穿越方法的流程;
图2是根据本发明的P2P网络中的NAT穿越系统示意图。
具体实施方式
下面结合附图和具体实施例对本发明提供的一种P2P网络中实现NAT穿越的方法和系统进行详细描述。
如图1所示,在本发明的一个实施例中,示出P2P网络中的NAT穿越方法的流程图。
如图1所示,在步骤S10中,所有用户节点向NAT服务器上进行注册。
NAT服务器主要用来登记用户的注册信息,转发用户的打洞请求。
下面详细描述步骤S10中向NAT服务器进行注册的过程,包括如下步骤:
在步骤S101中,用户节点发送包括自己的节点ID(通常是采用一定长度的随机值)的数据报文给NAT服务器;
在步骤S102中,NAT服务器记录每个收到的用户节点ID,同时提取所接收的数据报文中的用户节点IP地址和UDP端口号,并把(ID,IP,端口号)这三项进行保存;
此处IP地址和端口号是用户对外的IP地址和端口号。若用户处于公网,则此IP地址和端口号就是用户本身的IP地址和端口号;若用户处于NAT内,则此IP地址是NAT出口的对外的IP地址和端口号。比如用户处于内网,其IP地址为10.21.5.20,端口号为6877,其NAT对外的IP地址为202.206.5.65,NAT分配给此用户的端口号为6550,则NAT服务器收到并提取的IP地址为202.206.5.65,端口是6550。
在步骤S103中,保存完成后,NAT服务器向用户节点发送注册成功的消息。
步骤S20,每个用户节点首先试图和对方节点建立TCP连接,若成功,则不需要进行NAT穿越,结束;若失败,进行下一步。
其中,对方节点socket处于监听状态,本节点调用系统函数connect与对方节点建立连接,若connect返回0则表示连接成功,connect返回值小于0则表明连接失败。
步骤S30,用户节点判断自己所在网络的网络类型,网络类型是指用户节点处于公网中还是处于内网中。
下面详细叙述步骤S30中用户节点判断自己所在的网络类型的过程,其包括如下步骤:
在步骤S301中,用户节点首先给NAT服务器发送一个空报文,NAT服务器收到后构造一个数据包,把刚收到空报文中的源IP地址和端口号填写在数据包中,并将其发送回用户节点;
在步骤S302中,用户节点收到NAT服务器返回的数据包后,查看其中的IP地址,然后从本机获得自己的IP地址,两者进行比较,若相等,则用户为公网用户,否则为内网用户。
如上所述,假设NAT服务器收到的IP地址为202.206.5.65,端口是6550。NAT服务器把这个地址返回给用户节点。用户节点提取出这个地址,并获得本机的地址为10.21.5.20,两者不相等,则判断其自身处于NAT内。
步骤S40,用户节点根据自己所处的网络类型选择不同的处理方法,使得通信双方间可以建立连接并完成可靠通信。
下面详细叙述步骤S40根据网络类型的不同建立起连接的过程,包括如下步骤:
步骤S401,若用户节点判定自己处于公网,则需要让对方进行反连。首先用户节点给NAT服务器发送请求反连的消息,让NAT服务器转告通信对方节点,请求对方进行反连。请求反连的消息中包括用户自身节点ID、TCP监听端口号和通信对方节点ID。NAT服务器根据节点ID查找到对方的IP地址和端口号,然后给其发送反连消息,告知对方要反连的IP地址和端口号。另一方收到此消息后,就可以发起TCP连接,进行数据的可靠传输。
这种情况下的NAT穿越属于TCP NAT穿越。比如A处于公网,B处于内网。假设A的IP地址为202.202.4.10,其UDP的监听端口号为7880,TCP的监听端口号为8866,B对外的IP地址是159.226.4.54,端口号为5544。A首先用TCP连接B的对外地址,由于B从来没有给A建立过连接请求,所以此时会被NAT服务器拒绝。然后A发送消息给NAT服务器,请求B反连,并附上自己的IP地址202.202.4.10和它TCP端口8866。NAT服务器存有B的信息,根据B的ID查找到其IP地址为159.226.4.54和端口号5544,NAT服务器向这个地址和端口发送消息,让它向地址202.202.4.10的7880端口发起TCP连接。B的NAT服务器收到消息后转给B,然后B向这个地址发起TCP连接,之后就可以进行TCP数据传输了。
步骤S402,若用户节点判定自己处于内网,则启用内网发现功能,定期的发送内网互联请求报文(包含用户自身节点ID和目前下载任务的标识),即在内网中发送广播消息,看是否有其他用户节点与自己身处同一内网,若通信对方节点与自己身处同一内网,则直接与其内网地址建立起TCP连接,并完成下载任务信息的交互和后续的可靠信息传输,而无需继续进行下述的NAT穿越。由于索引服务器返回的节点IP地址都是公网地址,节点无法根据其判断通信对方节点是否与自己身处同一内网,因此需要启用内网发现功能。
步骤S403,若想要连接的对方节点与自己不在同一内网,则需要使用UDP打洞技术实现NAT穿越,主要是用UDP模拟TCP的方式进行报文的可靠传输。
下面详细叙述步骤S403用UDP进行打洞的过程,包括如下步骤:
步骤S4031,用户节点首先给NAT服务器发送打洞请求报文A,请求通信对方节点进行UDP打洞,报文A的内容包括用户节点ID和通信对方的节点ID;
步骤S4032,NAT服务器收到报文A后,根据其中的两个节点ID查找其对应的IP地址和端口号,并给双方节点均发送打洞命令报文B,其中包含对方的IP地址和端口号;
步骤S4033,用户节点和通信对方节点收到报文B后,进行UDP打洞操作,即发送ping消息给NAT服务器所指定的报文B中包含的对方IP地址和端口号;
上述几个步骤中,假设A和B都处于内网,若A要和B通信,则A先向NAT服务器发送打洞消息,消息中包括A和B在NAT服务器上注册的ID。NAT服务器收到后,根据这两个ID分别查找其对应的IP地址和端口号,假设查到的A的IP地址为159.226.4.5,端口为7885,查到的B的IP地址为202.202.4.64,端口为6655,则NAT服务器向这两个地址和端口分别发送打洞消息。A和B收到后,彼此向对方发送消息。
步骤S4034,若其中一方收到另一方发来的ping消息后,将进行ping回复,收到ping回复消息的节点确认打洞成功。通常,节点会多一次发送ping消息,确保打洞成功。若由于网络原因双方都没有收到ping消息,则返回上一个步骤,重新进行打洞。打洞成功后,进行下一步。
步骤S404,使用UDP模拟TCP的方式进行报文的可靠传输。
下面详细叙述步骤S404用UDP模拟TCP进行信息的可靠传输的过程,包括如下步骤:
步骤S4041,在应用层实现基于UDP报文的超时与重传机制、慢启动机制、拥塞避免机制、快速重传与快速恢复机制(与TCP方式下的该类机制功能相同),即使用UDP模拟TCP通信;
所述TCP的超时与重传机制是TCP协议保证数据可靠性的一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
所述拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh,算法的工作过程如下:
1)对一个给定的连接,初始化swnd为1个报文段,ssthresh为65535个字节。
2)TCP的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送发使用的流量控制,而通告窗口测试接收方进行的流量控制。
3)当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(swnd和接收方通告的窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则cwnd被设置为一个报文段(这就是慢启动)。
4)当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到我们回到当拥塞发生时所处位置的一半的时候才停止,然后转为执行拥塞避免。
所述快速重传与快速恢复算法的过程如下:
1)当收到3个重复的确认时,讲ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的报文段,设置cwnd为ssthresh加上3倍的报文段大小。
2)每次收到另一个重复的确认时,cwnd增加一个报文段大小并发送一个分组(如果新的cwnd允许发送)。
3)当下一个确认新数据的确认到达时,设置cwnd为ssthresh(在第一步中设置的值)。这个确认应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个确认也应该是对丢失的分组和收到的第一个重复的确认之间的所有中间报文段的确认。这一步采用的是拥塞避免,因为当分组丢失时我们讲当前的速率减半。
步骤S4042,进行数据的可靠传输。
在本发明的另一个实施例中,本发明还提供一种P2P网络中的NAT穿越系统,如图2所示,本发明的P2P网络中的NAT穿越系统包括NAT服务器10、终端20和索引服务器30。这几个部分相互协作,实现了P2P环境下的NAT穿越,并可以对数据进行可靠的传输。
NAT服务器10:用于保存用户的注册信息,并转发用户要求打洞的消息;
终端20:需要实现NAT穿越的节点peer。
索引服务器30的作用是给终端节点提供peer列表,在节点要和其他peer建立连接之前,首先确定需要跟哪些peer连接,而索引服务器就是提供可连接的peer的列表信息,列表的每一项包括peer的唯一标识peerID,以及peer的IP地址和端口号。终端得到这些信息后才开始进行注册。
所述终端20包括:
TCP反向连接模块201,用于一个peer处于公网,另一个peer处于内网时peer之间建立TCP连接;
UDP打洞模块202,利用UDP打洞技术,使得当两个peer都处于NAT内的情况下双方可以通信,建立起UDP连接;
内网发现模块203,用于处于同一内网的peer可以相互发现,建立起TCP直连;
传输模块204,用于UDP模拟TCP进行数据传输。
下面结合图2说明本发明的P2P网络中的NAT穿越系统的工作过程。
终端20和索引服务器30交互,从索引服务器获取peer列表,其中包括每个peer的IP地址和端口号。
所有终端节点20向NAT服务器上进行注册。终端节点发送包括自己的节点ID(通常是采用一定长度的随机值)的数据报文给NAT服务器;NAT服务器记录每个收到的终端节点ID,同时提取所接收的数据报文中的终端节点IP地址和UDP端口号,并把(ID,IP,端口号)这三项进行保存;保存完成后,NAT服务器向终端节点发送注册成功的消息。
此处IP地址和端口号是终端对外的IP地址和端口号。若终端处于公网,则此IP地址和端口号就是终端本身的IP地址和端口号;若终端处于NAT内,则此IP地址是NAT出口的对外的IP地址和端口号。
然后终端开始连接列表中给出的IP地址和端口号(这里用的是TCP连接)。若连接不上同时自己处于公网,则在NAT服务器10的协助下进行反连,进入TCP反向连接模块201。终端节点给NAT服务器发送请求反连的消息,让NAT服务器转告通信对方节点,请求对方进行反连。请求反连的消息中包括终端自身节点ID、TCP监听端口号和通信对方节点ID。NAT服务器根据节点ID查找到对方的IP地址和端口号,然后给其发送反连消息,告知对方要反连的IP地址和端口号。另一方收到此消息后,就可以发起TCP连接,进行数据的可靠传输。这种情况下的NAT穿越属于TCP NAT穿越。比如A处于公网,B处于内网。假设A的IP地址为202.202.4.10,其UDP的监听端口号为7880,TCP的监听端口号为8866,B对外的IP地址是159.226.4.54,端口号为5544。A首先用TCP连接B的对外地址,由于B从来没有给A建立过连接请求,所以此时会被NAT服务器拒绝。然后A发送消息给NAT服务器,请求B反连,并附上自己的IP地址202.202.4.10和它TCP端口8866。NAT服务器存有B的信息,根据B的ID查找到其IP地址为159.226.4.54和端口号5544,NAT服务器向这个地址和端口发送消息,让它向地址202.202.4.10的7880端口发起TCP连接。B的NAT服务器收到消息后转给B,然后B向这个地址发起TCP连接,之后就可以进行TCP数据传输了。
若连接不上同时自己处于内网,进入内网发现模块,看对方是否与自己处于同一内网,若是,则进行TCP直连,否则进入UDP打洞模块202,同样也在NAT服务器的协助下进行打洞。打洞成功后进入传输模块204,用UDP模拟TCP的方式进行可靠传输。
在UDP打洞模块202中,终端节点首先给NAT服务器发送打洞请求报文A,请求通信对方节点进行UDP打洞,报文A的内容包括终端节点ID和通信对方的节点ID;NAT服务器收到报文A后,根据其中的两个节点ID查找其对应的IP地址和端口号,并给双方节点均发送打洞命令报文B,其中包含对方的IP地址和端口号;终端节点和通信对方节点收到报文B后,进行UDP打洞操作,即发送ping消息给NAT服务器所指定的报文B中包含的对方IP地址和端口号;假设A和B都处于内网,若A要和B通信,则A先向NAT服务器发送打洞消息,消息中包括A和B在NAT服务器上注册的ID。NAT服务器收到后,根据这两个ID分别查找其对应的IP地址和端口号,假设查到的A的IP地址为159.226.4.5,端口为7885,查到的B的IP地址为202.202.4.64,端口为6655,则NAT服务器向这两个地址和端口分别发送打洞消息。A和B收到后,彼此向对方发送消息。若其中一方收到另一方发来的ping消息后,将进行ping回复,收到ping回复消息的节点确认打洞成功。通常,节点会多一次发送ping消息,确保打洞成功。若由于网络原因双方都没有收到ping消息,则重新进行打洞。
随后,UDP打洞模块202在应用层实现基于UDP报文的超时与重传机制、慢启动机制、拥塞避免机制、快速重传与快速恢复机制(与TCP方式下的该类机制功能相同),即使用UDP模拟TCP通信,具体实现与上述方法中的实现过程相同。
与现有技术相比,本发明在现有UDP穿越方法的基础上,增加了内网发现的功能和用UDP模拟TCP进行传输的功能。内网发现功能可以使终端节点自动发现与自己处于同一内网的其他peer节点,从而跳过后续的NAT穿越步骤,这样既可以保证连接和数据传输的可靠性,又可以提高传输速度。用UDP模拟TCP进行传输功能是在穿透NAT后进行数据传输时,采用在应用层加上类似于TCP保证可靠性的机制,实现数据的可靠传输。较之现有的NAT穿越方法和系统,本发明提出的P2P网络环境下NAT穿越方法和系统不但能够成功穿越NAT,使得处于内网的终端可以真正的建立起点对点的连接,真正实现P2P通信,同时通过采用内网发现和UDP模拟TCP,使得传输数据时内网用户之间可以像公网用户之间一样进程可靠传输,内网终端和公网终端才真正的实现了平等性。此外,处于同一内网的用户可以实现更快、更可靠的传输。这在P2P网络环境下实现诸如文件下载、视频点播等应用时是非常必要,效果也是非常可观的。从而也推动了P2P应用的发展。
最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其他的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。

Claims (14)

1、一种P2P网络中实现NAT穿越的方法,包括:
步骤10)、用户节点通过向NAT服务器发送包括用户节点信息的数据报文在NAT服务器上注册;
步骤20)、用户节点与NAT服务器交互,通过比较交互数据包中的地址信息,确定该用户节点的网络类型为公网中节点或者内网中节点;
步骤30)、如果用户节点为公网中节点,通过让对方节点进行反连来实现NAT穿越;如果用户节点为内网中节点,通过内网内广播确定对方节点与本用户节点不在同一内网,使用UDP进行打洞并模拟TCP方式来实现NAT穿越。
2、权利要求1的方法,其中,步骤10)还包括:每个用户节点通过确定能与对方节点建立TCP连接而与对方节点进行TCP连接通信。
3、权利要求1的方法,其中,步骤10)还包括:
步骤110)、用户节点发送包括该用户节点ID的数据报文给NAT服务器;
步骤120)、NAT服务器记录所收到的用户节点ID,提取并保存所接收的数据报文中的用户节点IP地址和UDP端口号以及用户节点ID;
步骤130)、NAT服务器保存完成后,向用户节点发送注册成功的消息。
4、权利要求1的方法,其中,步骤20)还包括:
步骤210)、NAT服务器收到用户节点发送的一个空报文后构造包括空报文中的源IP地址和UDP端口号的一个数据包,发送到用户节点;
步骤220)、用户节点收到NAT服务器返回的数据包后,比较其中的IP地址和本用户节点的IP地址,若相等,则用户节点为公网用户,否则为内网用户。
5、权利要求1的方法,其中,步骤30)中,通过让对方节点进行反连的步骤包括:
步骤310)、用户节点给NAT服务器发送请求反连的消息,让NAT服务器转告通信对方节点;
步骤320)、NAT服务器根据用户节点ID查找到对方节点的IP地址和端口号,然后给其发送反连消息,告知对方要反连的IP地址和端口号;
步骤330)、对方节点收到请求消息后,向所述用户节点发起TCP连接,进行数据传输。
6、权利要求1的方法,其中,步骤30)还包括:用户节点在内网中发送广播消息,查询与自己身处同一内网的其他用户节点,直接与其建立TCP连接。
7、权利要求1的方法,其中,步骤30)中,使用UDP打洞的步骤包括:
步骤310’)、用户节点给NAT服务器发送打洞请求报文A,请求通信对方节点进行UDP打洞,报文A的内容包括用户节点ID和通信对方的节点ID;
步骤320’)、NAT服务器收到报文A后,查找节点ID对应的IP地址和端口号,并给双方节点均发送打洞命令报文B,其中包含对方的IP地址和端口号;
步骤330’)、用户节点和通信对方节点收到报文B后,发送ping消息给NAT服务器所指定的报文B中的对方IP地址和端口号;
步骤340’)、若其中一方收到另一方发来的ping消息后,将进行ping回复,收到ping回复消息的节点确认打洞成功。
8、权利要求7的方法,其中,使用UDP模拟TCP方式的步骤包括:
步骤350’)、使用UDP模拟TCP通信,在应用层实现基于UDP报文的超时与重传机制、慢启动机制、拥塞避免机制、快速重传与快速恢复机制。
9、一种P2P网络中实现NAT穿越的系统,包括:
终端、NAT服务器和索引服务器;
其中,所述终端用于向NAT服务器进行注册,请求通信对方节点进行反连或者使用UDP进行打洞并模拟TCP方式实现NAT穿越;
所述NAT服务器用于保存所述终端的注册信息,转发终端的打洞请求;
所述索引服务器用于为所述终端提供可连接的peer的列表信息。
10、权利要求9的系统,其中,所述终端包括:
TCP反向连接模块,用于终端处于公网而对方终端处于内网时建立TCP连接;
UDP打洞模块,利用UDP打洞技术,使得当两个终端节点处于不同NAT内的情况下建立UDP连接;
内网发现模块,用于处于同一内网的终端建立TCP直连;
传输模块,用于UDP模拟TCP进行数据传输。
11、权利要求9的系统,其中,所述终端发送包括终端节点ID的数据报文给NAT服务器;NAT服务器记录所收到的终端节点ID,提取并保存所接收的数据报文中的节点IP地址和UDP端口号以及终端节点ID;NAT服务器保存完成后,向所述终端发送注册成功的消息。
12、权利要求10的系统,其中,所述TCP反向连接模块用于给NAT服务器发送终端请求反连的消息,让NAT服务器转告通信对方节点;NAT服务器根据终端节点ID查找到对方节点的IP地址和端口号,然后给其发送反连消息,告知对方节点要反连的IP地址和端口号;对方节点收到请求消息后,向所述终端发起TCP连接,进行数据传输。
13、权利要求10的系统,其中,所述UDP打洞模块给NAT服务器发送打洞请求报文A,请求通信对方节点进行UDP打洞;NAT服务器收到报文A后,查找终端节点ID对应的IP地址和端口号,并给双方节点均发送打洞命令报文B;终端节点和通信对方节点收到报文B后,发送ping消息给NAT服务器所指定的报文B中的对方IP地址和端口号;若其中一方收到另一方发来的ping消息后,将进行ping回复,收到ping回复消息的终端节点确认打洞成功。
14、权利要求10的系统,其中,所述传输模块在应用层实现基于UDP报文的超时与重传机制、慢启动机制、拥塞避免机制、快速重传与快速恢复机制。
CN2008102411760A 2008-12-26 2008-12-26 一种p2p网络中实现nat穿越的方法和系统 Expired - Fee Related CN101442492B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008102411760A CN101442492B (zh) 2008-12-26 2008-12-26 一种p2p网络中实现nat穿越的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008102411760A CN101442492B (zh) 2008-12-26 2008-12-26 一种p2p网络中实现nat穿越的方法和系统

Publications (2)

Publication Number Publication Date
CN101442492A true CN101442492A (zh) 2009-05-27
CN101442492B CN101442492B (zh) 2011-03-30

Family

ID=40726739

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008102411760A Expired - Fee Related CN101442492B (zh) 2008-12-26 2008-12-26 一种p2p网络中实现nat穿越的方法和系统

Country Status (1)

Country Link
CN (1) CN101442492B (zh)

Cited By (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101883056A (zh) * 2010-07-23 2010-11-10 华南理工大学 基于udt和tcp中转实现nat穿越的系统和方法
CN101895590A (zh) * 2010-07-23 2010-11-24 华南理工大学 基于udt实现nat穿越的系统和方法
CN101610392B (zh) * 2009-07-24 2011-05-18 北京网尚文化传播有限公司 一种互联网电视在线点播的方法和系统
CN102368770A (zh) * 2011-10-20 2012-03-07 江西省南城县网信电子有限公司 一种基于家庭网络的多媒体资源共享系统
CN102420858A (zh) * 2011-11-22 2012-04-18 杭州华三通信技术有限公司 一种ftp模式配置方法、数据传输方法及设备
CN102420774A (zh) * 2012-01-06 2012-04-18 深圳市共进电子股份有限公司 使用igmp实现内网穿透的方法和内网穿透系统
CN101841484B (zh) * 2010-05-12 2013-01-02 中国科学院计算技术研究所 一种在结构化p2p网络中实现nat穿越的方法和系统
CN102917082A (zh) * 2012-10-10 2013-02-06 青岛海信传媒网络技术有限公司 穿透网络地址转换的消息推送方法及系统
CN103281408A (zh) * 2013-05-14 2013-09-04 福建星网锐捷安防科技有限公司 一种反向注册穿透网络的方法
CN103516795A (zh) * 2013-09-26 2014-01-15 传线网络科技(上海)有限公司 分布式网络连通性改善方法以及使用该方法的分布式网络
CN103873472A (zh) * 2014-03-18 2014-06-18 广州市纬志电子科技有限公司 一种自动连接网络的方法
CN104717311A (zh) * 2013-12-12 2015-06-17 中国移动通信集团公司 一种nat穿越的方法、网络节点和系统
CN104917725A (zh) * 2014-03-11 2015-09-16 上海卓岚信息科技有限公司 一种跨nat的串口服务器与网络设备的通信方法及系统
CN105491057A (zh) * 2015-12-28 2016-04-13 北京像素软件科技股份有限公司 防止分布式拒绝服务DDoS攻击的数据传输方法和装置
CN105516342A (zh) * 2015-12-30 2016-04-20 深圳市有信网络技术有限公司 一种p2p穿透同步方法及系统
CN105577851A (zh) * 2015-12-29 2016-05-11 深圳市科漫达智能管理科技有限公司 一种p2p通信方法、p2p服务器以及终端
CN105812442A (zh) * 2014-12-31 2016-07-27 华为技术有限公司 一种合并数据文件的方法和ftp转发器
CN106161663A (zh) * 2015-04-07 2016-11-23 中兴通讯股份有限公司 终端应用访问nas的方法及装置
CN106331198A (zh) * 2015-06-29 2017-01-11 中兴通讯股份有限公司 Nat穿透方法及装置
CN103795819B (zh) * 2014-01-27 2017-02-01 宁波键一生物科技有限公司 P2p应用中基于nat的终端间的数据传输方法
CN106612276A (zh) * 2016-12-08 2017-05-03 武汉斗鱼网络科技有限公司 一种Android移动终端的网络交互方法及系统
CN106713437A (zh) * 2016-12-16 2017-05-24 江苏神州信源系统工程有限公司 一种用于nat网络中服务器向客户端发送消息的方法
CN107205026A (zh) * 2017-05-22 2017-09-26 厦门市美亚柏科信息股份有限公司 一种点对点数据传输方法及系统
CN109120737A (zh) * 2018-08-10 2019-01-01 哈尔滨工业大学(威海) 一种基于泊松模型的递增型对称nat的udp穿透方法与系统
CN110099120A (zh) * 2019-05-07 2019-08-06 浙江中控技术股份有限公司 通信方法及装置、存储介质及电子设备
CN110389555A (zh) * 2019-08-16 2019-10-29 山东省金曼克电气集团股份有限公司 一种船用变压器的监控系统及监控方法
CN111131528A (zh) * 2018-10-31 2020-05-08 杭州海康威视系统技术有限公司 一种设备网域确定方法、服务器及终端
CN113037890A (zh) * 2021-03-20 2021-06-25 张晋 一种能够确保穿透对称型nat设备的方法及系统
CN113542414A (zh) * 2021-07-16 2021-10-22 深圳市广联智通科技有限公司 一种网络摄像机的数据存储方法
CN113965630A (zh) * 2021-10-25 2022-01-21 深圳市元征科技股份有限公司 一种udp连接方法、电子设备及存储介质

Cited By (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101610392B (zh) * 2009-07-24 2011-05-18 北京网尚文化传播有限公司 一种互联网电视在线点播的方法和系统
CN101841484B (zh) * 2010-05-12 2013-01-02 中国科学院计算技术研究所 一种在结构化p2p网络中实现nat穿越的方法和系统
CN101895590A (zh) * 2010-07-23 2010-11-24 华南理工大学 基于udt实现nat穿越的系统和方法
CN101883056A (zh) * 2010-07-23 2010-11-10 华南理工大学 基于udt和tcp中转实现nat穿越的系统和方法
CN101883056B (zh) * 2010-07-23 2013-03-20 华南理工大学 基于udt和tcp中转实现nat穿越的方法
CN102368770A (zh) * 2011-10-20 2012-03-07 江西省南城县网信电子有限公司 一种基于家庭网络的多媒体资源共享系统
CN102420858A (zh) * 2011-11-22 2012-04-18 杭州华三通信技术有限公司 一种ftp模式配置方法、数据传输方法及设备
CN102420858B (zh) * 2011-11-22 2014-12-24 杭州华三通信技术有限公司 一种ftp模式配置方法、数据传输方法及设备
CN102420774A (zh) * 2012-01-06 2012-04-18 深圳市共进电子股份有限公司 使用igmp实现内网穿透的方法和内网穿透系统
CN102420774B (zh) * 2012-01-06 2014-04-30 深圳市共进电子股份有限公司 使用igmp实现内网穿透的方法和内网穿透系统
CN102917082A (zh) * 2012-10-10 2013-02-06 青岛海信传媒网络技术有限公司 穿透网络地址转换的消息推送方法及系统
CN103281408A (zh) * 2013-05-14 2013-09-04 福建星网锐捷安防科技有限公司 一种反向注册穿透网络的方法
CN103281408B (zh) * 2013-05-14 2016-06-22 福建星网锐捷安防科技有限公司 一种反向注册穿透网络的方法
CN103516795A (zh) * 2013-09-26 2014-01-15 传线网络科技(上海)有限公司 分布式网络连通性改善方法以及使用该方法的分布式网络
CN103516795B (zh) * 2013-09-26 2015-06-10 传线网络科技(上海)有限公司 分布式网络连通性改善方法以及使用该方法的分布式网络
CN104717311A (zh) * 2013-12-12 2015-06-17 中国移动通信集团公司 一种nat穿越的方法、网络节点和系统
CN104717311B (zh) * 2013-12-12 2018-06-15 中国移动通信集团公司 一种nat穿越的方法、网络节点和系统
CN103795819B (zh) * 2014-01-27 2017-02-01 宁波键一生物科技有限公司 P2p应用中基于nat的终端间的数据传输方法
CN104917725A (zh) * 2014-03-11 2015-09-16 上海卓岚信息科技有限公司 一种跨nat的串口服务器与网络设备的通信方法及系统
CN104917725B (zh) * 2014-03-11 2018-02-16 上海卓岚信息科技有限公司 一种跨nat的串口服务器与网络设备的通信方法及系统
CN103873472A (zh) * 2014-03-18 2014-06-18 广州市纬志电子科技有限公司 一种自动连接网络的方法
CN105812442A (zh) * 2014-12-31 2016-07-27 华为技术有限公司 一种合并数据文件的方法和ftp转发器
CN105812442B (zh) * 2014-12-31 2019-02-12 华为技术有限公司 一种合并数据文件的方法和ftp转发器
CN106161663A (zh) * 2015-04-07 2016-11-23 中兴通讯股份有限公司 终端应用访问nas的方法及装置
CN106331198A (zh) * 2015-06-29 2017-01-11 中兴通讯股份有限公司 Nat穿透方法及装置
CN105491057B (zh) * 2015-12-28 2019-01-01 北京像素软件科技股份有限公司 防止分布式拒绝服务DDoS攻击的数据传输方法和装置
CN105491057A (zh) * 2015-12-28 2016-04-13 北京像素软件科技股份有限公司 防止分布式拒绝服务DDoS攻击的数据传输方法和装置
CN105577851A (zh) * 2015-12-29 2016-05-11 深圳市科漫达智能管理科技有限公司 一种p2p通信方法、p2p服务器以及终端
CN105516342B (zh) * 2015-12-30 2019-02-22 深圳市有信网络技术有限公司 一种p2p穿透同步方法及系统
CN105516342A (zh) * 2015-12-30 2016-04-20 深圳市有信网络技术有限公司 一种p2p穿透同步方法及系统
CN106612276B (zh) * 2016-12-08 2020-06-16 武汉斗鱼网络科技有限公司 一种Android移动终端的网络交互方法及系统
CN106612276A (zh) * 2016-12-08 2017-05-03 武汉斗鱼网络科技有限公司 一种Android移动终端的网络交互方法及系统
CN106713437A (zh) * 2016-12-16 2017-05-24 江苏神州信源系统工程有限公司 一种用于nat网络中服务器向客户端发送消息的方法
CN107205026A (zh) * 2017-05-22 2017-09-26 厦门市美亚柏科信息股份有限公司 一种点对点数据传输方法及系统
CN109120737A (zh) * 2018-08-10 2019-01-01 哈尔滨工业大学(威海) 一种基于泊松模型的递增型对称nat的udp穿透方法与系统
CN111131528A (zh) * 2018-10-31 2020-05-08 杭州海康威视系统技术有限公司 一种设备网域确定方法、服务器及终端
CN111131528B (zh) * 2018-10-31 2022-07-05 杭州海康威视系统技术有限公司 一种设备网域确定方法、服务器及终端
CN110099120A (zh) * 2019-05-07 2019-08-06 浙江中控技术股份有限公司 通信方法及装置、存储介质及电子设备
CN110099120B (zh) * 2019-05-07 2021-11-02 浙江中控技术股份有限公司 通信方法及装置、存储介质及电子设备
CN110389555A (zh) * 2019-08-16 2019-10-29 山东省金曼克电气集团股份有限公司 一种船用变压器的监控系统及监控方法
CN113037890A (zh) * 2021-03-20 2021-06-25 张晋 一种能够确保穿透对称型nat设备的方法及系统
CN113542414A (zh) * 2021-07-16 2021-10-22 深圳市广联智通科技有限公司 一种网络摄像机的数据存储方法
CN113965630A (zh) * 2021-10-25 2022-01-21 深圳市元征科技股份有限公司 一种udp连接方法、电子设备及存储介质

Also Published As

Publication number Publication date
CN101442492B (zh) 2011-03-30

Similar Documents

Publication Publication Date Title
CN101442492B (zh) 一种p2p网络中实现nat穿越的方法和系统
CN100521663C (zh) 点对点通信中穿越网络地址转换的方法
CN101741914B (zh) 一种p2p网络中穿透nat建立覆盖网的方法和系统
CA2678714C (en) Bootstrapping in peer-to-peer networks with network address translators
EP2449749B1 (en) Method and apparatus for relaying packets
CN101895590A (zh) 基于udt实现nat穿越的系统和方法
US20040153858A1 (en) Direct peer-to-peer transmission protocol between two virtual networks
CN101883056B (zh) 基于udt和tcp中转实现nat穿越的方法
CN104836863A (zh) 实现tcp反向端口映射的系统和方法
US9154369B2 (en) Method, apparatus and software for packet modification
CN104683493A (zh) 穿透网络地址转换的方法与连线中介系统
US20130117437A1 (en) Method for establising tcp connecting according to nat behaviors
US20140337478A1 (en) Peer-to-peer network communications
CN109194778B (zh) 一种基于kcp协议的nat穿透方法
CN106131039A (zh) Syn洪泛攻击的处理方法及装置
CN103873600B (zh) 一种网络地址转换穿透方法及设备
Garcia et al. Keyed user datagram protocol: concepts and operation of an almost reliable connectionless transport protocol
KR100932570B1 (ko) 서버 및 서버 측 네트워크의 부담없이 nat장비에서응용서버와 클라이언트 사이의 대규모 세션정보를 유지하기위한 방법
Yang et al. SMBR: A novel NAT traversal mechanism for structured Peer-to-Peer communications
CN102714617A (zh) 连接建立方法、装置及通信系统
Lin et al. TT-STUN protocol design for effective TCP NAT traversal
Zhang Design and realization of TCP-based NAT TRAVERSAL in P2P
Carles Gomez et al. TCP in the Internet of Things: from ostracism to prominence
Vanit-Anunchai Analysis of two-layer protocols: DCCP simultaneous-open and hole punching procedures
Topal et al. Enabling peer-to-peer communication for hosts in private address realms using IPv4 LSRR option and IPv4+ 4 addresses

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: BEIJING CREATIVITY, INC.

Free format text: FORMER OWNER: INSTITUTE OF COMPUTING TECHNOLOGY, CHINESE ACADEMY OF SCIENCES

Effective date: 20121214

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100190 HAIDIAN, BEIJING TO: 100086 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20121214

Address after: 100086 Haidian District, Zhongguancun, South Street, No. 2, building A, block, floor 28

Patentee after: Beijing Silicon Valley innovation Digital Technology Co., Ltd.

Address before: 100190 Haidian District, Zhongguancun Academy of Sciences, South Road, No. 6, No.

Patentee before: Institute of Computing Technology, Chinese Academy of Sciences

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110330

Termination date: 20151226

EXPY Termination of patent right or utility model