免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2763 | 回复: 0
打印 上一主题 下一主题

P2P之UDP穿透NAT的原理与实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-19 21:50 |只看该作者 |倒序浏览

原文:
http://www.ppcn.net/n1306c2.aspx
本文大致分为三个部分,分别是:NAT基础知识、两个NAT之间的建立、源代码
一、NAT基础知识
1.NAT(Network Address Translators),网络地址转换。
2.NAT大致分为两类,即:基本NAT与NAPT(Network Address/Port Translator)。前者对地址转换时只转变相应的IP地址,而后者同时还会转变端口号,例如将原192.168.10.3:6000转换为公网IP:218.56.62.12:1234对外进行交流(后者在当前应用普遍)。
3.“最开始NAT是运行在路由器上的一个功能模块”,那后来呢?
二、两个NAT之间的连接
1.对于NAPT又可以分为两类:Symmetric NAT和Cone NAT,前一种在建立一个新的连接时(用文中的话说就是NAT创建一个新的"session"),会指定一个新的端口号,而后者(The latter)在创建一个新的session后还会使用原来的端口号(援上例则为218.56.62.12:12345)。现在绝大多数的NAT是后者,而前者(The former)可能会导致P2P软件失灵。
2.有关“打洞”(文中称为一种“UDP Hole Punching的技术”):也就是说一个服务器若想与某个NAT进行联系,必须首先由这台NAT发出“邀请”,也就是由内部的某台主机向服务器(也就是所谓“公网IP者”)发送一个UDP包,也就是所谓的“打洞”,此时两台主机便可以进行通讯了。
这里要注意一点:这台内网主机即192.168.10.3:6000-->218.56.62.12:1234与一台服务器连接以后,[color="#ff0000"]只有[color="#000000"]这台服务器向这个端口(1234)传递的消息才会被转发给内网主机,而来自其他方面的消息都会被丢弃。
3.两个NAT的连接(即两个内网主机的通讯),首先需要有一个中间人,即上例所说的服务器,也即所谓“公网IP者”,一台内部主机A从服务器上获得了另一台内部主机B的地址,此时A要请求服务器“命令”(!--原文如此)B朝主机A打个“洞”,这样两台主机便可以相互进行通讯了。
Note:
1.注意本篇是基于UDP来讨论的,而不是TCP。
2.由本文应该大致可以确定P2P是基于UDP数据包的。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2304/showart_8358.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP