http://www.2ccc.com/article.asp?articleid=2048P2P 之 UDP穿透NAT的原理与实现原创:shootingstars参考:http://midcom-p2p.sourceforge.ne...">
摘自delphi盒子 asp?articleid=2048">http://www.2ccc.com/article.asp?articleid=2048
原创:shootingstars 【程序编程相关:Delphi连接关系数据库,不支持自动获】
p2p 之 udp穿透nat的原理与实现 【推荐阅读:[技术贴]关于动态代理 】
参考:http://midcom-p2p.sourceforge.net/draft-ford-midcom-p2p-01.txt 【扩展信息:Delphi中使用ADO组件,利用UDL】论坛上经常有对p2p原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码).呵呵,在这里我就用自己实现的一个源代码来说明udp
穿越nat的原理.
首先先介绍一些基本概念:
nat(network address translators),网络地址转换:网络地址转换是在ip地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用.nat分为两大类,基本的nat与napt(network address/port translator).
最开始nat是运行在路由器上的一个功能模块. 最先提出的是基本的nat,它的产生基于如下事实:一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这是在上世纪90年代中期提出的).那么这个子网中其实只有少数的节点需要全球唯一的ip地址,其他的节点的ip地址应该是可以重用的.
因此,基本的nat实现的功能很简单,在子网内使用一个保留的ip子网段,这些ip对外是不可见的.子网内只有少数一些ip地址可以对应到真正全球唯一的ip地址.如果这些节点需要访问外部网络,那么基本nat就负责将这个节点的子网内ip转化为一个全球唯一的ip然后发送出去.
(基本的nat会改变ip包中的原ip地址,但是不会改变ip包中的端口)
关于基本的nat可以参看rfc 1631 另外一种nat叫做napt,从名称上我们也可以看得出,napt不但会改变经过这个nat设备的ip数据报的ip地址,还会改变ip数据报的tcp/udp端口.基本nat的设备可能我们见的不多(呵呵,我没有见到过),napt才是我们真正讨论的主角.看下图:
server s1 18.181.0.31:1235 | ... 下一页