首页 | 乐园 | 淘宝店 | 社区 | 电驴 | 网页游戏 | 网址大全

VeryCD / 社区 / 电驴软件开发

资源管理小组

相关主题

主题: 关于kad网络中ID的一些想法

相关分类: kad

kudouman (楼主) 2009/06/23 15:16:57 顶楼 举报

在kad网络中,HashID的值生成有一定的随机性,这就可能造成跨域网段或是南北网段的Nodes会相互成为邻居节点,显然这样的节点应该没有“邻居性”可言。所以我在想,是不是可以把HashID的生成通过我们的程序去控制生成,比如hashID的生成为外网ip + 内网ip,对于距离的比较,我们可以比较网段或是ip的范围,从而确定Nodes之间的距离,这样从而更好的选取邻居节点。希望kad的爱好者们畅所欲言,是否有可行性?有什么技术障碍?

分享到开心网  分享到校内  收藏到QQ书签    订阅本主題RSS更新  美味书签

patricxu 2009/06/24 22:51:16 2楼 举报

我正在为这个问题而困惑。自己没有找到ID生成的代码。楼主可知道?


[0] [0] [回复]

kudouman (楼主) 2009/06/25 09:15:26 3楼 举报

引用(patricxu @ 2009-06-24, 10:51 PM) *
我正在为这个问题而困惑。自己没有找到ID生成的代码。楼主可知道?


电驴里的源代码:
1.
m_uClientID.SetValueRandom();

CUInt128& CUInt128::SetValueRandom()
{
AutoSeededRandomPool rng;
byte byRandomBytes[16];
rng.GenerateBlock(byRandomBytes, 16);
SetValueBE( byRandomBytes );
return *this;
}

2.
m_uClientHash.SetValue((uchar*)thePrefs.GetUserHash());

void CPreferences::CreateUserHash()
{
try
{
do {
/*
for (int i = 0; i < 8; i++)
{
uint16 random = GetRandomUInt16();
memcpy(&userhash[i*2], &random, 2);
}
*/

Kademlia::CUInt128 u128;
u128.SetValueRandom();
memcpy(userhash,u128.GetData(),16);

// mark as emule client. that will be need in later version
userhash[5] = 14;
userhash[14] = 111;

} while(CGlobalVariable::dlp && CGlobalVariable::dlp->IsDLPavailable() && CGlobalVariable::dlp->DLPCheckUserhash(userhash) != NULL );
}
catch (...)
{
}
}


[0] [0] [回复]

patricxu 2009/06/25 10:16:19 4楼 举报

谢谢楼主!以前我看到一本文献说ID是根据硬件生成的。于是看了代码后觉得很困惑,我太教条了。


[0] [0] [回复]

patricxu 2009/06/25 10:28:31 5楼 举报

关于楼主的问题我的看法是:Hash函数本来就是一种单向的随机映射,即使同一网段的主机映射出来的结果也会大不相同的。现在网络模式可以大体分为两部分,一种是基于物理位置的,即通常的IP;另一种是基于逻辑位置的,就比如KAD。两种模式的结合体还没有出现。不过学术界正在研究这种混合体。


[0] [0] [回复]

kudouman (楼主) 2009/06/25 11:04:28 6楼 举报

引用(patricxu @ 2009-06-25, 10:28 AM) *
关于楼主的问题我的看法是:Hash函数本来就是一种单向的随机映射,即使同一网段的主机映射出来的结果也会大不相同的。现在网络模式可以大体分为两部分,一种是基于物理位置的,即通常的IP;另一种是基于逻辑位置的,就比如KAD。两种模式的结合体还没有出现。不过学术界正在研究这种混合体。

现在我的想法就是想在kad网络中,他们的逻辑位置能根据物理位置(ip)去确定。我看过p4p的一些技术文档,跟这个有些共通的东西。


[0] [0] [回复]

patricxu 2009/06/25 19:15:40 7楼 举报

引用(kudouman @ 2009-06-25, 11:04 AM) *
引用(patricxu @ 2009-06-25, 10:28 AM) *
关于楼主的问题我的看法是:Hash函数本来就是一种单向的随机映射,即使同一网段的主机映射出来的结果也会大不相同的。现在网络模式可以大体分为两部分,一种是基于物理位置的,即通常的IP;另一种是基于逻辑位置的,就比如KAD。两种模式的结合体还没有出现。不过学术界正在研究这种混合体。

现在我的想法就是想在kad网络中,他们的逻辑位置能根据物理位置(ip)去确定。我看过p4p的一些技术文档,跟这个有些共通的东西。

如果那样的话KAD就不会再叫KAD了吧。


[0] [0] [回复]

kudouman (楼主) 2009/06/26 11:49:46 8楼 举报

引用(patricxu @ 2009-06-25, 07:15 PM) *
引用(kudouman @ 2009-06-25, 11:04 AM) *
引用(patricxu @ 2009-06-25, 10:28 AM) *
关于楼主的问题我的看法是:Hash函数本来就是一种单向的随机映射,即使同一网段的主机映射出来的结果也会大不相同的。现在网络模式可以大体分为两部分,一种是基于物理位置的,即通常的IP;另一种是基于逻辑位置的,就比如KAD。两种模式的结合体还没有出现。不过学术界正在研究这种混合体。

现在我的想法就是想在kad网络中,他们的逻辑位置能根据物理位置(ip)去确定。我看过p4p的一些技术文档,跟这个有些共通的东西。

