呆萌的DHT协议(下)

上回书,我们已经知道了如何通过一台计算机的名字来找到一台计算机。接下来,我们需要找到资源。
具体方法如下:
1、为文件计算一个160位的二进制串。而且这种计算方案必须满足如下的要求:
每个文件计算出来的二进制串是唯一确定的,不同的文件计算出来的二进制串是不同的,文件一丁点的不一样都会在这串二进制上有所体现。
我们把这个二进制串叫做文件的哈希值
为什么要这样呢?你想,如果每一个文件都能映射成一个唯一确定的二进制串的话:
一者,这个哈希值可以作为这个文件的标识,帮助我们查找和区别每一个文件。二者,我们上次说了,计算机给自己起的名字是一个160位的二进制的随机数。而这个关于文件的二进制串不就很像一个电脑的名字了吗?
[下面这段作为拓充,可看可不看]
那么具体是怎么做的呢?为了方便大家理解,我来随便说一个简单粗暴的映射方案,以证明这样的映射是很方便。首先,文件是一个很长很长的二进制串,我们把这个文件每160位分一份。然后这个文件就变成了n个160位的二进制数了。然后把第一个160位二进制数与第二个二进制数相加,得到一个160位或161位的数。如果是161位,则舍去最高位。然后我们在把这个和与第三个二进制数相加。就这样一直加下去。并不断舍去超过160位的数字。最后就得到了一个与文件有关的160位二进制数了。类似于这样的方法我们称为哈希(hash)。实际运用中要比这个更复杂一点。事实上,在DHT中实现这步的方法叫做hash sha-1。
2、当你的电脑拥有或者正在下载一个文件的时候,必须把自己的ip地址告诉电脑名字与文件的哈希值最接近的电脑。
看到这里,机智的你应该明白了,为什么电脑的名字 和 文件的哈希 都要是160位二进制了,为的就是把文件和某一个电脑关联上。
3、当你想要某个文件的时候,电脑就会去找与文件的哈希值名字最相近的电脑,去问它哪些电脑上有这个文件。此电脑如果知道的话,就会返回拥有这个文件的电脑的ip地址。然后,你的电脑就会找这些有文件的电脑要文件啦。
来,让我们整理一下:
1、当某人得到了一个文件,比如"谭雅战记.mp4",他的电脑会为这个文件计算出一个名字,比如小鹏。
2、这个“某人”的电脑会把自己的ip地址告诉叫小鹏的电脑或者叫类似于小鹏这个名字的电脑。其实它不一定只向名字最接近小鹏的电脑发ip地址,它可能会向多台名字接近小鹏的电脑发自己的ip,告诉他们自己有谭雅战记。
3、当你想要谭雅战记的时候,先下载一个种子,种子里会有谭雅战记的哈希,也就是“小鹏”。然后你的电脑就会在DHT网络上找小鹏。最后找到名叫小鹏或类似小鹏电脑,它会告诉你那个“某人”有这个文件,并告诉你“某人”的ip。于是你将与那个“某人”建立连接,“某人”的电脑就会把谭雅战记传给你。
就是这样了,求关注,推荐,硬币,收藏!