#LyX 2.4 created this file. For more info see https://www.lyx.org/
\lyxformat 620
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
\textclass paper
\begin_preamble
% for subfigures/subtables
\usepackage[caption=false,font=footnotesize]{subfig}
\usepackage{textcomp}
\usepackage[
type={CC},
modifier={by-sa},
version={3.0},
]{doclicense}
\usepackage{bera}% optional: just to have a nice mono-spaced font
\usepackage{listings}
\usepackage{xcolor}
\lstset{
extendedchars=true,
literate={č}{{\v{c}}}1 {ž}{{\v{z}}}1 {š}{{\v{s}}}1,
}
\colorlet{punct}{red!60!black}
\definecolor{background}{HTML}{EEEEEE}
\definecolor{delim}{RGB}{20,105,176}
\colorlet{numb}{magenta!60!black}
\lstdefinelanguage{json}{
basicstyle=\normalfont\ttfamily,
numbers=left,
numberstyle=\scriptsize,
stepnumber=1,
numbersep=8pt,
showstringspaces=false,
breaklines=true,
frame=lines,
backgroundcolor=\color{background},
literate=
*{0}{{{\color{numb}0}}}{1}
{1}{{{\color{numb}1}}}{1}
{2}{{{\color{numb}2}}}{1}
{3}{{{\color{numb}3}}}{1}
{4}{{{\color{numb}4}}}{1}
{5}{{{\color{numb}5}}}{1}
{6}{{{\color{numb}6}}}{1}
{7}{{{\color{numb}7}}}{1}
{8}{{{\color{numb}8}}}{1}
{9}{{{\color{numb}9}}}{1}
{:}{{{\color{punct}{:}}}}{1}
{,}{{{\color{punct}{,}}}}{1}
{\{}{{{\color{delim}{\{}}}}{1}
{\}}{{{\color{delim}{\}}}}}{1}
{[}{{{\color{delim}{[}}}}{1}
{]}{{{\color{delim}{]}}}}{1},
}
\end_preamble
\options journal
\use_default_options false
\maintain_unincluded_children no
\language slovene
\language_package babel
\inputencoding utf8
\fontencoding auto
\font_roman "default" "default"
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_roman_osf false
\font_sans_osf false
\font_typewriter_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
\use_dash_ligatures false
\graphics default
\default_output_format default
\output_sync 0
\bibtex_command bibtex
\index_command default
\float_placement H
\float_alignment class
\paperfontsize default
\spacing single
\use_hyperref true
\pdf_title "Kaj prenašamo s protokolom BitTorrent?"
\pdf_author "Anton Lula Šijanec"
\pdf_subject "Računalniška omrežja"
\pdf_keywords "podazdeljena razpršilna tabela, porazdeljeni sistemi, omrežje P2P, podatkovno rudarjenje, BitTorrent"
\pdf_bookmarks true
\pdf_bookmarksnumbered true
\pdf_bookmarksopen true
\pdf_bookmarksopenlevel 1
\pdf_breaklinks false
\pdf_pdfborder true
\pdf_colorlinks false
\pdf_backref false
\pdf_pdfusetitle false
\pdf_quoted_options "pdfpagelayout=OneColumn, pdfnewwindow=true, pdfstartview=XYZ, plainpages=false"
\papersize default
\use_geometry true
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine basic
\cite_engine_type default
\biblio_style plain
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\justification true
\use_refstyle 0
\use_formatted_ref 0
\use_minted 0
\use_lineno 0
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 0.5cm
\topmargin 0.5cm
\rightmargin 0.5cm
\bottommargin 1.25cm
\headheight 0.5cm
\headsep 0.5cm
\footskip 0.5cm
\columnsep 0.5cm
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\is_math_indent 0
\math_numbering_side default
\quotes_style german
\dynamic_quotes 0
\papercolumns 2
\papersides 1
\paperpagestyle default
\tablestyle default
\tracking_changes false
\output_changes false
\change_bars false
\postpone_fragile_content false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\docbook_table_output 0
\docbook_mathml_prefix 1
\end_header
\begin_body
\begin_layout Title
Kaj prenašamo s protokolom BitTorrent?
\end_layout
\begin_layout Author
Anton Luka Šijanec,
\begin_inset CommandInset href
LatexCommand href
name "anton@sijanec.eu"
target "anton@sijanec.eu"
type "mailto:"
literal "true"
\end_inset
\end_layout
\begin_layout Institution
Fakulteta za računalništvo in informatiko Univerze v Ljubljani
\end_layout
\begin_layout Abstract
V članku predstavimo metodo za učinkovito in za omrežje neinvazivno metodo prenašanja metapodatkov iz pomožnega omrežja Kademlia mainline DHT protokola BitTorrent za izmenjavo datotek.
Sledi pregled/analiza z opisano metodo pridobljenih metapodatkov o datotekah na voljo v omrežju BitTorrent.
\end_layout
\begin_layout Abstract
Porazdeljene razpršilne tabele (angl.
distributed hash table) so razpršilne tabele,
ki podatke,
ponavadi so to dokumenti,
strukturirani kot vrednost in njej pripadajoči ključ,
hranijo distribuirano na več vozliščih,
na katerih se podatki shranjujejo.
V računalniških sistemih se DHT uporablja za hrambo podatkov v omrežjih P2P (angl.
peer to peer),
kjer se podatki vseh uporabnikov enakomerno porazdelijo med vozlišča in so tako decentralizirani in preprosto dostopni članom omrežja.
Ker se podatki izmenjujejo znotraj omrežja na vozliščih,
ki z izvorom in destinacijo podatkov niso povezani,
jih lahko vozlišča v velikih količinah shranjujejo za potrebe statistične analize omrežja.
\end_layout
\begin_layout Abstract
V raziskavi preverimo praktično zmožnost pridobivanja velike količine podatkov v omrežju BitTorrent za P2P izmenjavo datotek,
nato še analiziramo pridobljene podatke.
Vsaka poizvedba po seznamu imetnikov datotek vsebuje ključ podatka v DHT in se prenese preko okoli
\begin_inset Formula $\log_{2}n$
\end_inset
vozlišč,
kjer je
\begin_inset Formula $n$
\end_inset
število vseh uporabnikov v omrežju.
Ker vsaka poizvedba obišče tako veliko število vozlišč,
lahko med poizvedbo eno drugače nepovezano vozlišče prejme veliko obstoječih ključev v omrežju,
ki jih lahko uporabi za prenos metapodatkov v omrežju BitTorrent.
\end_layout
\begin_layout Abstract
Osredotočili smo se le na na pridobivanje metapodatkov v omrežju BitTorrent,
samih datotek,
na katere se le-ti metapodatki sklicujejo in so v omrežju na voljo,
ker jih ponujajo drugi računalniki,
pa tako vsled tehničnih (njihove ogromne skupne velikosti) kot tudi pravnih razlogov (avtorsko zaščitena in protizakonita vsebina) nismo prenašali.
Metapodatki konceptualno sicer niso shranjeni v DHT (namesto metapodatkov o datotekah so v omrežju shranjeni seznami računalnikov,
od katerih si metapodatke lahko prenesemo),
vendar odkrivanje njihovega obstoja omogoči DHT.
\end_layout
\begin_layout Abstract
S pridobljenimi metapodatki ugotovimo,
kateri odjemalci so najpopularnejši ter kakšna je razporeditev vsebine glede na tip datotek,
ki je na voljo preko protokola BitTorrent.
\end_layout
\begin_layout Keywords
porazdeljena razpršilna tabela,
porazdeljeni sistemi,
omrežje P2P,
\end_layout
\begin_layout Keywords
podatkovno rudarjenje,
BitTorrent
\end_layout
\begin_layout Section
Introduction
\end_layout
\begin_layout Subsection
Distribucija datotek po principu P2P
\end_layout
\begin_layout Standard
Koncept P2P (angl.
\shape italic
peer-to-peer
\shape default
) predstavlja alternativen način distribucije identičnih datotek večim odjemalcem.
Namesto enega strežnika,
ki iste podatke odjemalcem pošlje vsakič znova,
v omrežjih P2P za distribucijo datotek vsak odjemalec podatke tako prejema kot tudi pošilja.
Odjemalec prejeto vsebino tudi sam deli drugim te vsebine željanim odjemalcem,
s čimer razbremeni ostale odjemalce.
\end_layout
\begin_layout Standard
Odjemalec za druge izve s pomočjo centralnega strežnika ali pa drugačnega signalizacijskega protokola.
Ker se povezujejo neposredno,
medsebojno poznajo svoje internetne naslove.
\end_layout
\begin_layout Subsection
Protokol BitTorrent
\end_layout
\begin_layout Standard
Od 2008
\begin_inset CommandInset citation
LatexCommand cite
key "harrison07"
literal "false"
\end_inset
je eden izmed popularnejših protokolov za P2P distribucijo BitTorrent,
razvit že 2001
\begin_inset CommandInset citation
LatexCommand cite
key "cohen01"
literal "false"
\end_inset
.
Zaradi razširljive zasnove ga je moč dopolnjevati —
dodajati nove funkcije.
Sprva je BitTorrent temeljil na centralnih strežnikih za koordinacijo rojev,
od leta 2005 pa z uvedbo protokola DHT lahko deluje povsem neodvisno.
\begin_inset CommandInset citation
LatexCommand cite
key "jones15"
literal "false"
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Float table
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\noindent
\align center
\begin_inset Tabular
\begin_inset Text
\begin_layout Plain Layout
Pojem
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Angleško
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Razlaga
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
soležnik
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
peer
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
odjemni program na računalniku,
za povezavo nanj potrebujemo IP naslov in vrata
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
roj
\begin_inset CommandInset citation
LatexCommand cite
key "dis"
literal "false"
\end_inset
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
swarm
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
več soležnikov,
ki prenašajo datoteke nekega torrenta
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
torrent/
\begin_inset Newline newline
\end_inset
metainfo
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
torrent/
\begin_inset Newline newline
\end_inset
metainfo
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
datoteka z metapodatki datotek;
imena,
velikosti,
zgoščene vrednosti in drugo
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
sledilnik
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
tracker
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
koordinacijski strežnik z naslovi soležnikov v rojih
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
košček
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
piece
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
delček datoteke konstantne dolžine
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
infohash
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
infohash
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
zgoščena vrednost serializiranih podatkov pod ključem
\family typewriter
info
\family default
v torrentu,
ki unikatno opišejo ključne metapodatke o torrentu
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
objavi
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
announce
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
pošiljanje obvestila v DHT ali na sledilnik,
da se odjemalec želi priključiti nekemu roju
\end_layout
\end_inset
|
\end_inset
\begin_inset Caption Standard
\begin_layout Plain Layout
Slovar pojmov BitTorrenta
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Za prenos je treba poznati metapodatke o obstoječih datotekah,
ki so shranjeni v t.
i.
obliki .torrent,
strojno berljivi z bencoding serializirani datoteki.
Vsebujejo vsaj imena in poti datotek ter njihove zgoščene vrednosti,
ime torrenta,
lastnosti prenosa in velikost koščka.
\end_layout
\begin_layout Standard
V raziskavi ne iščemo soležnikov s sledilniki in ne prenašamo datotek,
temveč samo prenašamo in analiziramo metapodatke.
\end_layout
\begin_layout Subsection
Protokol Kademlia mainline DHT
\end_layout
\begin_layout Standard
V BitTorrent je za iskanje soležnikov v roju uporabljen DHT (angl.
\shape italic
distributed hash table
\shape default
),
ki odpravi odvisnost od sledilnika.
\end_layout
\begin_layout Standard
\begin_inset Float table
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\noindent
\align center
\begin_inset Tabular
\begin_inset Text
\begin_layout Plain Layout
Pojem
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Angleško
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
Razlaga
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
vozlišče
\begin_inset CommandInset citation
LatexCommand cite
key "dis"
literal "false"
\end_inset
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
node
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
odjemni program na računalniku
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
usmerjevalna
\begin_inset Newline newline
\end_inset
tabela
\begin_inset CommandInset citation
LatexCommand cite
key "dis"
literal "false"
\end_inset
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
routing
\begin_inset Newline newline
\end_inset
table
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
seznam vozlišč (IP,
vrata,
ID),
ki ga hrani posamezno vozlišče
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
ID vozlišča
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
node ID
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
160-bitna ob zagonu generirana naključna vozlišču pripadajoča številka
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
merilo
\begin_inset Newline newline
\end_inset
razdalje
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
distance
\begin_inset Newline newline
\end_inset
metric
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
funkcija (XOR),
ki izrazi razdaljo med vozliščema kot 160-bitno številko
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
koš
\begin_inset CommandInset citation
LatexCommand cite
key "dis"
literal "false"
\end_inset
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
bucket
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
element usmerjevalne tabele,
ki glede na merilo razdalje vsebuje bližnja vozlišča
\end_layout
\end_inset
|
\end_inset
\begin_inset Caption Standard
\begin_layout Plain Layout
Slovar pojmov Kademlie.
Slovenski prevodi niso ustaljeni.
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Na visokem nivoju gre za abstraktno razpršilno tabelo,
shranjeno porazdeljeno na velikem omrežju vozlišč.
Podpira naslednji operaciji
\begin_inset CommandInset citation
LatexCommand cite
key "norberg08"
literal "false"
\end_inset
:
\end_layout
\begin_layout Paragraph
\family typewriter
get_peers
\end_layout
\begin_layout Standard
Vrne seznam soležnikov (IP naslov in vrata) za torrent,
opisan z njegovim infohashom.
\end_layout
\begin_layout Paragraph
\family typewriter
announce
\begin_inset Note Note
status open
\begin_layout Plain Layout
qbittorrent pravi sporoči,
v deluge in transmission nisem našel prevoda
\end_layout
\end_inset
\end_layout
\begin_layout Standard
V seznam soležnikov za torrent,
opisan z njegovim infohashom,
vstavi IP naslov in vrata pošiljatelja zahteve.
\end_layout
\begin_layout Standard
V raziskavi s sodelovanjem v DHT prestrezamo obstoječe ključe v razpršilni tabeli,
z njimi pridobimo soležnike,
od katerih prenesemo metapodatke o torrentih za kasnejšo analizo.
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename /root/projects/sola-gimb-4/inf/rn/predst/dht.svg
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Shematski prikaz DHT
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Section
Opis standardov
\end_layout
\begin_layout Paragraph
Serializacija bkodiranje
\family typewriter
(bencoding)
\end_layout
\begin_layout Standard
V BEP-0003
\begin_inset CommandInset citation
LatexCommand cite
key "cohen08"
literal "false"
\end_inset
je opisan bencoding.
Z njim je serializirana večina struktur BitTorrenta in Kademlie.
Bkodiranje je podobno bolj znanemu JSONu
\begin_inset CommandInset citation
LatexCommand cite
key "pezoa2016foundations"
literal "false"
\end_inset
—
vsebuje štiri podatkovne tipe:
niz,
število,
seznam in slovar.
\end_layout
\begin_layout Paragraph
Datoteka metainfo/.torrent
\end_layout
\begin_layout Standard
Za distribucijo vsebine s protokolom BitTorrent ustvarimo .torrent datoteko,
bkodiran slovar z metapodatki,
nujnimi za prenos datotek.
Za raziskavo so pomembni metapodatki pod ključem
\family typewriter
info
\family default
:
\begin_inset CommandInset citation
LatexCommand cite
key "cohen08"
literal "false"
\end_inset
\end_layout
\begin_layout Itemize
\family typewriter
private
\family default
:
prepoved objavljanja preko DHT,
le preko sledilnikov (ti torrenti niso zajeti v raziskavi)
\begin_inset CommandInset citation
LatexCommand cite
key "harrison08"
literal "false"
\end_inset
\end_layout
\begin_layout Itemize
\family typewriter
name
\family default
:
ime torrenta oz.
datoteke za enodatotečne torrente
\end_layout
\begin_layout Itemize
\family typewriter
piece length
\family default
:
velikost koščka —
datoteke so spojene skupaj in razdeljene na enako velike koščke
\end_layout
\begin_layout Itemize
\family typewriter
pieces
\family default
:
niz dolžine
\begin_inset Formula $20n$
\end_inset
(
\begin_inset Formula $n$
\end_inset
je število koščkov) s SHA-1 vrednostmi koščkov
\begin_inset CommandInset citation
LatexCommand cite
key "Eastlake2001"
literal "false"
\end_inset
\end_layout
\begin_layout Itemize
\family typewriter
length
\family default
:
dolžina datoteke za enodatotečne torrente
\end_layout
\begin_layout Itemize
\family typewriter
files
\family default
:
seznam datotek v večdatotečnem torrentu —
vsaka datoteka je predstavljena kot slovar z
\family typewriter
length
\family default
in
\family typewriter
path
\family default
.
\end_layout
\begin_layout Standard
Kdor pozna infohash,
lahko od soležnika prenese metainfo in posledično tudi pripadajoče datoteke.
Roj najde in se vanj vključi s poizvedbo v DHT,
saj je infohash ključ v tej razpršilni tabeli
\begin_inset CommandInset citation
LatexCommand cite
key "hazel08"
literal "false"
\end_inset
.
Infohash običajno oblikujemo v t.
i.
magnetno povezavo (magnet URI):
\family typewriter
magnet:?dn=
\series bold
ime torrenta
\series default
&xt=urn:btih:
\series bold
infohash
\end_layout
\begin_layout Standard
Druga različica BitTorrenta ima drugačno metainfo strukturo s podobnimi podatki.
Uporablja SHA-256 in namesto
\family typewriter
pieces
\family default
uporablja
\family typewriter
merkle hash tree
\family default
\begin_inset CommandInset citation
LatexCommand cite
key "v2"
literal "false"
\end_inset
za zgoščene vrednosti datotek.
\end_layout
\begin_layout Paragraph
Graf DHT
\end_layout
\begin_layout Standard
DHT vzdržuje sezname soležnikov v roju vseh obstoječih torrentov.
Vozlišča komunicirajo preko UDP in so del velikega usmerjenega grafa,
vsako s
\begin_inset Formula $K\log_{2}n$
\end_inset
(konstanta
\begin_inset Formula $K=8$
\end_inset
,
\begin_inset Formula $n$
\end_inset
je število vseh vozlišč na svetu) povezavami —
vpisi v usmerjevalno tabelo.
\end_layout
\begin_layout Standard
Vozlišče skrbi za urejeno usmerjevalno tabelo dosegljivih
\begin_inset Foot
status open
\begin_layout Plain Layout
dvosmerna komunikacija zaradi NAT ni samoumevna
\end_layout
\end_inset
vozlišč v koših;
\begin_inset Formula $i$
\end_inset
ti koš hrani do
\begin_inset Formula $K$
\end_inset
med
\begin_inset Formula $2^{i}$
\end_inset
in
\begin_inset Formula $2^{i-1}$
\end_inset
po merilu XOR oddaljenih vozlišč,
torej je shranjenih veliko bližnjih in malo zelo oddaljenih vozlišč.
\begin_inset CommandInset citation
LatexCommand cite
key "maymounkov2002kademlia"
literal "false"
\end_inset
\end_layout
\begin_layout Paragraph
Poizvedbe po grafu
\end_layout
\begin_layout Standard
Sprehod po grafu med poljubnima vozliščema je torej dolg v povprečju
\begin_inset Formula $\log n$
\end_inset
(
\begin_inset Formula $n$
\end_inset
kot prej).
Roj torrenta z infohashom
\begin_inset Formula $x$
\end_inset
je shranjen na vozliščih z ID blizu
\begin_inset Formula $x$
\end_inset
,
tedaj ima poizvedba po soležnikih/objavljanje soležnika časovno kompleksnost
\begin_inset Formula $O\left(\log n\right)$
\end_inset
.
Za pridobitev seznama soležnikov torrenta pošljemo bkodiran UDP paket tipa
\family typewriter
get_peers
\family default
\begin_inset Formula $t$
\end_inset
\begin_inset Foot
status open
\begin_layout Plain Layout
odvisno od implementacije
\end_layout
\end_inset
vozliščem iz usmerjevalne tabele,
ki so blizu infohasha.
Pozvana vozlišča odgovorijo s seznamom do
\begin_inset Formula $K$
\end_inset
temu infohashu najbližjih vozlišč in seznamom soležnikov za ta torrent,
če ga imajo.
Novodobljenim vozliščem spet pošljemo poizvedbo
\family typewriter
get_peers
\family default
in postopek nadaljujemo,
dokler ne najdemo nekaj infohashu najbližjih vozlišč.
V tista pošiljamo objave in od njih še naprej prejemamo informacije o roju.
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename Dht_example_SVG.svg
width 50col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "fig:Usmerjevalna-tabela-za"
\end_inset
Usmerjevalna tabela za vozlišče 110 (koši so osenčeni)
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Section
Metode
\end_layout
\begin_layout Standard
Vsaka poizvedba obišče
\begin_inset Formula $\log n$
\end_inset
vozlišč,
torej vsako vozlišče v DHT prejema ogromno ključev —
infohashov.
V raziskavi v C spišemo program travnik,
nepopolno implementacijo odjemalca BitTorrent s poudarkom na DHT.
Osredotočimo se na zajem metapodatkov iz ključev,
ki jih prejmemo s sodelovanjem v omrežju.
\end_layout
\begin_layout Standard
Ko vozlišče,
na katerem teče travnik,
prejme paket z infohashom,
ga doda v seznam željenih torrentov.
Neprestano posodablja roje torrentov znanih infohashov in se povezuje na soležnike iz njih,
dokler mu ne uspe prenesti metapodatkov torrenta oziroma dokler ne obupa/preteče 256 sekundni TTL torrenta.
Izdeluje .torrent datoteke z najdenimi metapodatki in internetnim naslovom ter ime programske opreme soležnika,
od katerega je metapodatke prejel.
Ne objavlja se v roj,
ker ne redistribuira niti metapodatkov niti datotek.
\end_layout
\begin_layout Standard
Da program prvič začne sodelovati z omrežjem —
da ga sosednja vozlišča vpišejo v svoje usmerjevalne tabele —
prenese metapodatke vgrajenega torrenta
\family typewriter
Big Buck Bunny
\family default
.
\end_layout
\begin_layout Standard
Za implementacijo spišemo knjižnico za bkodiranje in bdekodiranje,
knjižnico za DHT in nekaj funkcij za prenos metapodatkov od soležnikov preko TCP.
\end_layout
\begin_layout Standard
Za obdelavo dobljenih torrent datotek uporabimo Jupyter Notebook
\begin_inset CommandInset citation
LatexCommand cite
key "Kluyver2016jupyter"
literal "false"
\end_inset
in spišemo preprosto knjižnico za razčlenjevanje .torrent metainfo datotek,
ki jih generira travnik.
\end_layout
\begin_layout Section
Rezultati
\end_layout
\begin_layout Subsection
Zajem
\end_layout
\begin_layout Standard
Podatke smo zajemali iz različnih lokacij in v različnih časovnih obdobjih.
\end_layout
\begin_layout Standard
\begin_inset Float table
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Tabular
\begin_inset Text
\begin_layout Plain Layout
mesto
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
datum
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
dni
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
torrentov
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
sek./torrent
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
T-2,
FTTH,
SI
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1.-2.
'23
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
16
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
47863
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
29
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
GRNET,
VPS,
GR
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
1.-2.
'23
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
31
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
412846
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
6
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
T-2,
FTTH,
SI
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
6.
'24
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
5
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
62110
\end_layout
\end_inset
|
\begin_inset Text
\begin_layout Plain Layout
7
\end_layout
\end_inset
|
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Omrežne lokacije in časovna obdobja zajemov.
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Metapodatki prvega zajema opisujejo 3084321 datotek v skupni velikosti 259 TiB,
metapodatki drugega zajema 17101702 datotek v velikosti 1881 TiB in metapodatki tretjega zajema 3725125 datotek v velikosti 345 TiB.
\begin_inset Note Note
status open
\begin_layout Plain Layout
januarja in februarja 2023:
\end_layout
\begin_layout Itemize
16 dni:
domači optični priključek v Sloveniji (T-2):
47863 torrentov (3084321 datotek,
259 TiB,
29 sekund na torrent)
\begin_inset Note Note
status open
\begin_layout Plain Layout
travnik
\end_layout
\end_inset
\end_layout
\begin_deeper
\begin_layout Itemize
31 dni VPS v Grčiji (grNet)
\begin_inset Note Note
status open
\begin_layout Plain Layout
1
\end_layout
\end_inset
:
\family roman
\series medium
\shape up
\size normal
\emph off
\nospellcheck off
\bar no
\strikeout off
\xout off
\uuline off
\uwave off
\noun off
\color none
412846
\family default
\series default
\shape default
\size default
\emph default
\nospellcheck default
\bar default
\strikeout default
\xout default
\uuline default
\uwave default
\noun default
\color inherit
torrentov (17101702 datotek,
1881 TiB,
6 sekund na torrent)
\begin_inset Note Note
status open
\begin_layout Plain Layout
okeanos
\end_layout
\end_inset
\begin_inset Note Note
status open
\begin_layout Plain Layout
XX dni VPS v Grčiji (grNet) 2:
342220 torrentov ()
\begin_inset Note Note
status open
\begin_layout Plain Layout
oliwerix
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\end_deeper
\begin_layout Itemize
5 dni junija 2024 na domačem optičnem priključku v Sloveniji (T-2):
62110 torrentov (3725125 datotek,
345 TiB,
7 sekund na torrent)
\begin_inset Note Note
status open
\begin_layout Plain Layout
2024b
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Primer strukture torrent datoteke z metapodatki
\end_layout
\begin_layout Standard
Spodaj je iz bencoding v JSON pretvorjena metainfo datoteka prevzetega torrenta z infohashom
\family typewriter
696802a16728636cd72617e4cd7b64e3ca314e71
\family default
.
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
lstinputlisting[language=json,firstnumber=1,
numbers=none,
breaklines=true,
basicstyle=
\backslash
tiny]{../../../../sola-gimb-4/inf/rn/predst/torrent.json}
\end_layout
\end_inset
\end_layout
\begin_layout Subsection
Analiza
\end_layout
\begin_layout Subsubsection
Odjemalci,
od katerih so bili prejeti torrenti
\end_layout
\begin_layout Standard
Imenom programom odstranimo različico in jim ročno normaliziramo ime
\begin_inset Foot
status open
\begin_layout Plain Layout
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
textmu Torrent
\end_layout
\end_inset
se sicer pojavi dvakrat,
enkrat ima znak mikro,
enkrat pa grško črko mu.
Unicode namreč ta dva znaka,
ki sicer izgledata identično,
hrani pod dvema različnima kodama.
\end_layout
\end_inset
ter prikažemo njihovo gostoto v populaciji.
\begin_inset CommandInset citation
LatexCommand cite
key "Hunter:2007"
literal "false"
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename /root/projects/sola-gimb-4/inf/rn/dok/odjemalci_1_ods.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Reprezentacija odjemalcev,
ki predstavljajo vsaj en odstotek populacije,
na logaritemski skali
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Različice odjemalca
\family typewriter
qBittorrent
\family default
skozi čas
\end_layout
\begin_layout Standard
Primerjava porazdelitve različic po zgornji analizi najpopularnejšega odjemalca na
\begin_inset Formula $\log_{10}$
\end_inset
skali pokaže višanje različic skozi čas.
\begin_inset Note Note
status open
\begin_layout Plain Layout
Različice smo razvrstili s pythonsko funkcijo
\family typewriter
packaging.version.Version
\family default
.
\end_layout
\end_inset
V obeh letih smo prejeli torrente od skupno 88 različnih inačic qBittorrenta.
V 2023 smo največ torrentov prejeli od odjemalcev različice 4.5.0,
v 2024 pa od odjemalcev različice 4.6.3.
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Note Note
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename /root/projects/r/šola/članki/dht/verzije2324.png
width 100col%
\end_inset
\end_layout
\end_inset
\begin_inset Graphics
filename /root/projects/r/šola/članki/dht/verzije2324promil.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Primerjava distribucij različic odjemalca
\family typewriter
qBittorrent
\family default
med 2023 (plavo) in 2024 (roza),
ki predstavljajo vsaj promil populacije (delež).
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Geolokacija IP naslovov odjemalcev
\end_layout
\begin_layout Standard
Z uporabo podatkovne zbirke MaxMind GeoLite2
\begin_inset CommandInset citation
LatexCommand cite
key "maxmindgeoip2"
literal "false"
\end_inset
IP naslovom,
od katerih smo prejeli torrente,
določimo izvirno državo.
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename countries_procent.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Reprezentativnost držav,
iz katerih smo prenesli metainfo,
na linearni skali.
Prikazane so le države,
iz katerih izvira vsaj odstotek populacije.
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Predstavnost ključev v prejetih slovarjih
\family typewriter
info
\end_layout
\begin_layout Standard
Poleg standardnih obveznih nekateri torrenti vsebujejo tudi dodatne metapodatke v slovarju info.
Pogostost slednjih prikazuje spodnji grafikon.
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename /root/projects/sola-gimb-4/inf/rn/dok/vsi_ključi.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Reprezentacija ključev v slovarju
\family typewriter
info
\family default
na logaritemski skali
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Subsubsection
Tipi datotek,
ki se prenašajo v torrentih
\end_layout
\begin_layout Standard
Iz končnice datoteke izvemo tip datoteke.
Vsakemu torrentu priredimo reprezentativen tip,
tisti,
ki po velikosti prevladuje v torrentu.
Glede na število torrentov z nekim reprezentativnim tipom kvantificiramo pogostost tega datotečnega tipa za tipe,
ki zavzemajo vsaj promil populacije.
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename /root/projects/sola-gimb-4/inf/rn/dok/reprezentativni_.1_ods.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Reprezentativni tipi torrentov,
ki predstavljajo vsaj en promil populacije,
na logaritemski skali
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
Razvidno je,
da je večina torrentov namenjena prenosu videovsebin,
zvočnih datotek in stisnjenih arhivov.
\end_layout
\begin_layout Standard
Če bi za določilo pojavnosti tipa uporabili število datotek,
bi prevladovali tipi vsebin,
ki so ponavadi preneseni kot kopica datotek,
denimo slike (diagram v prilogi na sliki
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:Pojavnost-tipa-kot"
plural "false"
caps "false"
noprefix "false"
nolink "false"
\end_inset
),
če pa bi za določilo pojavnosti tipa uporabili velikost datotek tega tipa,
pa bi prevladovali tisti tipi,
ki zasedajo več prostora.
V tem primeru bi npr.
videovsebine zaradi svoje velikosti občutno presegale digitalne knjige (diagram v prilogi na sliki
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:Pojavnost-tipa-kot-velikost"
plural "false"
caps "false"
noprefix "false"
nolink "false"
\end_inset
).
\end_layout
\begin_layout Standard
\begin_inset Note Note
status open
\begin_layout Subsubsection
\begin_inset CommandInset label
LatexCommand label
name "subsec:Porazdeljenost-infohashov"
\end_inset
Porazdeljenost infohashov
\end_layout
\begin_layout Plain Layout
Zaradi delovanja poizvedb v DHT pričakujemo,
da je porazdelitev infohashov po celotnem sprektru števil z intervala
\begin_inset Formula $\left[0,2^{160}-1\right]$
\end_inset
gostejša okoli IDja vozlišča,
ki ga je med prenašanjem imelo naše iskalno vozlišče.
IDje smo izbrali naključno na vsaki merilni lokaciji in jih med meritvijo tudi nekajkrat zamenjali,
zato spodnjem grafikonu opazimo vrhove tam,
kjer so bili naši IDji med zajemom podatkov.
\end_layout
\begin_layout Plain Layout
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Razporeditev pridobljenih infohashov na spektru vseh infohashov
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Subsection
Diskusija
\end_layout
\begin_layout Paragraph
Statistična kvaliteta vzorca
\end_layout
\begin_layout Standard
\begin_inset Note Note
status open
\begin_layout Plain Layout
V razdelku
\begin_inset CommandInset ref
LatexCommand ref
reference "subsec:Porazdeljenost-infohashov"
plural "false"
caps "false"
noprefix "false"
nolink "false"
\end_inset
opazimo neenakomerno porazdeljenost infohashov,
kar je posledica načina vzorčenja torrentov.
Vsa populacija ima namreč zaradi delovanja zgoščevalne funkcije SHA-1 homogeno porazdeljene infohashe.
Kljub temu trdimo,
da pridobljen vzorec torrentov dobro predstavlja celotno populacijo.
\end_layout
\end_inset
Zaradi lastnosti uniformne porazdelitve zgoščevalne funkcije
\begin_inset CommandInset citation
LatexCommand cite
after "5.2"
key "rfc4086"
literal "false"
\end_inset
mesto infohasha na intervalu vseh možnih infohashov ni odvisno od metapodatkov.
Kot posledico načina vzorčenja z DHT pričakujemo,
da je porazdelitev infohashov prejetih torrentov po celotnem sprektru števil z intervala
\begin_inset Formula $\left[0,2^{160}-1\right]$
\end_inset
gostejša okoli IDja vozlišča,
ki ga je med prenašanjem imelo naše iskalno vozlišče.
IDje smo tekom raziskave izbrali naključno na vsaki merilni lokaciji in jih med meritvijo tudi nekajkrat zamenjali.
Kljub temu je vsled nepovezanosti vsebine in infohasha vzorec še vedno statistično reprezentativen.
Zajem ne more biti pristranski glede na metapodatke,
ker nikjer v procesu zajema ne obravnavamo torrentov glede na metainfo,
temveč le glede na infohash.
\end_layout
\begin_layout Paragraph
Težava z zajemom podatkov
\end_layout
\begin_layout Standard
Vsled majhne velikosti UDP paketov DHT glavno ozko grlo pri zajemu predstavlja število paketov,
ki jih mrežna oprema lahko posreduje v sekundi.
Domača optična povezava dopušča do okoli 2000 paketov na sekundo na naključno porazdeljene IP naslove,
odjemno mesto na VPS pa je imelo to omejitev veliko višjo,
zato smo tam v istem časovnem intervalu shranili veliko več torrent datotek.
\end_layout
\begin_layout Paragraph
Etičnost in legitimnost rudarjenja podatkov
\end_layout
\begin_layout Standard
Čeprav gre za izrazito osebne podatke,
se morajo uporabniki BitTorrent omrežja zavedati,
da so njihovi prenosi
\shape italic
a priori
\shape default
javni,
tudi če jih nihče aktivno ne zajema.
Nekateri BitTorrent odjemalci uporabnike ob prvem zagonu o tem obvestijo.
\end_layout
\begin_layout Section
Priloge
\end_layout
\begin_layout Standard
Izvorna koda programa travnik in ipynb datotek za analizo podatkov je na voljo na
\begin_inset CommandInset href
LatexCommand href
name "http://ni.šijanec.eu./sijanec/travnik"
target "http://ni.šijanec.eu./sijanec/travnik"
literal "false"
\end_inset
.
\end_layout
\begin_layout Standard
Korpus zajetih metapodatkov je na voljo na
\begin_inset CommandInset href
LatexCommand href
name "rsync://b.sjanec.eu./travnik"
target "rsync://b.sijanec.eu./travnik"
type "other"
literal "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename po_številu_datotek.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "fig:Pojavnost-tipa-kot"
\end_inset
Pojavnost tipa kot število datotek
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Float figure
placement document
alignment document
wide false
sideways false
status open
\begin_layout Plain Layout
\begin_inset Graphics
filename /root/projects/sola-gimb-4/inf/rn/dok/po_velikosti_datotek.png
width 100col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
\begin_inset CommandInset label
LatexCommand label
name "fig:Pojavnost-tipa-kot-velikost"
\end_inset
Pojavnost tipa kot velikost datotek (tipi,
ki zavzamejo vsaj odstotek populacije)
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset bibtex
LatexCommand bibtex
btprint "btPrintCited"
bibfiles "/root/projects/r/šola/citati"
options "IEEEtran"
encoding "default"
\end_inset
\end_layout
\begin_layout Section*
Viri slik
\end_layout
\begin_layout Itemize
Slika
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:Usmerjevalna-tabela-za"
plural "false"
caps "false"
noprefix "false"
nolink "false"
\end_inset
:
Limaner:
nespremenjena,
izvorna pod CC BY-SA
\end_layout
\begin_layout Section*
Dovoljenje
\end_layout
\begin_layout Standard
\begin_inset ERT
status open
\begin_layout Plain Layout
\backslash
doclicenseImage[imagewidth=2cm]
\end_layout
\end_inset
\begin_inset Note Note
status open
\begin_layout Plain Layout
TODO:
preštej datoteke v oliwerix,
še enkrat nariši vse grafe upoštevajoč vse torrente,
primerjaj verzije med travnik in 2024b
\end_layout
\end_inset
\end_layout
\end_body
\end_document