您的当前位置:首页正文

DHT网络中一种TCP穿越NAT机制

2023-11-10 来源:好走旅游网
第28卷第1期2007年1月东北大学学报(自然科学版)JournalofNortheasternUniversity(NaturalScience)Vol128,No.1Jan.2007

DHT网络中一种TCP穿越NAT机制

耿福泉,陈 浩,方忠民,赵林亮

(东北大学信息科学与工程学院,辽宁沈阳 110004)

摘   要:针对现有的NAT穿透方案或者扩展性不好,或者未采用标准的协议栈,或者对移动性支持较差的问题,提出了一种新的TCP穿越非对称型NAT的机制

网络地址转换的TCP穿越(NatTT)・利用公网

的代理服务器为准备接受TCP连接的位于NAT之后的节点服务・发起TCP连接的节点和接收TCP连接的节点通过代理服务器进行协商,而在NAT上建立了双方都了解的通道・通过这一通道以成功实现TCP的连接・测试结果表明这一方法是有效的・

关 键 词:P2P;DHT;NAT穿越;网络地址转换;TCP

中图分类号:TP393.01   文献标识码:A   文章编号:100523026(2007)0120049204

ANATTraversalStrategyinDHTNetworkGENGFu2quan,CHENHao,FANGZhong2min,ZHAOLin2liang(SchoolofInformationScience&Engineering,NortheasternUniversity,Shenyang110004,China.

Correspondent:CHENHao,E2mail:chenhaoneu@163.com)

Abstract:TosolvetheexistingproblemssuchasthepoorexpandabilityduringNATtraversalandnonstandardprotocolstacks,anewstrategyusingTCPcalledNatTTisproposed.WiththeservicesprovidedbytheagentseverontheInternet,aroutewayofTCPbetweentheinitialnodeandthereceivalnodeisthusavailable.It’seffectivenesscanbeseenfromtestresults.Keywords:P2P;DHT;NATtraversal;networkaddresstranslater;TCP

最近几年,对等计算P2P(Peer2to2Peer)[1]迅速成为计算机界关注的热门话题之一・P2P打破了传统的Client/Server(C/S)模式,在网络中的每个结点的地位都是对等的,既充当服务器,为其他结点提供服务,同时也享用其他结点提供的服务・目前P2P研究的重点放在了如何有效地查找信息上,最新的成果都是基于DHT(DistributedHashTable)[2]的分布式发现和路由算法・DHT类结构能够自适应结点的动态加入/离开,有着良好的可扩展性、鲁棒性、结点ID分配的均匀性和自组织能力・

DHT网络的基本原理是:每个节点有惟一的

常有两种搭建方式:一是所有的节点都加入到网

络中,所有节点都同等重要,如图1;二是有选择性地让某些节点加入,例如只选择公网中有足够带宽和CPU资源的节点加入,其他节点通过这些节点加入到DHT网络,如图2・第一种方法造成很多NAT后节点功能受限,用途不是很广泛・本文只讨论第二种DHT网络・

标识符(nodeId),每个消息(或资源)也有一个与nodeId属于同一名字空间(namespace)的标识符(key),key和nodeId在名字空间中是相对一致均匀分布的;根据消息的key,节点能够将消息路由到nodeId与key最为“接近”的节点・DHT网络通

图1 所有节点都加入DHT网络

Fig.1 AllthenodesjoinDHTnet

收稿日期:2006201209

基金项目:国家高技术研究发展计划项目(2004AA712032)・

作者简介:耿福泉(1960-),男,辽宁沈阳人,东北大学博士研究生;赵林亮(1956-),男,山东胶南人,东北大学教授・

© 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

50

东北大学学报(自然科学版)           第28卷

TCP优化成果,再者,很多网络都不允许使用UDP・

1 一种新的TCP穿越NAT机制

针对上述方案或扩展性不好,或未采用标准的协议栈,或对移动性支持较差的问题,本文提出

了一种新的TCP穿越NAT机制NatTT(即NATTCPTraversal的缩写)・

图2 仅部分节点加入DHT网络Fig.2 OnlypartofthenodesjoinDHTnet

和其他P2P应用一样,DHT网络中节点间常常需要借助TCP实现端到端之间的通信,但NAT[3]的大量部署破坏了端与端之间的可追溯

在NatTT中,想随时接受连接请求的节点称

为接收节点或接收者,负责某个接收节点存储(注册)的那个节点称为该接收节点的代理・代理的功能是向接收节点提供当前网络地址以及帮助NAT后节点实现穿越・为了保证可用性和可扩展性,代理还可以采用冗余备份,例如,某接收节点的代理的一些后继节点都可以作为该接收节点的代理・如图3・

