P2P节点仲裁服务器中,应该有一个全球IP地址表,分中国大陆、香港、台湾、北美、欧洲、澳洲、其它。中国大陆先按照营运商分:电信、网通、铁通、联通、教育网等,再按照省份分类。P2P在数据传送中,可以将30秒数据文件作为1块数据包;数据包中按照每16KB作为一个数据块。节点仲裁服务器也会将新的P2P节点强行加载到另一个节点上,但不能超过节点最大连接数。
说说简单文件传输协议TFTP
简单文件传输协议是FTP的简化版本,只有在你确切地知道想要得到的文件名及它的准确位置时,才可有选择地使用TFTP.TFTP是一个非常易用的快捷的程序TFTP并不提供像FTP 那样的强大功能。p2p数据包传输协议是什么
P2P的问题很复杂,关于链路传输有如下几点供参考.1) 首先作为P2P的营运商,可以多设几台P2P种子服务器,分布在不同的网段中。比如:北方网通设一台(组),南方电信设一台(组),种子的内容是一样的。种子服务器多了,可以降低优化算法的难度。
(2) 种子服务器和普通节点的优先级:种子服务器的优先级总数低于普通节点的,如果普通节点的速度快了,就减少从种子服务器获取的数据量。
(3) 全球IP地址表。P2P节点仲裁服务器中,应该有一个全球IP地址表,分中国大陆、香港、台湾、北美、欧洲、澳洲、其它。中国大陆先按照营运商分:电信、网通、铁通、联通、教育网等,再按照省份分类。(网上有下载,可以整理)
(4) 高速网段表。在P2P访问中,节点动态地将速度快的其它节点IP地址传回服务器,服务器根据全球IP地址表算出网段,以网段-网段的方式记录在数据库中。
(5) 当一个新用户连入节点时,在全球IP地址表中找到最近的节点,按照比例依次分配最快网段的节点;最近的节点;差一个级别的稍近的节点;随机节点以及种子服务器。
(6) P2P在数据传送中,可以将30秒数据文件作为1块数据包;数据包中按照每16KB作为一个数据块。每个时间段(如2秒),本节点向其它节点交换一下数据块的传送情况,然后计算一下数据包中每个数据块的拥有率,优先传送拥有率低的数据块。在拥有率相当的情况下,随机选择。
(7) 在数据交换中,对于传送慢的节点,定期剔除,然后问节点仲裁服务器要新的节点。
(8) 如果数据包中小于10%的数据块没有传送完毕,在时间充足的情况下,对于余下的数据块,可以同一个数据块向多个节点请求。
(9) 节点仲裁服务器也会将新的P2P节点强行加载到另一个节点上,但不能超过节点最大连接数。
下面解释一下上面的文章中没有提及或者说我觉得比较欠缺的地方.
私有地址/端口和公有地址/端口:我们知道,现在大部分网络采用的都是NAPT(Network Address/Port Translator)了,这个东东的作用是一个对外的对话在经过NAT之后IP地址和端口号都会被改写,在这里把一次会话中客户自己认为在使用的IP地址和端口号成为私有地址/端口,而把经过NAPT之后被改写的IP地址和端口号称为公有地址/端口.或者可以这么理解,私有地址/端口是你家里人对你的昵称而公有地址/端口则是你真正对外公开的名字.如何获得用户的私用地址/端口号,这个很简单了,而要得到公有地址/端口号就要在连接上另一台机器之后由那台机器看到的IP地址和端口号来表示.
如果明白了上面的东西,下面进入我们的代码,在这里解释一下关键部分的实现:
客户端首先得到自己的私有地址/终端,然后向server端发送登陆请求,server端在得到这个请求之后就可以知道这个client端的公有地址/终端,server会为每一个登陆的client保存它们的私有地址/端口和公有地址/端口.
OK,下面开始关键的打洞流程.假设client A要向client B对话,但是A不知道B的地址,即使知道根据NAT的原理这个对话在第一次会被拒绝,因为client B的NAT认为这是一个从没有过的外部发来的请求.这个时候,A如果发现自己没有保存B的地址,或者说发送给B的会话请求失败了,它会要求server端让B向A打一个洞,这个B->A的会话意义在于它使NAT B认为A的地址/端口是可以通过的地址/端口,这样A再向B发送对话的时候就不会再被NAT B拒绝了.打一个比方来说明打洞的过程,A想来B家做客,但是遭到了B的管家NAT B的拒绝,理由是:我从来没有听我家B提过你的名字,这时A找到了A,B都认识的朋友server,要求server给B报一个信,让B去跟管家说A是我的朋友,于是,B跟管家NAT B说,A是我认识的朋友,这样A的访问请求就不会再被管家NAT B所拒绝了.简而言之,UDP打洞就是一个通过server保存下来的地址使得彼此之间能够直接通信的过程,server只管帮助建立连接,在建立间接之后就不再介入了.