看到一个kad技术的资料求解

杀猪客

1楼 大 中 小 发表于 2010-4-21 23:34 只看该作者

看到一个kad技术的资料求解

来自百度的kad解释:http://baike.baidu.com/view/299343.htm?fr=ala0_1

第二段:

可能很多朋友会关注, kad网络没有高低id的计算原则,是否对于低id来言就畅通无阻了呢?

我们大家知道在ed2k网络里面,我们的id是通过ip进行如下的算法计算得出的

设我们的IP = A.B.C.D

那么我们的ID number= A + 256B + 256256C + 256256256D

low ID的产生是由于我们的ID计算结果小于16777216.

即 ID number= A + 256B + 256256C + 256256256D < 16777216

请问这个id numer和ip数之间是什么关系?是一对一的关系吗?如果是ip数,那就是简单的256的4次方啊,这个加法式子如何理解呢?

请教技术员。先谢谢了。


Terminusbot 整理,讨论请前往 2049bbs.xyz


02304H

10001100000100B

2楼 大 中 小 发表于 2010-4-22 00:35 只看该作者

(本人小白)

a + b « 8 + c « 16 + d « 24

我怎么觉得好像倒了……

按这个说法,就是ip最后一部分(二进制8位)不能是0,这个……对吗……

--

如果反过来的话:a « 24 + b « 16 + c « 8 + d 那就是32位的ip地址

网络设备内,ip就是这种形式

a.b.c.d其实是方便人看的表示方法

杀猪客

3楼 大 中 小 发表于 2010-4-22 00:48 只看该作者

又回头看了一遍上下文,明白了,就是说他随便设了一个办法来做id代码。

晕死了,百度尽是这种无聊人,这公式列出来作甚啊。你爱怎么定id怎么定。

这帖子作废。

作者愚昧,文字表达非常不达意。加个“例如”两字很麻烦吗?我也愚昧,

读太快没细看前文,直接看到公式开始迷糊。

太搞笑了。

[ 本帖最后由 杀猪客 于 2010-4-22 00:50 编辑 ]

02304H

10001100000100B

4楼 大 中 小 发表于 2010-4-22 01:06 只看该作者

貌似不是“例如”唉

5.1. HighID and LowID

-————————

The match the client IP address in case of high ID, so if the ID

value is stored in hexadecimal as 0xAABBCCDD, the IP is DD.CC.BB.AA.

The is a low ID when it is below 16777216, so the last low ID is

0x00FFFFFF, every IP that end with a 0 is considered as a low ID.

我倒是搞不懂了……

为啥要用最后一位是0来判断……和内网外网又有什么关系……

杀猪客

5楼 大 中 小 发表于 2010-4-22 03:39 只看该作者

引用:

原帖由 10293817 于 2010-4-22 01:06 发表

貌似不是“例如”唉

5.1. HighID and LowID

-————————

The match the client IP address in case of high ID, so if the ID

value is stored in hexadecimal as 0xAABBCCDD, the IP is DD.CC.B …

这个判别界别数字16777216=256×256×256

所以按照ed2k的id公式,只有ip4的最后一个数字也就是A.B.C.D的D=0的时候,也就是你引的说明里那个10位的

16进制代码中的第三和第四位是00的时候才会是lowID。否则算出来的id都

将大于16777216.至于为什么要以这个数字为界,俺不是很明白,也还在琢磨中。不知道你是否清楚。现在只知道

这个lowID不是电驴的问题,而是因为英特网的基本结构导致。

至于内网和外网的差别问题,看一些资料是英特网结构所导致的lowID用户的下载源减少

所以导致资料说的“所以内网用户在使用的时候依旧无法达到内网用户完全穿透网络的效果”?

参考这个:http://www.emule.org.cn/topic/lowid/

另外你这段英文注解来自何处?让我也看看全文。帮助我理解多点。

俺也是小白啊,今晚看到kad,才在百度里阅读了点资料,只能等方家解答了,惭愧。

[ 本帖最后由 杀猪客 于 2010-4-22 05:07 编辑 ]

02304H

10001100000100B

6楼 大 中 小 发表于 2010-4-22 12:37 只看该作者

回复 5楼 杀猪客 的话题

google搜到的

http://sourceforge.net/projects/ … ocol-0.6.2/download

非官方……

-—

内外网这个,内网用户之间不能直连

我不明白的是为什么ip最后一位为0可以作为判别内外网的标准

-—

wikipedia

Users who cannot be reached from the outside because they are firewalled,

behind a NAT device that has not been correctly port forwarded or their IP

address ends with a zero (e.g. 123.45.67.0)[3] get a “Low ID” from the

servers. They are still able to upload and download but need the help of

servers or other kad clients to be reached by other clients. Since they cannot

be notified that they are in front of an upload queue, they have to poll peers

if an upload slot is available. Since they cannot connect to any other Low ID

clients, they see only 40%-60% [4] of the clients that a High ID can see.

Their IP/ports are not exchanged between other peers, limiting their

possibilities for finding sources via eMule’s pure-P2P source exchange.

NAT这个可以理解,内网用户可能没有固定的公网IP和端口

但是0是什么意思……

[ 本帖最后由 10293817 于 2010-4-22 12:52 编辑 ]

DaemonEye

不河蟹的围观团团员

7楼 大 中 小 发表于 2010-4-22 12:49 只看该作者

我如果没记错 判断高低id并不是kad时候决定 而是在登陆服务器判断的把

02304H

10001100000100B

8楼 大 中 小 发表于 2010-4-22 12:53 只看该作者

回复 7楼 DaemonEye 的话题

对,这里说的其实是ed2k协议

DaemonEye

不河蟹的围观团团员

9楼 大 中 小 发表于 2010-4-22 13:04 只看该作者

如果靠乘法我感觉不靠谱 192.168.200.200这样得局域网地址乘出来 可能远比211.100.100.100大

02304H

10001100000100B

10楼 大 中 小 发表于 2010-4-22 13:48 只看该作者

回复 9楼 DaemonEye 的话题

那个其实是移位,*256是二进制左移八位

那个计算的结果就是把ip最后一部分放到最高位

16777216 是 00000001 00000000 00000000 00000000

所以只要ip最后一部分(二进制8位)不为零就一定比它大,跟其他无关

[ 本帖最后由 10293817 于 2010-4-22 13:51 编辑 ]

gfw444

11楼 大 中 小 发表于 2010-4-22 13:53 只看该作者

请看维基百科的相关词条,讲的很详细

02304H

10001100000100B

12楼 大 中 小 发表于 2010-4-22 15:09 只看该作者

回复 11楼 gfw444 的话题

没有讲为什么是0……引用里有一篇官网的讨论,但也没有讲清楚

当然 也可能是我没看到,求链接指引