性・

根据文献[3],NAT有以下4种分类,假设数据包从A:X经NA:Y到某公网主机B:J:

(1)FullConeNAT:任何一台主机C都可通过NA:Y与A:X进行通信,即使A:X从未与C通信过;

(2)RestrictedConeNAT:当且仅当A:X曾向C发送过数据包,C才能通过NA:Y与A:X进行通信;

(3)PortRestrictedConeNAT:当且仅当A:X曾向C:M发送过数据包,C:M才能通过NA:Y与A:X进行通信,除M之外C不能通过任何

图3 NatTT结构图

Fig.3 SystemarchitectureofNatTT

端口与A:X通信;

(4)SymmetricNAT:对每一个和A:X通信的IP地址和端口,NAT都会分配一个新的映射端口・例如,A:X之后要和B:Q通信,NAT会分配一个新端口Z・

下面简要分析这些应用是如何解决NAT穿越问题的:

①如果只有一个节点位于NAT后,让此节点发起连接,例如Kazaa[4]・这只是一个部分解决方案,很多情况下通信双方节点都位于NAT后・②动态或手工配置NAT以便将某个特定端口的请求转发到NAT之后某节点,例如BitTorrent[5]・但是用户通常没有能力或权限配置NAT・③通过中央服务器中转,例如Groove[6]・这种方案代价比较昂贵,因为当节点增多时,需要部署大量服务器・④通过公网节点中转,例如Skype[7],当中转大量数据时,会严重影响该节点性能・⑤利用私有会话发起协议在两个节点间交换UDP端口,然后在UDP之上打TCP隧道,例如Newrong[8]・本文采用标准TCP协议栈以便利用某些最新

ConeNAT的穿越如图4所示・此外,还可利

用文献[9]中第七部分描述的端口预测方法来扩

展NatTT以支持SymmetricNAT穿越,但最新研究指出,NAT零售市场上很少有SymmetricNAT[10],而且VoIP等新兴业务在SymmetricNAT下表现不佳,本文相信SymmetricNAT会逐渐消失,因此只考虑ConeNAT・过程如下:

(1)接收节点注册・步骤1和2是接收节点通过一个URI向代理注册,UDP、TCP均可,但TCP开销较大,采用UDP(如图2)可以容许更多接收节点注册到每个代理上・接收节点定期向代理发送注册消息,以便代理随时通过NAT向它发送连接请求(步骤4)・

(2)查询・步骤3为发起节点想与接收节点建立一条TCP连接,于是向代理(通过DHT算法)发送查询请求・代理首先检查接收节点是否已

注册(可能需要和其他代理联系进行确认),若注册,通过其注册地址向它发送一个连接请求(步骤4)・该连接请求带有一个联系参数,以便追踪后续步骤针对那个查询请求,以及通知接收节点发起连接时应该使用的IP地址和端口・代理将最终向发起节点回应一个带有接收节点公有IP地址和

© 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

第1期        耿福泉等:DHT网络中一种TCP穿越NAT机制端口的应答(步骤10),以便和它建立一条直接的TCP连接(步骤11)・

(3)打洞・步骤5和6为接收者通过连接请求中的地址信息与代理建立TCP连接,告知代理它所使用的地址信息・代理比较接收者的私有IP地址(R)和公有IP地址(NR),若匹配,说明接收者不在NAT之后,否则接收者为即将从发送者公有IP地址和端口(NI:Y)发送的消息在NAT上打洞・

这里的策略是接收者使用相同的IP地址和端口与代理和发起者通信・因为是在ConeNAT上打洞,NAT将为这两条TCP连接分配相同的端口・在图4的例子中,发送者使用端口X和代理通信(步骤3),但是代理看到的数据包地址为

51

NATI:Y・同样,接收者使用端口J但代理看到的

地址为NATR:K・为了打洞,接收者关闭步骤5和6中与代理的连接,并在步骤7中试图使用端口J

和NI:Y发起TCP连接请求,步骤8或者超时,或者返回一个TCPReset应答,或者返回一个端口在使用错误(NATI为FullCone类型),任何一种情况都将导致连接失败,但是很可能在NATR上产生了一个R:J到NI:Y的映射(之所以“很可能”是因为NATR可能因为步骤8的TCPReset应答关闭R:J到NI:Y的映射)・步骤8和9之间,接收者在R:J上创建一个监听Socket,然后发送一个连接应答(步骤9)・步骤10中代理通知发起者现在可以通过NR:K和接收者建立直接的TCP连接,步骤11连接建立・

图4 ConeNAT穿越Fig.4 ConeNATtraversal

