P2P 之 TCP穿透NAT的原理

[转载] [佚名] [2008-11-19 22:31:42]

原文:http://www.andrew.cmu.edu/user/ggw/WBFD.pdf摘要防火墙和网络地址转换(NAT)设备对于传统的P2P协议存在一定的问题。一些中间设备抑制了来自外部网络到内部网络的TCP请求,这篇文章的目的就是寻找一个能够在两个NAT设备内部的主机间建立TCP连接的方法。我们已经在两个普通的硬件条件下实现了这个功能。1.入门由于32位IP地址的减少,现在出现了很多通过一个internet地址代理内部网络上网的设备,这就是NAT技术。这些设备对于INTERNET已经越来越重要了,但是它们的独立发展因为缺乏标准而对现在的internet协议造成危害。2.技术典型的NAT

阅读全文 发表评论 浏览/评论:4/0

TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞

[转载] [佚名] [2008-11-19 22:19:13]

下载源代码这个标题用了两个顿号三个名称,其实说得是同一个东西,只是网上有不同的说法罢了,另外好像还有人叫TCP打孔(我的朋友小妞听说后问“要打孔啊,要不要我帮你去借个电钻过来啊?”“~!·¥%……·!”)。闲话少说,我们先看一下技术背景:Internet的迅速发展以及IPv4 地址数量的限制使得网络地址翻译(NAT,Network Address Trans2lation)设备得到广泛应用。NAT设备允许处于同一NAT后的多台主机共享一个公网(本文将处于同一NAT后的网络称为私网,处于NAT前的网络称为公网

阅读全文 发表评论 浏览/评论:15/0

C#实现P2P之UDP穿透NAT的原理

[转载] [佚名] [2008-11-19 22:13:37]

论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。呵呵,在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。首先先介绍一些基本概念:NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。最开始NAT是运行在路由器上的一个功能模块。最先提出的是基本的NAT,它的产生基于如下事实:一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这

阅读全文 发表评论 浏览/评论:4/0

NAT详解

[转载] [佚名] [2008-11-19 22:02:21]

NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。如图简单的说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(intern

阅读全文 发表评论 浏览/评论:2/0

C#文件传输

[转载] [佚名] [2008-11-18 17:09:35]

服务器用来接收文件,不停的监听端口,有发送文件就马上开始接收文件 服务端代码: C#代码using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Threading; using System.Net.Sockets; usi

阅读全文 发表评论 浏览/评论:11/0

用飞信脱框运行访问数据库的软件时出错的解决方法

[转载] [佚名] [2008-11-18 9:25:17]

用FetionVM运行访问数据库的软件时出错:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题解决方法:Copy System.Transactions.dll和System.Data.dll到Vm的 System目录下以及Microsoft.VC80.CRT.manifest还不行,参考下述1、找到Microsoft Visual Studio 8/VC/redist/x86/Microsoft.VC80.CRT2、将其内的文件Copy到应用程序的System目录下即可再不行看这:解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题

阅读全文 发表评论 浏览/评论:3/0

MFC中对象序列化技术的实现

[转载] [佚名] [2008-11-18 8:56:01]

1、需求对于支持序列化操作的类可以将不同类的不同对象以序列的形式写到文件中;可以通过读取序列化文件还原对应类的对应实例;针对对象的哪些内容进行序列化由对象来决定;2、需求示例2.1、需要序列化的对象对应的类l CNameclass CName:public CObject {public: DECLARE_SERIAL(CName)CName() {m_d1=0;m_d2=0;};CName(double d1,double d2) {m_d1=d1;m_d2=d2;};void Serialize(CArchive&

阅读全文 发表评论 浏览/评论:3/0

C++编译器如何实现异常处理

[转载] [佚名] [2008-11-13 16:23:34]

与传统语言相比,C++的一项革命性创新就是它支持异常处理。传统的错误处理方式经常满足不了要求,而异常处理则是一个极好的替代解决方案。它将正 常代码和错误处理代码清晰的划分开来,程序变得非常干净并且容易维护。本文讨论了编译器如何实现异常处理。我将假定你已经熟悉异常处理的语法和机制。本文 还提供了一个用于VC++的异常处理库,要用库中的处理程序替换掉VC++提供的那个,你只需要调用下面这个函数:install_my_handler();之后,程序中的所有异常,从它们被抛出到堆栈展开(stack unwinding),再到调用catch块,最后到程序恢复正常运行,都将由我的异常处理库来管理。与 其它

阅读全文 发表评论 浏览/评论:8/0