如果那样的话KAD就不会再叫KAD了吧。
怎么会呢,重新定义NodesID,只是为了在距离上更具有“可视性”。


[0] [0] [回复]

patricxu 2009/06/26 12:41:37 9楼 举报

我也在想如果把两者综合一下,可能提高网络的效率。
楼主觉得KAD抵御DDOS的能力怎样?


[0] [0] [回复]

rapator 2009/07/08 09:10:06 10楼 举报

ddddddddddddd


[0] [0] [回复]

daydreamer-x 2009/07/09 16:29:11 11楼 举报

会不会很多东西搜不到


[0] [0] [回复]

ymswytjh 2009/07/13 15:03:35 12楼 举报

引用(patricxu @ 2009-06-25, 10:28 AM) *
关于楼主的问题我的看法是:Hash函数本来就是一种单向的随机映射,即使同一网段的主机映射出来的结果也会大不相同的。现在网络模式可以大体分为两部分,一种是基于物理位置的,即通常的IP;另一种是基于逻辑位置的,就比如KAD。两种模式的结合体还没有出现。不过学术界正在研究这种混合体。


有一种模式 在华为还是中兴的一份专利申请公开书中看到的:
客户端连接到超级节点,超级节点之间建立kad式的分布式网络,客户端的搜索请求通过超级节点转发,


[0] [0] [回复]

patricxu 2009/07/17 23:21:36 13楼 举报

引用(kudouman @ 2009-06-25, 09:15 AM) *
引用(patricxu @ 2009-06-24, 10:51 PM) *
我正在为这个问题而困惑。自己没有找到ID生成的代码。楼主可知道?


电驴里的源代码:
1.
m_uClientID.SetValueRandom();

CUInt128& CUInt128::SetValueRandom()
{
AutoSeededRandomPool rng;
byte byRandomBytes[16];
rng.GenerateBlock(byRandomBytes, 16);
SetValueBE( byRandomBytes );
return *this;
}


再向楼主请教一个问题:SetValueBE( byRandomBytes );的BE是什么含义?(与此对应的还有一个函数SetValue();)


[0] [0] [回复]

raokaihua 2009/07/30 11:01:46 14楼 举报

我个人人为:128位Id很有前瞻性,IPV6就是128位,当所有设备抖有唯一IP地址时,Kad中的ID号根本不用随机产生,直接用IP地址好了。但有个疑问:那时候kad还有意义吗?


[0] [0] [回复]

kudouman (楼主) 2009/07/31 09:35:57 15楼 举报

引用(patricxu @ 2009-07-17, 11:21 PM) *
引用(kudouman @ 2009-06-25, 09:15 AM) *
引用(patricxu @ 2009-06-24, 10:51 PM) *
我正在为这个问题而困惑。自己没有找到ID生成的代码。楼主可知道?


电驴里的源代码:
1.
m_uClientID.SetValueRandom();

CUInt128& CUInt128::SetValueRandom()
{
AutoSeededRandomPool rng;
byte byRandomBytes[16];
rng.GenerateBlock(byRandomBytes, 16);
SetValueBE( byRandomBytes );
return *this;
}


再向楼主请教一个问题:SetValueBE( byRandomBytes );的BE是什么含义?(与此对应的还有一个函数SetValue();)

具体是设置字节位的。具体就是把byRandomBytes 空间位置跟CUInt128类中的m_uData数组对应起来。而SetValue只是把CUInt128类中的m_uData数组中的第四个元素用ULONG数据进行填充。具体看源代码。


[0] [0] [回复]

kudouman (楼主) 2009/07/31 09:38:39 16楼 举报

引用(raokaihua @ 2009-07-30, 11:01 AM) *
我个人人为:128位Id很有前瞻性,IPV6就是128位,当所有设备抖有唯一IP地址时,Kad中的ID号根本不用随机产生,直接用IP地址好了。但有个疑问:那时候kad还有意义吗?

意义还是有的,比如说保持兼容性。假如ipv6普及的话,谁都会拥有一个真正的独立ip了。可是企业不会这样做。为何?安全性问题。


[0] [0] [回复]

kudouman (楼主) 2009/07/31 09:41:26 17楼 举报

引用(ymswytjh @ 2009-07-13, 03:03 PM) *
引用(patricxu @ 2009-06-25, 10:28 AM) *
关于楼主的问题我的看法是:Hash函数本来就是一种单向的随机映射,即使同一网段的主机映射出来的结果也会大不相同的。现在网络模式可以大体分为两部分,一种是基于物理位置的,即通常的IP;另一种是基于逻辑位置的,就比如KAD。两种模式的结合体还没有出现。不过学术界正在研究这种混合体。


有一种模式 在华为还是中兴的一份专利申请公开书中看到的:
客户端连接到超级节点,超级节点之间建立kad式的分布式网络,客户端的搜索请求通过超级节点转发,

这个想法挺不错。曾经看过一片论文,讲的就是优化kad网络,在kad网络中加入超级节点的。具体论文的内容,可以随时提供给给位,如要索取,请留下email。


[0] [0] [回复]


返回组首页

快速回复

(?) 附件上传

关于我们 | 诚聘英才 | 著作权声明 | 合作信息 | 广告事务
沪ICP备05001009号
©2003 - 2009 VeryCD.com Some Rights Reserved.