2 测试结果分析

目前仅仅针对DHT网络中位于不同NAT

后的节点进行了测试・搭建了一个有四个节点的DHT网络(通过Chord算法[11]),其中两个节点在公网上,分别运行Win2K、WinXP(SP2),主频分别为216MHz,117MHz・另两个节点位于不同

的NAT后(通过STUN[3]算法测得两个NAT均

为Cone类型),也分别运行Win2K、WinXP(SP2),主频分别为214MHz,218MHz・两个私网节点分别注册到两个公网节点上,分别向对方发起TCP连接・进行了大约200次测试,其中每个节点发送100次,观察测得穿越成功率分别达到99%和97%,TCP连接建立延迟从119s到716s

© 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

52

东北大学学报(自然科学版)           第28卷

translation(NAT2PT)[S/OL].[2005-10-21].http:∥www.ietf.org/rfc/rfc2766.txt.

[2]

不等・这个结果一方面是因为NAT为Cone类

型,另一方面因为测试环境是在学校搭建,网络连通性较好,同时DHT网络只有四个节点,节点查找较快・建议在实际环境中配置时,为步骤7的TCP建立设置一个可配置超时时间(目前设置为2s),同时将NatTT根据STUN[3]和NAT中继穿越(TURN)扩展以支持UDP穿越以及TCP、UDP中转・

罗杰文・PeertoPeer(P2P)综述[EB/OL]・[2005-10-21]・http:∥www.intsci.ac.cn/users/luojw/papers/p2p.htm.

(LuoJie2wen.Peertopeer(P2P)summary[EB/OL].[2005-10-21].http:∥www.intsci.ac.cn/users/luojw/papers/p2p.htm.)

[3]RosenbergJ,WeinbergerJ,HuitemaC,etal.STUN2simpletraversalofuserdatagramprotocol(UDP)throughnetworkaddresstranslators(NATs)[S/OL].[2005-10-21].http:∥www.ietf.org/rfc/rfc3489.txt.

另外,对上例中两个公网节点进行仿真测试,

观测到两个节点每秒分别可负载超过10000和7000个UDP注册(步骤1和2),节点每隔1min重送一个UDP注册,因此这两个代理分别可负载大约600000和420000个接收节点・这不包括冗余代理和偶尔的查找以及连接请求带来的开销,相信这个开销不会太大・在实际的DHT网络中,公网节点负责的节点注册远远达不到此数目,因此像Skype一样,通常用户可以承担这些额外的开销・

[4]JessupT.HowKazaaworks.UtahEducationNetworkSummit[EB/OL]・[2005-10-21].http:∥www.ndnn.org/blog/downloads/summit/UENSummit-Peer-2-Peer.ppt.

[5][6]

BitTorrent.FAQ[EB/OL].[2005-10-12].http:∥www.bittorrent.com/FAQ.html.

GrooveNetworks.Groovewebservices[EB/OL].[2005-10-21].http:∥www.groove.net/pdf/wpgroove-web-services.pdf.[7]SkypeTechnologiesSA.Skypeexplained[EB/OL].[2005-10-21].http:∥www.skype.com/products/explained.html.

3 结  论

本文提出了一种DHT网络中TCP穿越NAT机制,由某个节点协调位于NAT后的节点间的通信,而不是负责具体通信的中转,保证了系统的高可扩展性和良好的性能・同时采用标准的TCP协议栈,不仅有助于和其他系统的兼容,还便于利用某些最新TCP优化・下一步的工作就是扩展NatTT以支持UDP穿越,同时借鉴交互式连接建立(ICE)的工作方式实现SymmetricNAT的穿越・参考文献:

[1]

TsirtsisG,SrisureshP.Networkaddresstranslation2protocol

[8][9]

NewrongInc.NATtraversalSDK[EB/OL].[2005-10-25].http:∥www.newrong.com/en/product/index.html.GuhaS,TakedaY,FrancisP.NUTSS:aSIP2basedapproachtoUDPandTCPnetworkconnectivity[C]∥SIGCOMM’04Workshops.Portland,2004:43-48.

[10]JenningsC.NATclassificationresultsusingSTUN.IETFInternetdraft[EB/OL].[2005-10-21].http:∥www.ietf.org/internet2drafts/draftjennings2midcom2stun2results202.txt.

[11]StoicaI,MorrisR,KargerD,etal.Chord:ascalablepeer2to2peerlookupserviceforInternetapplications[C]∥ProceedingsoftheACMSIGCOMM’01Conference.SanDiego,California,2001:149-160.

© 1994-2008 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net

因篇幅问题不能全部显示,请点此查看更多更全内容