呆萌的DHT協(xié)議(下)

上回書(shū),我們已經(jīng)知道了如何通過(guò)一臺(tái)計(jì)算機(jī)的名字來(lái)找到一臺(tái)計(jì)算機(jī)。接下來(lái),我們需要找到資源。
具體方法如下:
1、為文件計(jì)算一個(gè)160位的二進(jìn)制串。而且這種計(jì)算方案必須滿足如下的要求:
每個(gè)文件計(jì)算出來(lái)的二進(jìn)制串是唯一確定的,不同的文件計(jì)算出來(lái)的二進(jìn)制串是不同的,文件一丁點(diǎn)的不一樣都會(huì)在這串二進(jìn)制上有所體現(xiàn)。
我們把這個(gè)二進(jìn)制串叫做文件的哈希值
為什么要這樣呢?你想,如果每一個(gè)文件都能映射成一個(gè)唯一確定的二進(jìn)制串的話:
一者,這個(gè)哈希值可以作為這個(gè)文件的標(biāo)識(shí),幫助我們查找和區(qū)別每一個(gè)文件。二者,我們上次說(shuō)了,計(jì)算機(jī)給自己起的名字是一個(gè)160位的二進(jìn)制的隨機(jī)數(shù)。而這個(gè)關(guān)于文件的二進(jìn)制串不就很像一個(gè)電腦的名字了嗎?
[下面這段作為拓充,可看可不看]
那么具體是怎么做的呢?為了方便大家理解,我來(lái)隨便說(shuō)一個(gè)簡(jiǎn)單粗暴的映射方案,以證明這樣的映射是很方便。首先,文件是一個(gè)很長(zhǎng)很長(zhǎng)的二進(jìn)制串,我們把這個(gè)文件每160位分一份。然后這個(gè)文件就變成了n個(gè)160位的二進(jìn)制數(shù)了。然后把第一個(gè)160位二進(jìn)制數(shù)與第二個(gè)二進(jìn)制數(shù)相加,得到一個(gè)160位或161位的數(shù)。如果是161位,則舍去最高位。然后我們?cè)诎堰@個(gè)和與第三個(gè)二進(jìn)制數(shù)相加。就這樣一直加下去。并不斷舍去超過(guò)160位的數(shù)字。最后就得到了一個(gè)與文件有關(guān)的160位二進(jìn)制數(shù)了。類似于這樣的方法我們稱為哈希(hash)。實(shí)際運(yùn)用中要比這個(gè)更復(fù)雜一點(diǎn)。事實(shí)上,在DHT中實(shí)現(xiàn)這步的方法叫做hash sha-1。
2、當(dāng)你的電腦擁有或者正在下載一個(gè)文件的時(shí)候,必須把自己的ip地址告訴電腦名字與文件的哈希值最接近的電腦。
看到這里,機(jī)智的你應(yīng)該明白了,為什么電腦的名字 和 文件的哈希 都要是160位二進(jìn)制了,為的就是把文件和某一個(gè)電腦關(guān)聯(lián)上。
3、當(dāng)你想要某個(gè)文件的時(shí)候,電腦就會(huì)去找與文件的哈希值名字最相近的電腦,去問(wèn)它哪些電腦上有這個(gè)文件。此電腦如果知道的話,就會(huì)返回?fù)碛羞@個(gè)文件的電腦的ip地址。然后,你的電腦就會(huì)找這些有文件的電腦要文件啦。
來(lái),讓我們整理一下:
1、當(dāng)某人得到了一個(gè)文件,比如"譚雅戰(zhàn)記.mp4",他的電腦會(huì)為這個(gè)文件計(jì)算出一個(gè)名字,比如小鵬。
2、這個(gè)“某人”的電腦會(huì)把自己的ip地址告訴叫小鵬的電腦或者叫類似于小鵬這個(gè)名字的電腦。其實(shí)它不一定只向名字最接近小鵬的電腦發(fā)ip地址,它可能會(huì)向多臺(tái)名字接近小鵬的電腦發(fā)自己的ip,告訴他們自己有譚雅戰(zhàn)記。
3、當(dāng)你想要譚雅戰(zhàn)記的時(shí)候,先下載一個(gè)種子,種子里會(huì)有譚雅戰(zhàn)記的哈希,也就是“小鵬”。然后你的電腦就會(huì)在DHT網(wǎng)絡(luò)上找小鵬。最后找到名叫小鵬或類似小鵬電腦,它會(huì)告訴你那個(gè)“某人”有這個(gè)文件,并告訴你“某人”的ip。于是你將與那個(gè)“某人”建立連接,“某人”的電腦就會(huì)把譚雅戰(zhàn)記傳給你。
就是這樣了,求關(guān)注,推薦,硬幣,收藏!