论文部分内容阅读
[摘要]很多P2P应用程序需要通过TCP协议进行通讯连接,然而NAT技术却日益成为了TCP连接的最大障碍,一些比较流行的P2P应用程序不支持NAT穿透,或者在穿透方面做的不是很好。于是,人们提出采用新兴的SIP协议通过UDP协议建立通讯管道,甚至寄希望于发展中的IPv6协议。这篇论文主要讨论了一种全新的TCP协议P2P通讯方案,并用它成功的连接了两个位于NAT网络下的两个通讯端主机。
[关键词]NATTCP/IP UDP 桥接主机
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0710043-01
一、NAT技术与应用
NAT(The IP Network Address Translator), 也称为为网络地址转换。IP地址有两大分类,一类是私有IP地址,可以称之为内网IP地址。一类是非私有的IP地址,可以称之为公网IP地址。内网IP地址分配的IP地址在全球不惧有唯一性,也因此无法被其它外网主机直接访问。而公网IP地址是指具有全球唯一的IP地址,能够直接被其它主机访问。
NAT 最初的目的是为使用内网IP地址的计算机提供通过少数几台具有公网的IP地址的计算机访问外部网络的功能。NAT 负责将某些内网IP地址的计算机向外部网络发出的IP数据包的源IP地址转换为NAT自己的公网的IP地址,目的IP地址不变, 并将IP数据包转发给路由器,最终到达外部的计算机。同时负责将外部的计算机返回的IP数据包的目的IP地址转换为内网的IP地址,源IP地址不变,并最终送达到内网中的计算机。如下图:
分享几个公网IP地址访问Internet的功能
随着网络的普及,IPv4的局限性暴露出来。公网IP地址成为一种稀缺的资源,此时NAT的功能局限也暴露出来,同一个公网的IP地址,某个时间只能由一台私有IP地址的计算机使用。于是NAPT(The IP Network Address/Port Translator)应运而生,NAPT实现了多台私有IP地址的计算机可以同时通过一个公网IP地址来访问Internet的功能。这在很大程度上暂时缓解了IPv4地址资源的紧张。
NAPT负责将某些内网IP地址的计算机向外部网络发出的TCP/UDP数据包的源IP地址转换为NAPT自己的公网的IP地址,源端口转为NAPT自己的一个端口。目的IP地址和端口不变,并将IP数据包发给路由器,最终到达外部的计算机。同时负责将外部的计算机返回的IP数据包的目的IP地址转换内网的IP地址,目的端口转为内网计算机的端口,源IP地址和源端口不变,并最终送达到内网中的计算机。
计算机分享一个公网IP地址访问Internet的功能
目前,绝大部分公司的网络架构,都是通过1至N台支持NAPT的路由器来实现公司的所有计算机连接外部的Internet网络的,现在基本把他们统称为NAT网络,我们这篇文章主要讨论NAPT网络。如图2。
二、NAT穿透技术
通过NAT上网的特点决定了只能由NAT内的计算机主动向NAT外部的主机发起连接,外部的主机想直接和NAT内的计算机直接建立连接是不被允许的。IM(即时通讯)而言,这意味着由于NAT内的计算机和NAT外的计算机只能通过服务器中转数据来进行通讯。对于P2P方式的下载程序而言,意味着NAT内的计算机不能接收到NAT外部的连接,导致连接数用过少,下载速度很难上去。因此P2P软件必须要解决的一个问题就是要能够在一定的程度上解决NAT内的计算机不能被外部连接的问题。
理论上,一台外网IP地址的计算机想和NAT后面的内网计算机通讯,要求NAT后面的内网计算机主动向外网IP地址的计算机发起一个数据包。外网IP地址的计算机利用收到的数据包获取到NAT的外网IP地址和映射的端口,就可以和内网IP的计算机透明的进行通讯了。
传输数据报文有两种主要的IP协议TCP和UDP协议。TCP协议是可靠的,安全的,面向连接的传输协议。UDP是不可靠的,不安全的,无连接的协议。根据TCP和UDP协议的实现原理和特性,对于NAT来进行穿透,UDP协议最好实现。由于它是无连接的协议,因此只要知道NAT网络的外部地址和端口后,就很容易相互直连。因此,靠一个公网IP地址的服务器就可以帮助两者来建立连接。当两个NAT后面的内网计算机分别连接了公网IP地址的服务器后,服务器可以从收到的UDP数据包中获取到这两个NAT设备的公网IP地址和这两个连接建立的Session的映射端口。两个内网计算机以服务器为媒介相互获取到对方的NAT设备公网IP地址和映射的端口,就可以实现连接。
三、TCP协议NAT穿透原理与实现
大家普遍认为TCP协议由于其需要三次握手的特殊性,没有办法进行有效的NAT穿透直连,其实通过SYN欺骗手段,上述方法也适用于TCP协议。如下图所示,我们将用一个公网主机做桥接,通过欺骗手段,实现TCP直连。
注:图中“I:X”标志表示采用IP地址为I,端口为X进行通讯;“<”和“>”表示数据流向。
实现上述连接的详细步骤说明:
第①步:Recipient连接公网桥接主机,公网主机记录Recipient端的NAT地址和端口。
第②步:Initiator连接公网桥接主机,公网主机记录Initiator端的NAT地址和端口。
第③步:公网桥接主机接收到Initiator连接请求后,将其NAT地址和端口传给Recipient。
第④步:公网桥接主机将Recipient的NAT地址和端口回传给Initiator。
第⑤步:Recipient开始监听通讯端口,等待对方连接请求。
第⑥步:Recipient发送SYN信号给Initiator的NAT地址和端口,欺骗本地NAT端,使之维持端口开放,等待Initiator发起连接。
第⑦步:Initiator发起SYN信号给Recipient,双方握手成功,建立TCP直连。
四、结论
根据以上通讯协议,一个安全的,基于TCP协议穿透NAT模型就建立起来了。建立连接后的两个端点主机,可以进行正常的数据通讯。注意以上实现步骤不能够打乱顺序,其中第⑤步、第⑥步和第⑦步是非常关键的过程,可以通过TCP协议的端口复用技术实现。
参考文献:
[1]K. Egevang & P. Francis. The IP Network Address Translator (NAT) [EB/OL]. ftp://ftp.rfc-editor.org/in-notes/rfc1631.txt,1994-05.
[2]P. Srisuresh & K. Egevang. Traditional IP Network Address Translator[EB/OL].ftp://ftp.rfc-editor.org/in-notes/rfc3022.txt, 2001-01.
[3]J. Rosenberg. STUN - Simple Traversal of User Datagram Protocol Through Network Address Translators[EB/ OL]. ftp://ftp.rfc-editor.org/in-notes/rfc3489.txt, 2003-03.
[4]BitTorrent. FAQ[EB/OL]. http://bittorrent.com/FAQ.html, 2006.
[5]Skype Technologies S.A. Skype Explained[EB/ OL]. http://www.skype.com/products/explained.html, 2005-11-20.
[6]Skype Technologies S.A. Skype Technical FAQ[EB/ OL]. http://www.skype.com/help/faq/technical.html, 2005-11-20.
作者简介:
管涛,女,现在是中国海洋大学信息科学与工程学院计算机技术专业工程硕士,主要研究方向为软件工程、网络通讯技术。
[关键词]NATTCP/IP UDP 桥接主机
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0710043-01
一、NAT技术与应用
NAT(The IP Network Address Translator), 也称为为网络地址转换。IP地址有两大分类,一类是私有IP地址,可以称之为内网IP地址。一类是非私有的IP地址,可以称之为公网IP地址。内网IP地址分配的IP地址在全球不惧有唯一性,也因此无法被其它外网主机直接访问。而公网IP地址是指具有全球唯一的IP地址,能够直接被其它主机访问。
NAT 最初的目的是为使用内网IP地址的计算机提供通过少数几台具有公网的IP地址的计算机访问外部网络的功能。NAT 负责将某些内网IP地址的计算机向外部网络发出的IP数据包的源IP地址转换为NAT自己的公网的IP地址,目的IP地址不变, 并将IP数据包转发给路由器,最终到达外部的计算机。同时负责将外部的计算机返回的IP数据包的目的IP地址转换为内网的IP地址,源IP地址不变,并最终送达到内网中的计算机。如下图:
分享几个公网IP地址访问Internet的功能
随着网络的普及,IPv4的局限性暴露出来。公网IP地址成为一种稀缺的资源,此时NAT的功能局限也暴露出来,同一个公网的IP地址,某个时间只能由一台私有IP地址的计算机使用。于是NAPT(The IP Network Address/Port Translator)应运而生,NAPT实现了多台私有IP地址的计算机可以同时通过一个公网IP地址来访问Internet的功能。这在很大程度上暂时缓解了IPv4地址资源的紧张。
NAPT负责将某些内网IP地址的计算机向外部网络发出的TCP/UDP数据包的源IP地址转换为NAPT自己的公网的IP地址,源端口转为NAPT自己的一个端口。目的IP地址和端口不变,并将IP数据包发给路由器,最终到达外部的计算机。同时负责将外部的计算机返回的IP数据包的目的IP地址转换内网的IP地址,目的端口转为内网计算机的端口,源IP地址和源端口不变,并最终送达到内网中的计算机。
计算机分享一个公网IP地址访问Internet的功能
目前,绝大部分公司的网络架构,都是通过1至N台支持NAPT的路由器来实现公司的所有计算机连接外部的Internet网络的,现在基本把他们统称为NAT网络,我们这篇文章主要讨论NAPT网络。如图2。
二、NAT穿透技术
通过NAT上网的特点决定了只能由NAT内的计算机主动向NAT外部的主机发起连接,外部的主机想直接和NAT内的计算机直接建立连接是不被允许的。IM(即时通讯)而言,这意味着由于NAT内的计算机和NAT外的计算机只能通过服务器中转数据来进行通讯。对于P2P方式的下载程序而言,意味着NAT内的计算机不能接收到NAT外部的连接,导致连接数用过少,下载速度很难上去。因此P2P软件必须要解决的一个问题就是要能够在一定的程度上解决NAT内的计算机不能被外部连接的问题。
理论上,一台外网IP地址的计算机想和NAT后面的内网计算机通讯,要求NAT后面的内网计算机主动向外网IP地址的计算机发起一个数据包。外网IP地址的计算机利用收到的数据包获取到NAT的外网IP地址和映射的端口,就可以和内网IP的计算机透明的进行通讯了。
传输数据报文有两种主要的IP协议TCP和UDP协议。TCP协议是可靠的,安全的,面向连接的传输协议。UDP是不可靠的,不安全的,无连接的协议。根据TCP和UDP协议的实现原理和特性,对于NAT来进行穿透,UDP协议最好实现。由于它是无连接的协议,因此只要知道NAT网络的外部地址和端口后,就很容易相互直连。因此,靠一个公网IP地址的服务器就可以帮助两者来建立连接。当两个NAT后面的内网计算机分别连接了公网IP地址的服务器后,服务器可以从收到的UDP数据包中获取到这两个NAT设备的公网IP地址和这两个连接建立的Session的映射端口。两个内网计算机以服务器为媒介相互获取到对方的NAT设备公网IP地址和映射的端口,就可以实现连接。
三、TCP协议NAT穿透原理与实现
大家普遍认为TCP协议由于其需要三次握手的特殊性,没有办法进行有效的NAT穿透直连,其实通过SYN欺骗手段,上述方法也适用于TCP协议。如下图所示,我们将用一个公网主机做桥接,通过欺骗手段,实现TCP直连。
注:图中“I:X”标志表示采用IP地址为I,端口为X进行通讯;“<”和“>”表示数据流向。
实现上述连接的详细步骤说明:
第①步:Recipient连接公网桥接主机,公网主机记录Recipient端的NAT地址和端口。
第②步:Initiator连接公网桥接主机,公网主机记录Initiator端的NAT地址和端口。
第③步:公网桥接主机接收到Initiator连接请求后,将其NAT地址和端口传给Recipient。
第④步:公网桥接主机将Recipient的NAT地址和端口回传给Initiator。
第⑤步:Recipient开始监听通讯端口,等待对方连接请求。
第⑥步:Recipient发送SYN信号给Initiator的NAT地址和端口,欺骗本地NAT端,使之维持端口开放,等待Initiator发起连接。
第⑦步:Initiator发起SYN信号给Recipient,双方握手成功,建立TCP直连。
四、结论
根据以上通讯协议,一个安全的,基于TCP协议穿透NAT模型就建立起来了。建立连接后的两个端点主机,可以进行正常的数据通讯。注意以上实现步骤不能够打乱顺序,其中第⑤步、第⑥步和第⑦步是非常关键的过程,可以通过TCP协议的端口复用技术实现。
参考文献:
[1]K. Egevang & P. Francis. The IP Network Address Translator (NAT) [EB/OL]. ftp://ftp.rfc-editor.org/in-notes/rfc1631.txt,1994-05.
[2]P. Srisuresh & K. Egevang. Traditional IP Network Address Translator[EB/OL].ftp://ftp.rfc-editor.org/in-notes/rfc3022.txt, 2001-01.
[3]J. Rosenberg. STUN - Simple Traversal of User Datagram Protocol Through Network Address Translators[EB/ OL]. ftp://ftp.rfc-editor.org/in-notes/rfc3489.txt, 2003-03.
[4]BitTorrent. FAQ[EB/OL]. http://bittorrent.com/FAQ.html, 2006.
[5]Skype Technologies S.A. Skype Explained[EB/ OL]. http://www.skype.com/products/explained.html, 2005-11-20.
[6]Skype Technologies S.A. Skype Technical FAQ[EB/ OL]. http://www.skype.com/help/faq/technical.html, 2005-11-20.
作者简介:
管涛,女,现在是中国海洋大学信息科学与工程学院计算机技术专业工程硕士,主要研究方向为软件工程、网络通讯技术。