M configure.ac +25 -0
@@ 1340,5 1340,30 @@ AC_CONFIG_FILES([kreatives/kritzelkratze
AC_CONFIG_FILES([kreatives/best-thing-today--2025--01--klein.png:kreatives/best-thing-today--2025--01--klein.png
kreatives/best-thing-today--2025--01.png:kreatives/best-thing-today--2025--01.png])
+
+AC_CONFIG_FILES([software/p2p-talk.org:software/p2p-talk.org
+ software/bittorrent-struktur.png:software/bittorrent-struktur.png
+ software/freenet-fetchpull-get.png:software/freenet-fetchpull-get.png
+ software/freenet-fetchpull-put.png:software/freenet-fetchpull-put.png
+ software/freenet-link-length.png:software/freenet-link-length.png
+ software/freenet-peer-count.png:software/freenet-peer-count.png
+ software/freenet-weekly-uptime.png:software/freenet-weekly-uptime.png
+ software/gnutella-suche.png:software/gnutella-suche.png
+ software/in-view-of-multitasking-sana2013.png:software/in-view-of-multitasking-sana2013.png
+ software/kademlia-peers-full.png:software/kademlia-peers-full.png
+ software/kademlia-peers.png:software/kademlia-peers.png
+ software/Limewire-screen-wikimedia-GPL.png:software/Limewire-screen-wikimedia-GPL.png
+ software/overlay-structured.png:software/overlay-structured.png
+ software/overlay-unstructured.png:software/overlay-unstructured.png
+ software/p2p-grundprobleme-schwarz-einstieg.png:software/p2p-grundprobleme-schwarz-einstieg.png
+ software/p2p-grundprobleme-schwarz-kommunikation.png:software/p2p-grundprobleme-schwarz-kommunikation.png
+ software/p2p-grundprobleme-schwarz-suche.png:software/p2p-grundprobleme-schwarz-suche.png
+ software/p2p-grundprobleme-schwarz-verteilung.png:software/p2p-grundprobleme-schwarz-verteilung.png
+ software/schluessel-zum-licht.png:software/schluessel-zum-licht.png
+ software/twitter-torrent-mesh.png:software/twitter-torrent-mesh.png
+ software/twitter-torrent-ring.png:software/twitter-torrent-ring.png
+ software/vorlesung-verteilte-systeme-1-p2p-nup-thumb.png:software/vorlesung-verteilte-systeme-1-p2p-nup-thumb.png
+ software/vorlesung-verteilte-systeme-1-p2p-thumb.png:software/vorlesung-verteilte-systeme-1-p2p-thumb.png])
+
AC_OUTPUT
M +231 -240
@@ 4,37 4,7 @@
:FEEDSTATUS:
(("https://rollenspiel.social/@ArneBab/113802683660413999" t
"f8dfedd4c945cfacda6e351016aa5da3c5577237")
("https://rollenspiel.social/@ArneBab/113802736042695489" t
"c6775cfd97aab8b3e17d7d88f6d295a1ed2e0122")
("https://rollenspiel.social/@ArneBab/113804530697844236" t
"60fd6921ce21110d4ad2e0de71d4698af8326137")
("https://rollenspiel.social/@ArneBab/113810099277961267" t
"3ee579004f97341b704bbe2bd667d585fcff2524")
("https://rollenspiel.social/@ArneBab/113810461037945052" t
"8ab57c33147101dce17dea0ddf988cb415b56c8e")
("https://rollenspiel.social/@ArneBab/113810468099136849" t
"655ab27b6b03cf51d9ee0a957b3901b4a6099a41")
("https://rollenspiel.social/@ArneBab/113815176144832507" t
"87f2cf3d48b73746037d3ef654854525b2da0fe1")
("https://rollenspiel.social/@ArneBab/113820918290284886" t
"9e19aa60beb60a11f939f06a792cc1e274751bb8")
("https://rollenspiel.social/@ArneBab/113825369189972831" t
"e630c1a9ea0f3c9b9d84fea70d62c4f8138ff5f1")
("https://rollenspiel.social/@ArneBab/113826403839562938" t
"cff6e9575326022cd824aba9dbea3e0b8fb052cd")
("https://rollenspiel.social/@ArneBab/113828705971349946" t
"5b722347c147a6fd8d5eefd7c5be40c624eac551")
("https://rollenspiel.social/@ArneBab/113831014106523590" t
"5fde2130123bbaf834c83cf3c1766ca09b7bed61")
("https://rollenspiel.social/@ArneBab/113834047469588499" t
"511bed1af21037428a57ed616e7301de72dadf36")
("https://rollenspiel.social/@ArneBab/113834573775643340" t
"1f0e4aa11e303b9907ae8a2b316510f2f28a1cc0")
("https://rollenspiel.social/@ArneBab/113836322478249170" t
"f256919298aaa51937b5ecaaadc4f2c8ceea7219")
("https://rollenspiel.social/@ArneBab/113836889080343329" t
(("https://rollenspiel.social/@ArneBab/113836889080343329" t
"6d81c84d95e09fa5b5463c00ffa82d1c3ec62e9f")
("https://rollenspiel.social/@ArneBab/113837072599602692" t
"c2a10d4a2e45295cf4ac340bf8b5fb10e96e001f")
@@ 43,8 13,237 @@
("https://rollenspiel.social/@ArneBab/113857335924739638" t
"62ebc0f669a83b782c63e15f6ce534a4f72bc9ae")
("https://rollenspiel.social/@ArneBab/113862444017515654" t
"96f643d39d367da72bd582215be91138ed51644e"))
"96f643d39d367da72bd582215be91138ed51644e")
("https://rollenspiel.social/@ArneBab/113862522882588680" t
"9d84ee99ccda86b2dd5f3db359ef8d1e065d9d31")
("https://rollenspiel.social/@ArneBab/113862689812377315" t
"cea09fc0e0ba6223ab607413692556de86040f34")
("https://rollenspiel.social/@ArneBab/113862985363405623" t
"509148de10f99e1d238fea8d3bb37ec4ee112e3f")
("https://rollenspiel.social/@ArneBab/113863117143343054" t
"f9b426601ef910160685f3c8e1e86754a32cdcb8")
("https://rollenspiel.social/@ArneBab/113864923555987034" t
"2a8a3d5080c0ef157ed9a7b807374d521428d295")
("https://rollenspiel.social/@ArneBab/113868422760431301" t
"1ecb5e9e4166af3c15cb1064d71bb744ed01f4e2")
("https://rollenspiel.social/@ArneBab/113870791778314322" t
"d9b619b849b155650ab373aaeb06fec70d290002")
("https://rollenspiel.social/@ArneBab/113872321128551737" t
"18f1ccca18dae13c84fa3981da5e42636b40240c")
("https://rollenspiel.social/@ArneBab/113874640566841609" t
"d1f527d6d5a626030a68d743748d6288c5827409")
("https://rollenspiel.social/@ArneBab/113881837936381410" t
"a78415f35557579bbcfc9499a30f5fe202bc246e")
("https://rollenspiel.social/@ArneBab/113885442695794369" t
"5b6e08149f4b97df804b1329697031b1b60ba53b")
("https://rollenspiel.social/@ArneBab/113885457851672166" t
"76439de6f5a87cb26df7843ae0929f1f39c3388a")
("https://rollenspiel.social/@ArneBab/113885545779911246" t
"19fc39f5e3a2b303339a4d0c83916cfcbca7b6eb")
("https://rollenspiel.social/@ArneBab/113889098376960891" t
"d0037d0725cc719deca74b1e5b0fc62ce850e708")
("https://rollenspiel.social/@ArneBab/113889443214974890" t
"8dd621ba229dc18fd694070aab23bb2d34280a11"))
:END:
** [2025-01-25 Sa 14:23]
#Taz: Merz’ Anbiederung an die AfD
Das war’s mit der Brandmauer
https://taz.de/Merz-Anbiederung-an-die-AfD/!6061889/
Dem ist nichts hinzuzufügen außer #noCDU und stellt euch den Horror
vor, wenn CDU und AfD zusammen >50% haben sollten.
[[https://rollenspiel.social/@ArneBab/113889443214974890]]
** [2025-01-25 Sa 12:55]
Wenn ein Antrag nur mit Stimmen der #noAfD Erfolg haben kann und dann
mit diesen Stimmen durch geht, ist das Zusammenarbeit mit der AfD.
Egal, was CDU-Politiker behaupten.
[[https://rollenspiel.social/@ArneBab/113889098376960891]]
** [2025-01-24 Fr 21:52]
Youtube bietet einen *Familientarif* an, nachdem ich ImperiumHymns
"The Hymn Of Death" starte.
Das würde doch bei einem Buchplot auch wieder als unplausibel
abgelehnt.
[[https://rollenspiel.social/@ArneBab/113885545779911246]]
** [2025-01-24 Fr 21:29]
Schlund und Murks.
[[https://rollenspiel.social/@ArneBab/113885457851672166]]
** [2025-01-24 Fr 21:25]
Elon zeigt einen Hitlergruß. BILD: Herzchen!
Schönheit zeigt Elon mit dessen Hitlergruß. WELT: Hitlergruß!
Gab es Medien, die verlässlich informiert haben?
https://www.youtube.com/watch?v=J49X4_eaG48
[[https://rollenspiel.social/@ArneBab/113885442695794369]]
** [2025-01-24 Fr 06:09]
So soll unser #Bundeskanzler mit schrecklichen Ereignissen umgehen:
https://www.youtube.com/watch?v=ZedjKSk_CSk&t=203s
#Habeck Aschaffenburg
[[https://rollenspiel.social/@ArneBab/113881837936381410]]
** [2025-01-22 Mi 23:38]
USPOL
----------------------------------------------------------------------------
Dark Brandon gives a small overview of the rights reaction to Musks
Nazi salute:
https://www.youtube.com/watch?v=48Wd-tByZ7g
- cheering for the Nazi "Energy" 🤢 - saying "he did not know what he
did" (even if that were so: why did you put him on a stage?)
- claiming "didn’t happen"
- "some said it was"
- "not socially apt" (⇒ why on stage?)
- a troll
⇒ all but the Neonazis seem to be in denial.
[[https://rollenspiel.social/@ArneBab/113874640566841609]]
** [2025-01-22 Mi 13:48]
Wenn ich durch Arbeit 40.000 Euro im Jahr verdiene und jemand anders
durch Arbeit 20.000 und durch Vermögenszinsen nochmal 20.000 drauf
bekommt, sollten wir beide gleich viel in die Krankenkasse einzahlen.
[[https://rollenspiel.social/@ArneBab/113872321128551737]]
** [2025-01-22 Mi 07:19]
Dread Pirate Roberts ist begnadigt …
https://www.heise.de/news/Verurteilter-Darknet-Pionier-Silk-Road-Gruender-von-Donald-Trump-begnadigt-10251382.html?utm_source=flipboard&utm_medium=activitypub
[[https://rollenspiel.social/@ArneBab/113870791778314322]]
** [2025-01-21 Di 21:17]
Yesterday was hard. It helps me cope to look back what was good in
2025. Often little good things that I would not want to have missed.
You can see these in my "My best thing today" in #sketchnotes — I
uploaded the scan for the time between the years:
https://www.draketo.de/kreatives/best-thing-today#2025-01
See the alt-text for a description.
Please boost. I’m publishing these with some hope that others may
start #bestthingtoday sketchnotes: it’s a good way to build and
strengthen positive memories.
#ink art
[[https://rollenspiel.social/@ArneBab/113868422760431301]]
** [2025-01-21 Di 06:27]
#Dorktower ❤️
http://www.dorktower.com/
#vonnegut
[[https://rollenspiel.social/@ArneBab/113864923555987034]]
** [2025-01-20 Mo 22:48]
I’m now going to take a break from horrible things and listen to
Warhammer 40k songs.
[[https://rollenspiel.social/@ArneBab/113863117143343054]]
** [2025-01-20 Mo 22:14]
USPOL
----------------------------------------------------------------------------
Das hat nicht lange gedauert:
#noafd musk
[[https://rollenspiel.social/@ArneBab/113862985363405623]]
** [2025-01-20 Mo 20:59]
The #network from forgotten times when #crypto meant #privacy, not
#corruption:
→ https://www.hyphanet.org ←
Connect to your friends with #Hyphanet to have a safe haven to
coordinate when bad comes to worse.
#freenet decentralization
[[https://rollenspiel.social/@ArneBab/113862689812377315]]
** [2025-01-20 Mo 20:16]
Praise the Emperor:
https://www.draketo.de/politik/kommentare#praise-the-emperor
https://www.youtube.com/watch?v=TCaXGGfj0js&list=PLzGpN3drAsQQsKHQD6rd-j_EPJt_4KHF2&index=9
[[https://rollenspiel.social/@ArneBab/113862522882588680]]
** [2025-01-20 Mo 19:56]
PRAISE
@@ 150,214 349,6 @@ https://www.youtube.com/watch?v=LaKByad9
[[https://rollenspiel.social/@ArneBab/113836889080343329]]
** [2025-01-16 Do 05:13]
Which well-moderated Mastodon instances used by free software projects
(or explicitly for free floss projects) do you know?
[[https://rollenspiel.social/@ArneBab/113836322478249170]]
** [2025-01-15 Mi 21:49]
„Wer einen nicht loben kann, dem nimmt man auch nicht die Kritik ab.“
— Luisa Neubauer
https://www.youtube.com/watch?v=SGGxKKhVfs8
[[https://rollenspiel.social/@ArneBab/113834573775643340]]
** [2025-01-15 Mi 19:35]
Da droht ein US Präsident der Hamas, sie komplett zu vernichten, und
plötzlich stimmt die Hamas der Freilassung von Geiseln zu.
https://www.deutschlandfunk.de/gaza-streifen-offenbar-einigung-auf-geisel-deal-und-waffenpause-100.html
[[https://rollenspiel.social/@ArneBab/113834047469588499]]
** [2025-01-15 Mi 06:43]
Überfrierende Nässe, krasser als in der Schlittschuhhalle, und auf
schrägen Gehwegen.
Bitte passt auf euch auf!
[[https://rollenspiel.social/@ArneBab/113831014106523590]]
** [2025-01-14 Di 20:56]
„Das Gewicht der Kapitaleinkünfte ist gestiegen“ [im Vergleich zu
Lohneinkünften].
https://www.deutschlandfunk.de/sozialabgaben-auf-kapitalertraege-eine-gute-idee-100.html
Übersetzt: Immer größere Teile des Geldes, das Leute erhalten, wird
aus der Leistung Anderer gezogen.
Der Experte im Artikel redet allerdings um konkrete Zahlen herum. Die
Journalistin rechnet dann vor, dass bei 100.000 Euro vermögen etwa 700
Euro pro Jahr zusammenkommen. 60 Euro pro Monat.
Die Beitragsbemessungsgrenze liegt bei 4.425,00 EUR pro Monat.
⇒ über 7 Millionen Vermögen.
[[https://rollenspiel.social/@ArneBab/113828705971349946]]
** [2025-01-14 Di 11:11]
@lxo I just noticed that the bug you opened at mozilla does not show
up at the bug that causes it — but I cannot add a reference:
https://bugzilla.mozilla.org/show_bug.cgi?id=1930548
So this may have been missed.
https://bugzilla.mozilla.org/show_bug.cgi?id=1930548#c2
Can you edit the bug and add 1860492 in the field references →
regressed by?
[[https://rollenspiel.social/@ArneBab/113826403839562938]]
** [2025-01-14 Di 06:48]
Please remember the risk of volatile software¹, volatile
infrastructure², and soft trauma³, when taking decisions about
backwards compatibility.
¹ https://stevelosh.com/blog/2012/04/volatile-software/
Do not be the tool which breaks itself or other tools on update.
² https://www.draketo.de/software/volatile-infrastructure
Volatile Infrastructure is worse than volatile applications.
³ https://drewdevault.com/2019/11/26/Avoid-traumatic-changes.html
Two kinds of trauma: something needs work to get working again or it
needs work to get idiomatic again.
#programming freesoftware
[[https://rollenspiel.social/@ArneBab/113825369189972831]]
** [2025-01-13 Mo 11:56]
#Tagesschau: "X hat keine große Reichweite in Deutschland." — Zu
politischen Themen informieren sich dort nur 5%. — @sveckert
https://www.youtube.com/watch?v=wvaOt1fMh-k
Angehängt ist der wichtigste Teil des Tagesschau-Videos.
Don’t trust the Musk.
Don’t boost the Murks.
[[https://rollenspiel.social/@ArneBab/113820918290284886]]
** [2025-01-12 So 11:36]
Annalena #Baerbock zur Öltanker-Havarie:
https://www.youtube.com/watch?v=zHyCYIG3ZCU
Sehr wichtige Punkte.
[[https://rollenspiel.social/@ArneBab/113815176144832507]]
** [2025-01-11 Sa 15:38]
#Demokratie ist kein Zuschauersport | Robert #Habeck
https://www.youtube.com/watch?v=y_12pI0N0kY
„eine Politik, die die Ärmel hochkrempelt und bereit ist, sich
reinzuhängen“
[[https://rollenspiel.social/@ArneBab/113810468099136849]]
** [2025-01-11 Sa 15:37]
Warum der #noAfD nun die eigene Jugendorganisation gefährlich wird |
Inside PolitiX
https://www.youtube.com/watch?v=DOu_RcPgdoE
„Ich höre aber auch stimmen aus der Parteispitze, die sagen, ‚wir
brauchen die‘“
[[https://rollenspiel.social/@ArneBab/113810461037945052]]
** [2025-01-11 Sa 14:04]
The world shapes us (though not completely) — and for others *we* are
part of the world that shapes them:
https://www.flipsidecomics.com/comic.php?i=5056
[[https://rollenspiel.social/@ArneBab/113810099277961267]]
** [2025-01-10 Fr 14:28]
„Die Union macht kein Angebot“ — Robert Habeck
https://www.youtube.com/watch?v=i610QYZeY64
[[https://rollenspiel.social/@ArneBab/113804530697844236]]
** [2025-01-10 Fr 06:52]
„CDU übernimmt Vorschlag der AfD zur Ausbürgerung“
https://www.youtube.com/watch?v=1Yhmoqva6aU
Und was machen wir jetzt?
Gehen wir zu Millionen auf die Straße gegen die CSDUAfD
Was machen die für einen Mist ☹
„Die wollen an meinen Pass“ — Eine lose Bekannte
[[https://rollenspiel.social/@ArneBab/113802736042695489]]
** [2025-01-10 Fr 06:39]
https://www.draketo.de/zitate#medien-bias
https://www.draketo.de/zitate.pdf Seite 256
[[https://rollenspiel.social/@ArneBab/113802683660413999]]
* Gute Neuigkeiten
M kreatives/best-thing-today.org +3 -4
@@ 74,7 74,7 @@ AC_OUTPUT
#+attr_latex: :width 0.87\linewidth
[[file:best-thing-today--2025--01.png][file:best-thing-today--2025--01--klein.png]]
-# I uploaded the second "My best thing today" in #sketchnotes for December 2025:
+# I uploaded "My best thing today" in #sketchnotes for the time between the years:
#
# https://www.draketo.de/kreatives/best-thing-today#2025-01
#
@@ 84,14 84,13 @@ AC_OUTPUT
#
# --- Image Description ---
#
-# rough, small sketches in ink with the best experience for almost every day in the timeframe.
+# Rough, small sketches in ink with the best experience for almost every day in the timeframe.
#
# The base is lineart in black and gray, often colored with sky blue, grass green, sun orange, or earth yellow as highlight-colors. On the right there is a streak of colors where I clean the pens after they take up black ink.
#
# It starts with eating and cooking pancakes, followed by raclette.
#
-# One is listening to 38c3 streams, another singing with Guitar, and
-# one a scene from a Cthulhu roleplaying session.
+# One is listening to 38c3 streams, another singing with Guitar, and one a scene from a Cthulhu roleplaying session.
#
# There’s a blue rabbit and a dog in front of a stove.
#
A => software/Limewire-screen-wikimedia-GPL.png +0 -0
A => software/bittorrent-struktur.png +0 -0
A => software/freenet-fetchpull-get.png +0 -0
A => software/freenet-fetchpull-put.png +0 -0
M software/freenet-keyspace.png +0 -0
A => software/freenet-link-length.png +0 -0
A => software/freenet-peer-count.png +0 -0
A => software/freenet-weekly-uptime.png +0 -0
M software/freenet-wot-rank.png +0 -0
A => software/gnutella-suche.png +0 -0
A => software/in-view-of-multitasking-sana2013.png +0 -0
A => software/kademlia-peers-full.png +0 -0
A => software/kademlia-peers.png +0 -0
A => software/overlay-structured.png +0 -0
A => software/overlay-unstructured.png +0 -0
A => software/p2p-grundprobleme-schwarz-einstieg.png +0 -0
A => software/p2p-grundprobleme-schwarz-kommunikation.png +0 -0
A => software/p2p-grundprobleme-schwarz-suche.png +0 -0
A => software/p2p-grundprobleme-schwarz-verteilung.png +0 -0
A => software/p2p-talk.org +1691 -0
@@ 0,0 1,1691 @@
+#+INCLUDE: ../org-templates/level-1.org
+#+title: peer-to-peer networks that worked
+#+subtitle: core challenges, routing, and privacy.
+#+author: Dr. Arne Babenhauserheide
+#+date: <2025-01-24 Fr>
+#+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_act(Act) %4BEAMER_col(Col) %8BEAMER_opt(Opt)
+#+PROPERTY: BEAMER_col_ALL 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.0 :ETC
+#+STARTUP: beamer
+#+STARTUP: hidestars
+#+SEQ_TODO: TODO ☯ Σ | ☺
+#+LANGUAGE: en
+
+#+latex: \iffalse
+
+This 90 minutes talk decribes how peer-to-peer networks managed to
+interactively search 4 million computers with the bandwidth of 2004,
+which goals they failed to reach, and what information the networks
+expose as part of their operation.
+
+#+begin_export html
+<div class="sourcebox" markdown="1" >
+<a href="p2p-talk.pdf"><img width="168" height="235" title="PDF" src="../assets/pdf-thumbnail.png" /></a><br />
+<a href="p2p-talk.pdf">PDF</a> (drucken)
+</div>
+#+end_export
+
+It starts with the core challenges all fully distributed systems face
+and then describes how four peer to peer systems solved them: Gnutella
+(for efficient keyword search), Kademlia (for efficient hash search),
+BitTorrent (for its simplification), and Freenet/Hyphanet (for privacy
+and small world routing).
+
+I gave it as guest talk for a resilient networking lecture at KIT. The
+[[p2p-talk.pdf][slides]] are created from the same source as this article.
+
+#+latex: \fi
+
+* Intro
+** intro
+*** peer-to-peer: where decentralization works/worked
+****
+ #+latex: \centering
+
+
+
+ /From Gnutella and Kademlia/ \\
+ /Over BitTorrent/ \\
+ /To Freenet/Hyphanet/
+
+****
+ #+latex: \LARGE \centering \(\ddot \smile\)
+
+****
+
+#+begin_quote
+ Those who don’t learn from the tech of the past are doomed to repeat
+ its mistakes — with less time and brain share, since “the problems
+ are already solved”.
+#+end_quote
+
+*** DO NOT OBEY IN ADVANCE
+
+- You are the ones who build the rules of the future.
+- You are the last line of defense against horrors.
+- If you do not build it, it will not be built (well enough to work).
+- Whatever you are told: *you are not replaceable*.
+
+/Do not obey in advance./
+
+https://media.ccc.de/v/38c3-opening-ceremony#t=1343
+
+/You knew whom you invited./
+
+** Why?
+*** Understand p2p-networks that worked in real life
+
+#+begin_quote
+after a few days (and especially nights) of nervous full-site
+tinkering, it turned a 40 minute deploy process into one that lasted
+just 12 seconds![fn:15]
+#+end_quote
+
+- Bittorrent-Deployment: https://vimeo.com/11280885
+
+/Understand why deployment improved but did not match expectations./
+
+Spoiler: Cut-through routing.
+
+*** Me
+
+- Since 2004 in p2p-Development
+- Since 2013 with competence
+- Since 2017 Release-Manager of the Freenet/Hyphanet project
+- Until 2017 PhD and PostDoc in physics
+- Since 2017 Software Developer as job
+
+** Topics
+
+*** Topics today
+
+ - Core challenges
+ - Gnutella (the first widespread, fully distributed p2p network)
+ - Kademlia (the most widespread DHT)
+ - BitTorrent
+ - Freenet/Hyphanet
+
+*** p2p?
+
+- *peer-to-peer (p2p)* :: peers (equal partners) cooperate to grant a service to each other.
+
+**** *Why?*
+
+Your programs popularity exceeded your wildest dreams. 50 million people want to download it. Size 100 GiB. How much do you pay?
+
+/Relax: the game of the year in almost every award 2023/2024 launched with less than one million players./
+
+**** *2025* quick checks: 5 million TB
+ :PROPERTIES:
+ :BEAMER_act: <2->
+ :END:
+- AWS CloudFront: $100 million ([[https://aws.amazon.com/cloudfront/pricing/][$0.02/GB]])
+- Hetzner: 6 million € ([[https://docs.hetzner.com/de/robot/general/traffic/][1.19€/TB]]) in 137 years (2000 dl/day)
+- Gnutella worked with a handful of servers for 50 million users
+
+# https://www.cloudflare.com/learning/cloud/what-is-aws-data-transfer-pricing/
+# https://docs.hetzner.com/de/robot/general/traffic/
+# https://news.ycombinator.com/item?id=29953834 $5400 for 70TB?
+
+* Core challenges
+** challenges
+*** Topics
+
+The core challenges p2p systems have to solve or circumvent.
+
+*** Core problems in p2p networks
+
+**** :B_columns:
+ :PROPERTIES:
+ :BEAMER_env: columns
+ :END:
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.454
+ :END:
+ - *Entry*: How to find the right place?
+ #+attr_latex: :width 0.3\linewidth
+ file:p2p-grundprobleme-schwarz-einstieg.png
+ - *Search*: Where do I find what I need?
+ #+attr_latex: :width 0.3\linewidth
+ file:p2p-grundprobleme-schwarz-suche.png
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.454
+ :END:
+ - *Distribution*: How to avoid bottlenecks?
+ #+attr_latex: :width 0.25\linewidth
+ file:p2p-grundprobleme-schwarz-verteilung.png
+ - *Communication*: How can information flow?
+ #+attr_latex: :width 0.4\linewidth
+ file:p2p-grundprobleme-schwarz-kommunikation.png
+
+**** :B_ignoreheading:
+ :PROPERTIES:
+ :BEAMER_env: ignoreheading
+ :END:
+ - /*Resistance against disruption*: How can desired scale better than unwanted?/
+
+** Core requirements
+*** Entry: How to find the right place?
+
+ - *First addresses*: How to find addresses of other nodes?
+ - *Choose connections*: With whom should I connect?
+ - *Routing-Information*: Which data do nodes need?
+ #+attr_latex: :width 2cm
+ file:p2p-grundprobleme-schwarz-einstieg.png
+
+
+*** Structured vs. unstructured
+
+**** *Unstructured*
+ - *First addresses*: A Simple list
+ - *Choose connections*: Choose at will
+ - *Routing-Information*: Exchange explicitly
+
+**** *Structured*
+ - *First addresses*: Needs topology[fn:25]
+ - *Choose connections*: Only some are useful
+ - *Routing-Information*: By choosing peers
+
+**** /Can I reach all directly?/
+
+*** Search: What to look for?
+
+ - *Keyword*: Gnutella, Skype (before MS)
+ - *Content-Hash*: Kademlia, BitTorrent VHT, Freenet/Hyphanet
+ - *Public Key*: Freenet/Hyphanet
+
+Glossary:
+#+latex: \vspace*{-0.5cm}
+#+attr_latex: :width 1.5cm
+file:p2p-grundprobleme-schwarz-suche.png
+
+ - *BitTorrent VHT* :: Distributed Hash Table, a DHT
+ - *DHT* :: Distributed Hash Table
+ - *Public Key* :: The mirror of the private key in asymmetric cryptography
+
+*** Search: Where do I find what I need?
+
+Two concepts:
+
+ - Search Paths to existing data: Gnutella
+ - Put the data in the right place: Kademlia, BitTorrent VHT, Freenet/Hyphanet
+
+*** Distribution: How to avoid bottlenecks?
+
+ - Centralized: Streaming by the ISP via multicast
+ - Swarming: users take part in the distribution
+ - Coordinated by a central place: BitTorrent (Tracker)
+ - Coordinated by other users: Gnutella (Download-Mesh)
+ - Independently distributed chunks: Freenet/Hyphanet[fn:9]
+
+Glossary:
+#+latex: \vspace*{-0.75cm}
+#+attr_latex: :width 1cm
+file:p2p-grundprobleme-schwarz-verteilung.png
+#+latex: \vspace*{-0.25cm}
+
+- *Download-Mesh*: :: name of the protocol
+- *Tracker*: :: A server coordinating a BitTorrent-Swarm
+
+*** Communication: How can information flow?
+
+- One-to-one (PM/DM/msg/Anruf/…)
+- Group discussion (Chat, Forum, Video call, …)
+- Public discourse
+- Learn about new content
+- Metadata about content (comments, rating, …)
+#+attr_latex: :width 2cm
+file:p2p-grundprobleme-schwarz-kommunikation.png
+
+*** Resistance against disruption
+
+**** *Disruption*
+
+Anything that reduces the quality of the service for users
+
+**** *Required on every level*
+
+ - *Entry*: connecting to attackers
+ - *Search*: spam, misinformation
+ - *Distribution*: poison files
+ - *Communication*: spam, harassment and censorship[fn:10]
+
+**
+*** Summary
+**** :B_columns:
+ :PROPERTIES:
+ :BEAMER_env: columns
+ :END:
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.454
+ :END:
+ - *Entry*: First addresses and routing info
+ #+attr_latex: :width 0.3\linewidth
+ file:p2p-grundprobleme-schwarz-einstieg.png
+ - *Search*: Keyword, Content, Public Key
+ #+attr_latex: :width 0.3\linewidth
+ file:p2p-grundprobleme-schwarz-suche.png
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.454
+ :END:
+ - *Distribution*: Tracker, Download-Mesh, Cached fragments
+ #+attr_latex: :width 0.25\linewidth
+ file:p2p-grundprobleme-schwarz-verteilung.png
+ - *Communication*: One-to-one, Forum, News, Comments
+ #+attr_latex: :width 0.4\linewidth
+ file:p2p-grundprobleme-schwarz-kommunikation.png
+
+**** :B_ignoreheading:
+ :PROPERTIES:
+ :BEAMER_env: ignoreheading
+ :END:
+ - /*Disruption*: connect to attackers, spam results, misinformation,
+ poison files, harassment./
+
+* Gnutella
+** Gnutella
+*** Gnutella
+
+#+begin_quote
+On March 14th, 2000, … an early version … with a note: “Justin and Tom
+work for Nullsoft, makers of Winamp and Shoutcast. See? AOL can bring
+you good things!” …\\
+AOL ordered him to take the program down immediately … calling
+Gnutella an “unauthorized freelance project.” … hackers had gone … to
+reverse-engineer it … into the hands of the open-source community …\\
+— [[https://archive.ph/20120630204949/http://74.220.215.94/~davidkus/index.php?option=com_content&view=article&id=82:the-worlds-most-dangerous-geek-&catid=35:articles&Itemid=54][The World's Most Dangerous Geek; Interviewed by David Kushner;
+RollingStone.com; January 13, 2004.]]
+#+end_quote
+
+The simple TCP based protocol improved. By 2008 about 50 million
+people used it every day. It mostly disappeared after the main
+development companies lost in court. The tech is almost forgotten.
+
+*** Topics
+
+ - *Users perspective*: this was Gnutella
+ - *Entry*: GWebCaches
+ - *Search*: Slow-Start + Keyword-Multicast
+ - *Distribution*: Download-Mesh
+ - *Communication*: See new files and brows the collection
+ - *Resistance against disruption*: Heuristics or rating matrices
+
+*** Users perspective
+
+ - 50 million nodes
+ - Search by filename and ID3 tags
+ - Filter to see only creative commons licensed content
+ - Search by newest files
+ - Download from many sources without central coordination
+ - Audio streaming around 2004 (“preview”)
+ - /LimeWire, Bearshare, Shareaza, Phex, gtk-gnutella, …/
+
+*** How it looked
+
+#+attr_latex: :width 0.6\linewidth
+[[file:Limewire-screen-wikimedia-GPL.png]]
+
+/von Wikipedia: [[https://upload.wikimedia.org/wikipedia/commons/1/1b/LimeWire_screen.png][LimeWire_screen.png]]/
+
+** Entry
+*** Entry: addresses
+
+ - List of the recently connected good nodes
+ - UDP Host-Caches: Tiny servers that collected IP-lists and provided
+ the most recent ones
+ - Example: GhostWhiteCrab[fn:12]
+
+ #+latex: \vspace*{-2.5cm}\hfill
+ #+attr_latex: :width 2cm :center nil
+ file:p2p-grundprobleme-schwarz-einstieg.png
+
+*** Entry: Connecting
+
+HTTP-Handshake with feature negotiation, then binary over TCP socket +
+out of band answers via UDP.
+
+** Search and distribution
+*** Search process
+**** :B_columns:
+ :PROPERTIES:
+ :BEAMER_env: columns
+ :END:
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.6
+ :END:
+ #+begin_src dot :file gnutella-suche.png :exports results
+ digraph {
+ rankdir=LR
+ UP1 [xlabel="3-5"]
+ UP2 [xlabel="<128"]
+ UP3 [xlabel="<4.096"]
+ UP4 [xlabel="<131.072"]
+ Leaf2 [xlabel="<128"]
+ Leaf3 [xlabel="<4.096"]
+ Leaf4 [xlabel="<131.072"]
+ Leaf5 [xlabel="<4.194.304"]
+ Leaf -> UP1 [label="3-5 x slow-start"]
+ Leaf -> UP2 [style=invis,weight=0]
+ Leaf -> UP3 [style=invis,weight=0]
+ Leaf -> UP4 [style=invis,weight=0]
+ UP1 -> UP2 [label="32 x slow-start",constraint=false]
+ UP2 -> UP3 [label="32 x flooding",constraint=false]
+ UP3 -> UP4 [label="32 x Intra-UP Keyword-Multicast",constraint=false]
+ UP4 -> Leaf5 [label="32 x Keyword-Multicast"]
+ UP1 -> Leaf2 [label="32 x Keyword-Multicast"]
+ UP2 -> Leaf3 [label="32 x Keyword-Multicast"]
+ UP3 -> Leaf4 [label="32 x Keyword-Multicast"]
+ }
+ #+end_src
+
+ #+RESULTS:
+ [[file:gnutella-suche.png]]
+**** :B_ignoreheading:
+ :PROPERTIES:
+ :BEAMER_env: ignoreheading
+ :END:
+ Not existing file: 4 x 32 x 32 = 4.096 nodes
+
+ Load (empirical): <1kiB/s Leaf, <14kiB/s Ultrapeer
+
+- *Ultrapeer (UP)* :: A communication hub (32 peers)
+- *Leaf* :: An edge node, searches via Ultrapeers
+- *Knoten* :: A Peer or Ultrapeer.
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-suche.png
+
+ # TODO: LimeWire-Entwickler fragen, wie gut Intra-UP-QRP funktionierte.
+
+*** Distribution in Gnutella: Out-of-Band
+
+Originally sent back via the search path, but:
+
+ - 5 Steps
+ - Average life time of a node:[fn:11] 2h
+ - => Half the connections broke after 24 minutes
+
+ Solution: Download-Mesh, independent of the search.
+
+ Disadvantage: All IPs always visible.
+
+#+latex: \vspace*{-0.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-verteilung.png
+
+*** Distribution: Download-Mesh
+
+ #+latex: \scriptsize
+
+ - Standard HTTP Range-Requests
+ - Content-Addressed: HOST/uri-res/raw/urn:sha1:HASH[fn:13]
+ - 5 additional Headers:[fn:14]
+ - *X-Alt* :: Checked source for the file, IP/Port
+ - *X-NAlt* :: Unreachable source or node with corrupted data. IP/Port
+ - *X-Gnutella-Content-URN* :: Merkle-Tree Root-Hash
+ - *X-Thex-URI* :: /uri-res/N2X?urn:sha1:HASH;MERKLE_TREE_ROOT
+ - *X-Available-Ranges* :: bytes 0-10,20-30 (example)
+
+** Limitations and summary
+*** Communication: Weakness
+
+ - Chat never worked well
+ - No lasting contact to others
+ - Working:
+ - “What’s new?” (via LimeWire: See new files)
+ - Search collection (see all shared files)
+
+#+latex: \hfill
+#+attr_latex: :width 2cm :center nil
+file:p2p-grundprobleme-schwarz-kommunikation.png
+
+*** Resistance against disruption: Heuristics as Spam-Filter
+
+ Similar to E-Mail spam filters, partially user-configurable.
+
+ /Reduced Spam to 10-20% of the results./[fn:39]
+
+*** Resistance against disruption: object trust via Credence
+
+ - Every correctly named/good file: 1.0
+ - Every falsely named/bad file: -1.0
+ - Ratings of others multiplied with the correlation of files both rated.
+
+With proof that spammers would have to rate enough files correctly to
+spread false ratings that multiple spamming parties would cancel each
+other out.
+
+ → http://credence-p2p.org
+
+/Never added to a mainstream program; LimeWire already in court./
+
+** Privacy and Summary
+*** Privacy
+
+- IP visible in searches and downloads (originally not; direct downloads as optimization)
+- Ultrapeers know their leafs
+- Downloader of a file knows all other downloaders (but not how much all have)
+
+*** Remaining weaknesses 2010
+
+ - 10-20% Spam-Results despite 50 million users
+ - Credence was never widespread
+ - One step flooding: Windows (home)limited the connection count
+ - Required parameter-adaption during growth
+ - No comments, Peer-Chat never worked well
+ - Bad support for Asian fonts
+
+*** Summary Gnutella
+
+ - Efficient Search for keywords
+ - TCP-based binary protocol, 50 mio users, 1kiB/s Leaf, 14kiB/s Ultrapeer
+ - Entry: WebCache-Server + Exchange QRT (like Bloom-Filters)[fn:20]
+ - Search: Slow-Start + QRT Routing
+ - Distribution: Download-Mesh (mini-network per download)
+ - Resistance against disruption: Heuristics or object trust
+
+* Kademlia
+** Kademlia
+*** Kademlia
+
+/Lookup in a distributed Hash-Table (DHT) with xor-metric./
+
+- Users’ perspective
+- Search
+- Entry /(uses search)/
+*** Users’ perspective
+
+**** *Tools*
+
+ - Filesharing: :: Kad in aMule, VHT in Torrent clients
+
+/Amazon Dynamo uses Chord, that works very similar./
+
+**** *Usage*
+
+ - Searches for exact files or exact keyword
+ - Resolves Magnet-links
+ - Choose the server to write to; eventual consistency
+
+** Search
+*** Search in Kademlia
+
+- Every node has a random ID
+- Search by Hash → Distributed Hash Table
+- Distance between Hash und ID via *xor-Metric*[fn:31]
+- Step by step in O(log(N)) to the nearest node
+
+/Simlar: Chord, Pastry./
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-suche.png
+
+*** Prefix-Buckets
+
+**** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.4
+ :END:
+ #+begin_src dot :file kademlia-peers.png :exports results
+ digraph {
+
+ ABC
+ subgraph cluster_b {
+ label=Axx
+ subgraph cluster_a {
+ label=ABx
+ ABC -> ABa
+ ABC -> ABf
+ }
+ ABC -> Aca
+ ABC -> Aa2
+ }
+ ABC -> be5
+ ABC -> 543
+ // fix ranks
+ edge [style=invis]
+ ABC -> Aca
+ ABC -> Aa2
+ ABa -> Aca
+ ABa -> Aa2
+ Aa2 -> be5
+ Aa2 -> 543
+ }
+ #+end_src
+
+ #+RESULTS:
+ [[file:kademlia-peers.png]]
+
+*** Search for b91
+
+ #+begin_src dot :file kademlia-peers-full.png :exports results
+ digraph {
+
+ ABC [style=bold]
+ be5 [color=red,style=bold]
+ subgraph cluster_b {
+ label=Axx
+ subgraph cluster_a {
+ label=ABx
+ ABC -> ABa
+ ABC -> ABf
+ }
+ ABC -> Aca
+ ABC -> Aa2
+ }
+ ABC -> be5
+ ABC -> 543
+ BE5 [color=red,style=bold]
+ B9f [color=blue,style=bold]
+ subgraph cluster_d {
+ label=Bxx
+ subgraph cluster_c {
+ label=BEx
+ BE5 -> BE3
+ BE5 -> BEa
+ }
+ BE5 -> Bf0
+ BE5 -> B9f
+ }
+ BE5 -> abc
+ BE5 -> 123
+
+ B9F [color=blue,style=bold]
+ B91 [color=green,style=bold]
+ subgraph cluster_f {
+ label=Bxx
+ subgraph cluster_e {
+ label=B9x
+ B9F -> B9b
+ B9F -> B91
+ }
+ B9F -> Bb0
+ B9F -> Baf
+ }
+ B9F -> 001
+ B9F -> ffd
+ be5 -> BE5 [constraint=false]
+ B9f -> B9F [constraint=false]
+
+ // fix ranks
+ edge [style=invis]
+ ABC -> Aca
+ ABC -> Aa2
+ ABa -> Aca
+ ABa -> Aa2
+ Aa2 -> be5
+ Aa2 -> 543
+
+ B91 -> Bb0
+ B91 -> Baf
+ Baf -> 001
+ Baf -> ffd
+
+ BE3 -> Bf0
+ BE3 -> B9f
+ Bf0 -> abc
+ Bf0 -> 123
+
+
+
+ }
+
+ #+end_src
+
+ #+RESULTS:
+ [[file:kademlia-peers-full.png]]
+
+*** Store
+
+- Search for node nearest to the hash.
+- STORE: Hash + Value.
+
+/Think =put(key, value)= ⇒ “Distributed Hash Table”./
+
+** Entry
+*** Entry in Kademlia
+
+- Needs contact to at least one existing node.
+- Search your own ID: =FIND_NODE=\\
+ (near = responsible for ID)
+- Response contains addresses and IDs\\
+ of nodes touched
+- Contacted nodes also keep your address and ID.
+
+ #+latex: \vspace*{-2cm}\hfill
+ #+attr_latex: :width 2cm :center nil
+ file:p2p-grundprobleme-schwarz-einstieg.png
+
+** Privacy and Sumary
+*** Privacy
+
+- IPs of downloaders and uploaders known to responsible nodes
+- Hashes of searches & searcher IP known to nodes on the path
+- All addresses must be reachable globally
+
+*** Summary
+
+- Distance: key-hash XOR node-ID
+- Search: ask closest known node for better nodes
+- knows more close nodes than remote nodes
+- Store works like searching: store where a search would land
+- Entry:
+ - Search for own ID
+ - Touched nodes use address and ID
+
+* BitTorrent Downloads
+** BitTorrent
+*** BitTorrent
+
+- Most widespread solution for swarming
+- BitTorrent, IPFS, Blizzard-Updater
+- Upload to get faster Downloads
+- Coordinated by centralized Tracker: avoids complexity
+- No decentralized search
+
+*** Users’ perspective
+
+- Information from Tracker-sites
+- Download with torrent-file or Magnet-Link
+- Supports folders
+- Today: ipfs: Websites via BitTorrent
+- Supports NAT-Traversal
+- Can hide the IP via Tor (as SOCKS5 proxy)
+
+** Distribution
+*** Concept of BitTorrent
+
+**** Structure :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_env: block
+ :BEAMER_col: 0.3
+ :END:
+
+#+begin_src dot :file bittorrent-struktur.png :exports results
+graph {
+{rank=same; client5 Tracker}
+Tracker [shape=diamond]
+{rank=same; Tracker client4}
+client1 -- Tracker
+client2 -- Tracker
+client3 -- Tracker
+client5 -- Tracker [constraint=false]
+Tracker -- client4 [constraint=false]
+Tracker -- client6
+Tracker -- client7
+Tracker -- client8
+}
+#+end_src
+
+#+RESULTS:
+[[file:bittorrent-struktur.png]]
+
+**** Tracker: Website :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.7
+ :BEAMER_env: block
+ :END:
+
+- Coordinates Swarms
+- Search, Forum, Rating, Validation, Community
+- Statistics: Seeder, Leecher
+- Does not provide Data
+- Aggregates how much nodes upload\\
+ → Incentive
+
+ #+latex: \hfill
+ #+attr_latex: :width 1.5cm :center nil
+ file:p2p-grundprobleme-schwarz-suche.png
+ #+attr_latex: :width 2cm :center nil
+ file:p2p-grundprobleme-schwarz-kommunikation.png
+ #+attr_latex: :width 2cm :center nil
+ file:p2p-grundprobleme-schwarz-einstieg.png
+
+*** Torrent-File
+
+- Tracker URL(-s)
+- Hashes for Chunks
+- Names of the File(-s)
+- Can contain folders[fn:18]
+#+latex: \vspace*{-0.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-verteilung.png
+
+*** Incentive to Upload
+
+- Fraction Upload/Download is checked
+- Freeloaders[fn:32] are throttled by other clients (choked: lower download rate)
+- Published research gave strong focus on the incentive, in practical use the forums make more of a difference
+- Tracker with login: private groups
+
+** Extended usage
+*** Related
+
+- VHT in addition/instead of Tracker possible (Kademlia)
+- Free and Open Protocol with many implementations
+- Development within the Community
+- IPFS uses Torrents as decentralized cache for Websites
+
+*** Torrent for Twitter-Deployment
+
+- Cost at Twitter: Transport over many steps
+- Torrent transmits in fragments.
+
+**** :B_columns:
+:PROPERTIES:
+:BEAMER_env: columns
+:END:
+***** Wish :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_act: <1->
+ :BEAMER_col: 0.3
+ :BEAMER_env: block
+ :END:
+
+#+begin_src dot :file twitter-torrent-mesh.png :exports results
+digraph {
+A -> B
+A -> C
+B -> D
+B -> E
+C -> F
+}
+#+end_src
+
+#+RESULTS:
+[[file:twitter-torrent-mesh.png]]
+
+
+***** Reality :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_act: <2->
+ :BEAMER_col: 0.3
+ :BEAMER_env: block
+ :END:
+
+#+begin_src dot :file twitter-torrent-ring.png :exports results
+digraph {
+{rank=same; A B C}
+{rank=same; D E F}
+A -> B
+B -> C
+C -> D
+E -> D [dir=back]
+F -> E [dir=back]
+}
+#+end_src
+
+#+RESULTS:
+[[file:twitter-torrent-ring.png]]
+
+/cat … ssh tee …/
+
+/Cut-through / streaming./
+
+** Privacy and summary
+*** Privacy
+
+- Tracker knows
+ - who downloads
+ - how much they have
+ - how much they upload
+- Users know what the tracker tells them
+- No search, except by Hash: private trackers stay private
+- IP hiding via Tor is possible but blocked by most trackers
+
+*** Summary
+
+- Tracker and Clients
+- Tracker: statistics and coordination
+- Torrent-File with Piece-Info
+
+* Freenet/Hyphanet
+** Hyphanet
+*** Freenet/Hyphanet
+
+/Censorship-resistant, privacy respecting communication on friend-to-friend network/
+
+/Decentralized database with pubkey-access./
+**** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.5
+ :END:
+
+ - Users’ perspective
+ - Entry
+ - Small-World
+ - Search
+
+**** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.5
+ :END:
+
+ - Distribution
+ - Communication
+ - Usage
+ - Privacy
+
+*** Users’ perspective
+
+- Web-interface: decentralized websites
+- Plugins with E-Mail and Microblogging
+- External programs like Chat and forums with Freenet/Hyphanet as database using HTTP-like API (FCP)
+
+** Entry
+*** Entry in Freenet/Hyphanet
+
+- Opennet:
+ - Similar to Kademlia: choose known Seednode[fn:33], Seednode searches ID → node references
+ - Difference to Kademlia: Not just IP: referenz with keys
+- Friend-to-Friend:
+ - Fixed connections
+ - Knoten swap their IDs, to reconstruct\\
+ the social Small-World-Network\\
+ ⇒ minimize Overlay-costs.
+
+ #+latex: \vspace*{-2cm}\hfill
+ #+attr_latex: :width 2cm :center nil
+ file:p2p-grundprobleme-schwarz-einstieg.png
+
+*** Small-World-Network (scale free network)
+
+- Many short and few long connections.
+- 6 deegrees of separation via snail mail: Our acquaintances formm a small-world network
+- Kleinberg-Network: Probability to be connected: \(\frac{1}{d^x}\), d = distance, x = dimension.
+- Freenet/Hyphanet: \(x=1\)
+
+** Search
+*** Freenet/Hyphanet Search
+
+- Like Kademlia, but forwarded hop by hop → no global reachability or visibility
+- Can search by public key
+- Keyspace: [0.0 : 0.1)
+
+
+#+BEGIN_SRC dot :file freenet-keyspace.png :cmd circo :exports results
+digraph {
+0.1 [color=red]
+0.1 -> 0.5 [color=red]
+0.5 -> 0.6 [color=red]
+0.6 -> 0.4 [color=red]
+
+0.7 [color=blue]
+0.7 -> 0.3 [color=blue]
+0.3 -> 0.2 [color=blue]
+
+edge [style=invis]
+0.0 -> 0.1
+0.1 -> 0.2
+0.2 -> 0.3
+0.3 -> 0.4
+0.4 -> 0.5
+0.5 -> 0.6
+0.6 -> 0.7
+0.7 -> 0.8
+0.8 -> 0.9
+0.9 -> 0.0
+}
+#+END_SRC
+
+#+attr_latex: :width 0.3\textwidth
+#+RESULTS:
+[[file:freenet-keyspace.png]]
+
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-suche.png
+
+*** Types of Keys
+
+- CHK: Content Hash
+- KSK: Keyword Subspace: Password
+- SSK: Signed Subspace: Public Key
+- USK: Updatable Subspace: SSK with version
+
+Format: =XXK@routing,encryption/tarball-name/path/to/file.ext=
+
+Can omit path and name (smaller → optimization).
+
+** Distribution
+*** Distribution in Freenet/Hyphanet
+
+- Network saves content → distributed Cache
+- Files saved encrypted, as 32 kiB fragments with 100% redundancy
+- Manifest contains keys of the fragments as CHKs
+- Limited lifetime: Effectively LRU-Cache:[fn:34]
+ - Saving overwrites randomly chosen fragments
+ - Access restores overwritten fragments
+- Upload to exsting key+path: collision\\
+ → Effectively immutable
+
+
+#+latex: \vspace*{-1.5cm}\hfill
+#+attr_latex: :width 1.5cm :center nil
+file:p2p-grundprobleme-schwarz-verteilung.png
+
+** Usage
+*** Freenet/Hyphanet as Database
+
+- Search by Public Key + Path
+- → personal keyspace
+- → tarballs for structured data (i.e. website)
+- → pub-sub-protocols on decentralized database
+- → Websites, Forums, Chat, …
+
+/Optimization: Subscribe to keys to be able to watch 10k keys and see updates quickly./
+
+*** Getting low latency
+
+- Up to 1kiB, raw, realtime mode: <20s; 30s -- 90s RTT
+- Larger files, in manifest (folder): ~5 min
+
+/Must do it exactly right or it will be slow. Like [[https://dev.to/shadowfaxrodeo/why-your-website-should-be-under-14kb-in-size-398n][14kB websites]]./
+
+**** :B_columns:
+ :PROPERTIES:
+ :BEAMER_env: columns
+ :BEAMER_opt: t
+ :END:
+
+***** *Realtime* (small, interactive) :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.5
+ :BEAMER_env: block
+ :END:
+ #+begin_src scheme
+ PriorityClass . 2 ;; high
+ MaxRetries . 0 ;; default: 10
+ RealTimeFlag . true
+ DontCompress . true
+ ExtraInsertsSingleBlock . 0
+ ExtraInsertsSplitfileHeaderBlock . 0
+ #+end_src
+
+***** *Bulk* (large, slower) :B_block:BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.5
+ :BEAMER_env: block
+ :END:
+
+ #+begin_src scheme
+ PriorityClass . 3 ;; medium
+ RealTimeFlag . false
+ DontCompress . false
+ #+end_src
+
+*** Spam-protection
+
+/WoT (Web of Trust): One of two possibilities in actual use. The other is FMS (Freenet/Hyphanet Message System)./
+
+- ID = USK
+- Trust -100 to 100
+- Rank: Distance → capacity
+ - Rank 1 40 % to 1 %
+ - rank 1: 100 trust = +40 points score.
+
+- Score: Sum of all ratings: trust * rank
+
+- Can scale to arbitrary size at 22 messages per day and person[fn:21]
+
+*** Communication via Freenet/Hyphanet
+
+- Entry: Seed-keys + Captcha[fn:35]-Queue: KSK-Prefix
+- Search: User-specific pages with links, update-infos
+- Distribution: Gossip[fn:36] keys, just upload files
+- Resistance against disruption: Web of Trust with visibility increasing by interaction
+
+/Autospawn node => Freenet/Hyphanet transparently as backend./
+
+#+latex: \vspace*{-1.3cm}\hfill
+#+attr_latex: :width 2cm :center nil
+file:p2p-grundprobleme-schwarz-kommunikation.png
+
+*** Stats
+**** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.05
+ :END:
+**** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.45
+ :END:
+
+#+latex: \vspace{-1.5cm}
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-fetchpull-get.png]]
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-fetchpull-put.png]]
+
+**** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.5
+ :END:
+
+#+latex: \vspace{-1.5cm}
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-weekly-uptime.png]]
+
+#+attr_latex: :height 0.37\paperheight
+ [[./freenet-peer-count.png]]
+
+
+** Privacy and Summary
+*** Privacy
+
+- Seednodes can enumerate all opennet nodes.
+- With pure Friend-to-Friend mode, ISPs may recognize a high volume of
+ encrypted UDP packets.
+- Directly connected peers can see that a search was *started by or
+ forwarded by* a node (hops-to-live with randomized decrement).
+- With friend-to-friend mode, only trusted nodes can be directly
+ connected. Needs key exchange with friends.
+- Nodes can see whether chunks for which they are the best location
+ are accessed but not by whom or how often.
+- IDs in communication are stable pseudonyms: rotated session keys —
+ ratchet — only in custom implementations.
+
+*** Summary
+
+- Entry: Search at a seednode for my ID
+- Search: Greedy Hash search on Small World Network
+- Distribution: Chunk-Tree with Redundancy
+- Communication:
+ - Entry: Seed-keys + CAPTCHA-Queue
+ - Search: Index-Pages, Subscribe for Updates
+ - Distribution: Upload files, websites
+ - Propagating Trust with slowly rising visibility
+
+* Closing
+** Aside
+*** Aside
+
+- Guarantees
+- Magnet-Links
+- WebRTC
+- Lessons learned
+
+*** Guarantees
+
+/They scale by giving few guarantees. From strong to weak:/
+
+- Tampering: All networks here prevent tampering with a file being downloaded.
+- Access control: You need the keys to files to gain access: hashes or public keys.
+- Availability: None of the p2p networks here guarantee it:
+ - Data may not exist
+ - Connections may break
+ - Names may be wrong
+
+/To give availability guarantees, take CRDTs or similar as starting point for proofs./
+
+*** Magnet-Links
+
+#+begin_example
+magnet:?xt=urn:bitprint:TIGER_TREE.SHA1
+&xt=urn:btih:BITTORRENT_INFO_HASH
+&xt=urn:sha1:HASH
+&xl=LENGTH
+&dn=NAME
+&as=LINK_WITHOUT_HASH
+&xs=LINK_WITH_HASH
+&kt=SEARCH_STRING
+#+end_example
+
+/Netzwerk-unabhängig, Link zu HTTP und p2p-Quellen, weitverbreitet/
+
+*** WebRTC
+
+- Runs in the Browser (Javascript)
+- Provides Audio, Video, …, and *Peer-Socket*
+- First connection moderated by server -- avoids many problems
+- p2p-Systems, that don’t need installation
+- Example: WebTorrent https://webtorrent.io/
+
+** Lessons Learned
+*** Thoughts
+
+# TODO: Wie heißt Optimierung für Netzbetreiber bei BitTorrent
+- All Upload Queues are always full. Like all disks are always full.
+ Ask the Large Scale Data Facility at KIT/SCC.
+- Optimization for ISPs often thought about: Prefer clients in same
+ (sub-)net. Gnutella: „p4p“. Pastry (Windows) uses it according to Ghosh.
+- Example for non-greedy routing[fn:37]: Random Walk in ants (programm). Did not gain traction.
+- Throwing money on problems: MaidSafe had 2000$ hardware cost per
+ month. Shut that down 2019.[fn:22] Freenet/Hyphanet has <20$ cost
+ per month.
+
+*** Fallacies of distributed Systems, extended version
+
+**** :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+
+1. The network is reliable
+2. The network is secure
+3. The network is homogeneous
+4. Topology does not change
+5. Latency is zero
+6. Bandwidth is infinite
+7. Transport cost is zero
+8. There is one administrator
+
+**** :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+
+1. Hard disks don’t fail\\
+ Files stay intact
+2. Power is stable
+3. IPs are reachable
+4. Constant factors are negligible
+5. APIs stay compatible
+6. Textfiles are simple
+
+** Legacy
+*** Current developments
+
+/What’s happening today:/
+
+- Spritely Golem: p2p distributable content for the fediverse[fn:16]
+- Decentralized Internet and Privacy at FOSDEM[fn:17]
+ - DAT, GNUnet, Fediverse, Tor, …
+- In Karlsuhe: 23. Gulaschprogrammiernacht: https://entropia.de/GPN23/en 19. bis 22. Juni 2025
+
+** Summary
+*** Summary: Core challenges
+**** :B_columns:
+ :PROPERTIES:
+ :BEAMER_env: columns
+ :END:
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.454
+ :END:
+ - *Entry*: First addresses and routing info
+ #+attr_latex: :width 0.3\linewidth
+ file:p2p-grundprobleme-schwarz-einstieg.png
+ - *Search*: Keyword, Content, Public Key
+ #+attr_latex: :width 0.3\linewidth
+ file:p2p-grundprobleme-schwarz-suche.png
+***** :BMCOL:
+ :PROPERTIES:
+ :BEAMER_col: 0.454
+ :END:
+ - *Distribution*: Tracker, Download-Mesh, Cached fragments
+ #+attr_latex: :width 0.25\linewidth
+ file:p2p-grundprobleme-schwarz-verteilung.png
+ - *Communication*: One-to-one, Forum, News, Comments
+ #+attr_latex: :width 0.4\linewidth
+ file:p2p-grundprobleme-schwarz-kommunikation.png
+
+**** :B_ignoreheading:
+ :PROPERTIES:
+ :BEAMER_env: ignoreheading
+ :END:
+ - /*Disruption*: connect to attackers, spam results, misinformation,
+ poison files, harassment./
+
+*** Summary: Implementations
+#+latex: \small
+
+#+attr_latex: :center nil
+ | | Einstieg | Suche |
+ |------------------+----------------------+--------------------------------|
+ | Gnutella | WebCache | Slow-Start + Keyword-Multicast |
+ | Kademlia | Search own ID | xor-Hash-hierarchy |
+ | BitTorrent | Tracker-URL | Kademlia / Tracker / Web |
+ | Freenet/Hyphanet | Seed-Nodes search ID | Greedy on Small World |
+ | WebRTC | WebRTC Server | - |
+
+#+attr_latex: :center nil
+ | | Verteilung | Störung |
+ |------------------+------------------------------+--------------------|
+ | Gnutella | Alt+NAlt, Range, Merkle-Tree | Heuristik/Credence |
+ | Kademlia | /various/ | - |
+ | BitTorrent | Torrent | Rating on Tracker |
+ | Freenet/Hyphanet | Chunk-Tree with Redundancy | Propagating Trust |
+ | WebRTC | - | - |
+
+
+
+
+*** Good luck! @@latex:\hspace{3.25cm} \(\ddot \smile\)@@
+
+#+latex: \centering
+# #+latex: \(\ddot \smile\)
+
+My wish is that 5 years from now\\
+some of you look back and say:
+
+#+latex: \vspace{0.5cm}
+
+#+begin_quote
+@@latex:\centering@@
+“What I learned in the p2p lecture@@latex:\phantom{”}@@\\
+@@latex:\phantom{„}@@was one of the pillars of my success.”
+#+end_quote
+
+# #+latex: \vspace{0.5cm}
+
+# #+latex: \centering \(\ddot \smile\)
+
+* Appendix :B_ignoreheading:
+ :PROPERTIES:
+ :BEAMER_env: ignoreheading
+ :BEAMER_opt: allowframebreaks
+ :END:
+
+\appendix
+
+**
+
+*** Verweise
+ :PROPERTIES:
+ :BEAMER_opt: allowframebreaks,label=
+ :END:
+
+ \bibliographystyle{apalike}
+ \bibliography{ref}
+
+**** Bilder :B_ignoreheading:
+ :PROPERTIES:
+ :BEAMER_env: ignoreheading
+ :END:
+
+ #+latex: \tiny Bilder: \citet{}
+**** Merkle Tree Patent 1982
+
+https://worldwide.espacenet.com/patent/search/family/022107098/publication/US4309569A?q=pn%3DUS4309569
+
+Eingereicht 1979 als Methode Diffie-Authentication günstiger zu machen.
+
+
+
+[fn:6] Static NAT, Dynamic NAT und Port-Mapping NAT erklärt: https://www.geeksforgeeks.org/computer-network-types-network-address-translation-nat/
+
+* German Backup Slides
+** Weiteres
+
+*** Weitere Knoten finden: X-Try
+
+Beim Handshake (wie HTTP):
+
+ #+latex: \scriptsize
+
+ #+begin_example
+ When rejecting a connection, a servent MUST, if possible, provide the
+ remote host with a list of other Gnutella hosts, so it can try
+ connecting to them. This SHOULD be done using the X-Try header.
+
+ An X-Try header can look like:
+
+ X-Try:1.2.3.4:1234,3.4.5.6:3456
+ #+end_example
+
+*** Weitere Knoten finden: Pong
+
+ #+latex: \scriptsize
+
+ #+begin_example
+ Pong messages contains information about a Gnutella host. The
+ message has the following fields
+
+ Bytes: Description:
+ 0-1 Port number. The port number on which the responding
+ host can accept incoming connections.
+ 2-5 IP Address. The IP address of the responding host.
+ Note: This field is in big-endian format.
+ …
+ * When a Ping message is received (TTL>1 and it was at least one
+ second since another Ping was received on that connection), a
+ servent MUST, if possible, respond with a number of Pong
+ Messages. These pongs MUST have the same message ID as the
+ incoming ping, and a TTL no lower than the hops value of the
+ ping.
+ #+end_example
+
+ → http://rfc-gnutella.sourceforge.net/src/rfc-0_6-draft.html
+
+*** Größe der Query Routing Tabellen in Gnutella
+
+- Hashes: Normalisierte Suchwörter in der Suchanfrage oder im Dateinamen
+- Größe: Variabel, Default in LimeWire 128kiB, interpolation auf größere und kleinere Tabellen möglich.
+- Aktuell verfügbare Quelle: [[https://github.com/metapirate/LimeWire-Pirate-Edition/blob/master/components/gnutella-core/src/main/java/com/limegroup/gnutella/routing/BitSetQRTTableStorage.java#L87][BitSetQRTTableStorage.java]]
+- Hash-Funktion pro Suchwort: [[https://github.com/metapirate/LimeWire-Pirate-Edition/blob/master/components/gnutella-core/src/main/java/com/limegroup/gnutella/routing/HashFunction.java][HashFunction.java]]
+
+*** Suche 4: Dateien nach Hash finden
+
+ - Zugriff auf Magnet-Links[fn:27] brauchte exakte Dateisuche.[fn:23]
+ - Angepasstes Kademlia ⇒ im Abschnitt zu Kademlia.
+
+*** Gnutella Routing Experiment
+
+- Peers: Tisch + davor + dahinter
+- Letzte 2 Hops
+- Suche nach Namen
+- Hash = 1. Buchstabe
+- QRT[fn:28]: Hash der Namen der Peers
+- Intra-UP QRT: QRTs der Peers, zusammengefasst
+
+/Was müsst ihr vorher austauschen?/
+
+*** Warum p2p?
+
+ - *Skalierbarkeit* :: Ein einzelner Server bricht bei etwa 100k Anfragen pro Sekunde ein. /dwd bei Sturm Sabine 2020?/
+ - *Mit Nutzung wachsen* :: Ähnliche Infrastruktur für 1000 Leute oder 10 Millionen Leute
+ - *Infrastrukturkosten* :: 100k€ pro Jahr = Entwickler oder Entwicklerin
+
+ # TODO: Benchmark wrk
+
+*** Warum nicht p2p?
+
+- Gestiegende Leistung von Servern. /Sturm: dwd[fn:19] hielt größtenteils Stand (durch vereinfachte Seite[fn:30])/
+- Handies sind durch Batterie und Netz begrenzt → keine kontinuierliche Leistung. (Nachts möglich?)
+- Viele der einfachen Lösungen unmöglich, z.B. Geld auf Probleme werfen.
+
+
+****
+*** Schlüssel zum Licht
+
+#+attr_latex: :width 0.5\textwidth
+[[file:schluessel-zum-licht.png]]
+
+*** Störquellen
+
+**** Sammeln am Flipchart
+
+**** Quellen
+ :PROPERTIES:
+ :BEAMER_act: <2->
+ :END:
+
+ - *Parasiten*: Bessere Leistung auf Kosten Anderer (leecher).
+ - *Trolle*: Kein Finanzinteresse, minimale Resourcen, nutzen jegliche Lücke.
+ - *Spammer*: Erfolg durch Verbreitung eigener Inhalte.[fn:8]
+ - *Konkurrenten*: Erfolg durch verringerte Qualität des Systems.
+ - *Angreifer*: Erfolg durch Schädigung von Nutzern.
+
+*** Weitere Eigenschaft: Grad der Verteilung
+
+/Serverkoordinierte Teilgruppen bis vollständig dezentrale Interaktion./
+
+*** Suche 1: Slow-Start
+
+„Dynamic Querying“ (DQ)
+
+ - Leaf fragt einen UP nach dem anderen. Stoppt nach „genug“ Ergebnissen (um die 100).
+ - UP fragt Leafs und andere UPs. Stoppt nach „genug“ Ergebnissen.
+
+*** Suche 2: Keyword-Multicast
+
+ Query Routing Protocol (QRP)
+ - Suchwörter normalisiert:[fn:38] lowercase, keine Akzente, …
+ - Query Routing Table (QRT): Set mit schwachen Hashes von normalisierten Suchwörtern
+ - Automatisch hochskaliert für gewünschten Füllgrad
+
+ Intra-Ultrapeer-QRP:
+ - Vereinigung der Tabellen
+
+/Ähnlich: Bloom-Filter/
+
+*** Suche abschicken
+
+#+begin_example
+<15 bytes GUID>0x00
+0x80 ; message type: Query
+0x07 ; TTL: 7
+0x00 ; Hops 0
+0x00,0x00,0x09 ; payload length, max: 4kiB
+0x00,0x00 ; min speed
+test foo ; payload: search criteria
+0x00 ; null-terminator, begins extensions
+#+end_example
+
+- *GUID* :: Globally Unique ID. Zufällig erstellt, um Schleifen zu vermeiden.
+
+*** Mutability: O(1) Zugriff auf neuste Version
+
+- Nutzende: =SSK@…/meine-seite-1/...= → =SSK@…/meine-seite-2/activelink.png=
+- Optimiert: =USK@…/meine/seite/1=
+ - =SSK@[key]/[sitename]-DATEHINT-[year]=
+
+#+BEGIN_EXAMPLE
+HINT
+46
+2013-7-5
+#+END_EXAMPLE
+
+/DATEHINT-[year], DATEHINT-[year]-WEEK-[week], DATEHINT-[year]-[month], DATEHINT-[year]-[month]-[day]/
+
+*** Capacity
+
+#+BEGIN_SRC dot :file freenet-wot-rank.png :exports results
+digraph {
+rankdir=LR
+"0:100%" -> "1: 40%"
+"1: 40%" -> "2: 16%"
+"2: 16%" -> "3: 6%"
+"3: 6%"-> "4: 2%"
+"4: 2%" -> "1%"
+}
+#+END_SRC
+
+#+RESULTS:
+[[file:freenet-wot-rank.png]]
+
+- Rank 1 40 %. rank 1: 100 trust, 40 Punkte als Score.
+- Rank 2 16 %
+- Rank 3 6 %
+- Rank 4 2 %
+- Rank 5 und niedriger: 1 %
+
+/Integer-Mathematik: =2 * 6 / 100 = 0=./
+*** Theoretische und gemessene Link-Längen
+
+ [[./freenet-link-length.png]]
+*** Swapping: Friend-to-Friend wird Small World
+**** :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+#+latex: \LARGE
+
+| *9* | 4 | *3* |
+| 5 | 2 | 8 |
+| 1 | 6 | 7 |
+
+------
+
+
+| 6 | *4* | 9 |
+| 5 | 2 | 8 |
+| 1 | 3 | *7* |
+
+**** :BMCOL:
+:PROPERTIES:
+:BEAMER_col: 0.5
+:END:
+#+latex: \LARGE
+
+| *3* | 4 | 9 |
+| 5 | 2 | 8 |
+| 1 | *6* | 7 |
+
+------
+
+| 6 | 7 | 9 |
+| 5 | 2 | 8 |
+| 1 | 3 | 4 |
+
+
+*** Mein Ziel
+
+Ich will, dass Sie die Fähigkeiten erwerben, unter denen zu sein, die
+die Deployment Zeit um Größenordnungen verringern, ohne dabei die
+Kosten dafür zu zahlen, Torrents als Blackbox zu sehen.
+
+- *Torrent* :: Bezeichnung für eine BitTorrent-Datei oder eine von BitTorrent verwaltete Datei.
+- *BitTorrent* :: Ein p2p-System zum Verteilen großer Datenmengen; Verwaltung läuft auf zentralisierten Trackern
+
+
+*** Projektideen
+
+- Download-Mesh implementieren
+ - Nur Range-Requests + magnet für Quellen
+ - Quellen-Gossip via XAlt[fn:29]
+ - Mit Merkle-Tree oder hashliste für chunks und mit XNalt
+- Suche über WebRTC in Javascript
+ - flooding über vereinfachtes Binärprotokoll
+ - QRP / QRT
+ - Sharing als Upload in local storage
+ - GGEP: Generic Gnutella Extension Protocol; Binarprotokoll für beliebige Daten.
+
+
+* Footnotes
+
+[fn:40] ⇒ shared state, global; in Realität stattdessen: Hash.
+[fn:39] Could this be used in a webshop? Who needs which guarantees?
+
+[fn:38] ungelöst: Japanische oder Chinesische Zeichen.
+[fn:30] ⇒ gibt es eine einfachere Lösung?
+
+[fn:37] Greedy-Routing: forward requests with local information to the best node.
+
+[fn:36] Gossip: attach information to normal communication to distribute it.
+
+[fn:35] CAPTCHA: Usually images with letters whose result is part of a watched key.
+
+[fn:34]LRU: Least Recently Used. Delete oldest first.
+
+[fn:33] Seednode: Bekannter Knoten, der Verbindungen zu anderen vermittelt.
+
+[fn:32] Freeloader: People who don’t upload. Also: „Leech“. Inverse: „Seed“.
+
+[fn:31] xor-Metric: 4 xor 2 ⇒ 100 xor 010 ⇒ 110 ⇒ 6.
+
+[fn:29] XAlt/XNalt: Header, der gute / kaputte Quellen beschreibt.
+
+[fn:28] QRT: Query Routing Table.
+
+[fn:27] Magnet-Links liefern Infos für Downloads in leicht kopierbarem Link.
+
+[fn:26] Tauschbörse: Ein Dienst, in dem Nutzerinnen und Nutzer Inhalte anbieten und von anderen Nutzern herunterladen.
+
+[fn:25] Topologie: Struktur des Netzes.
+
+[fn:19] dwd: Deutscher Wetterdienst.
+
+[fn:24] History of LimeWire: https://melmagazine.com/en-us/story/an-oral-history-of-limewire-the-little-app-that-changed-the-music-industry-forever
+
+[fn:23] kt=…: Suchanfrage, wurde kaum genutzt. Weiteres: https://en.wikipedia.org/wiki/Magnet_URI_scheme#Design
+
+[fn:22] Source: https://www.reddit.com/r/safenetwork/comments/erpvee/dumb_question_is_safe_live/
+
+[fn:20] Set of weak hashes of the search words, number of keys scaled and interpolated dynamically
+
+[fn:21] \tiny https://www.draketo.de/english/freenet/deterministic-load-decentralized-spam-filter
+
+[fn:18] \tiny http://www.bittorrent.org/beps/bep_0003.html
+
+[fn:7] \tiny Teile der Spezifikation: http://rfc-gnutella.sourceforge.net/rfc-gnutella.zip und https://web.archive.org/web/20070429042042/http://www.the-gdf.org/index.php?title=Main_Page
+
+[fn:17] \tiny https://fosdem.org/ — viele Vorträge zu decentralization, privacy, …
+
+[fn:16] \tiny https://gitlab.com/spritely/golem/blob/master/README.org
+
+[fn:15] \tiny https://web.archive.org/web/20120807165933/http://engineering.twitter.com/2010/07/murder-fast-datacenter-code-deploys.html
+
+[fn:14] \tiny http://rfc-gnutella.sourceforge.net/src/Partial_File_Sharing_Protocol_1.0.txt
+
+[fn:13] \tiny https://www.ietf.org/rfc/rfc2169.txt und http://www.nuke24.net/docs/2015/HashURNs.html
+
+
+[fn:2] Wenn der Name im package steht, ist es nicht anonym :-)
+
+[fn:3] Das war mit der Benennung nicht gemeint, aber hiermit haben Sie bereits die Grundlagen für Übungen zu Anwendungen
+
+[fn:1] Beispiel nach RFC 2210 und 2211.
+
+[fn:4] \tiny https://www.akamai.com/de/de/about/our-thinking/state-of-the-internet-report/state-of-the-internet-ipv6-adoption-visualization.jsp
+
+[fn:5] IANA: Internet Assigned Numbers Authority
+
+[fn:8] Werbung ist Spam durch die genutzte Plattform.
+
+[fn:9] Reduziert Swarming auf Download einzelner Dateien, braucht aber caching: Zeitlich begrenzte Zwischenspeicherung.
+
+[fn:10] “The Internet treats censorship as a malfunction and routes around it.” -- John Perry Barlow
+
+[fn:11] 2h lifetime are surprisingly persistent.
+
+[fn:12] gwc resource: https://github.com/gtk-gnutella/gwc
+
+
+# #+toc: headlines 2
+
+
+#+setupfile: ../org-templates/level-1-software.org
+#+LaTeX_CLASS: beamer
+#+LaTeX_CLASS_OPTIONS: [presentation]
+#+beamer_header: \setbeameroption{show notes}
+# #+beamer_header: \setbeameroption{hide notes}
+# #+beamer_header: \setbeameroption{show only notes}
+#+beamer_header: \setbeamertemplate{navigation symbols}{}
+
+# add appendix
+#+LaTeX_HEADER:\newcounter{framenumberwithoutappendix}
+#+latex_header: \usetheme{Berlin}\usecolortheme{dove}
+#+latex_header: \newcommand{\carlo}[1]{\color{blue!65!black}{#1}}
+#+latex_header: \newcommand{\arne}[1]{\color{red!50!black}{#1}}
+#+LaTeX: \definecolor{bg}{rgb}{0.98,0.98,0.98}
+
+
+#+latex_header: \usepackage{hyperref}
+#+LATEX_HEADER: \usepackage{xcolor}
+#+LATEX_HEADER: \usepackage[ngerman]{babel}
+#+LATEX_HEADER: \usepackage{tikz}
+#+LATEX_HEADER: \setlength{\parindent}{0cm}
+#+LATEX_HEADER: \setlength{\parskip}{0.5em}
+
+# unicode input
+#+LATEX_HEADER: \usepackage{uniinput}
+#+LATEX_HEADER: \DeclareUnicodeCharacter{B7}{\ensuremath{\cdot}}
+
+#+LATEX_HEADER: \usepackage{natbib}
+#+LATEX_HEADER: \usepackage{morefloats}
+#+LATEX_HEADER: \hypersetup{
+#+LATEX_HEADER: colorlinks,
+#+LATEX_HEADER: linkcolor={red!50!black},
+#+LATEX_HEADER: citecolor={blue!30!black},
+#+LATEX_HEADER: urlcolor={blue!50!black}
+#+LATEX_HEADER: }
+#+LATEX_HEADER: \usepackage{lmodern}
+#+LATEX_HEADER: \usepackage[protrusion=true,expansion=true]{microtype}
+#+LATEX_HEADER: \usepackage{pdfpages}
+
+#+LATEX_HEADER: % make PDF reproducible as by https://tex.stackexchange.com/questions/229605/reproducible-latex-builds-compile-to-a-file-which-always-hashes-to-the-same-va/313605#313605
+#+LATEX_HEADER: % For pdfTex:
+#+LATEX_HEADER: \pdfinfoomitdate=1
+#+LATEX_HEADER: \pdftrailerid{}
+#+LATEX_HEADER: \pdfinfo{ /Producer () /Creator () }
+
+
+
+# Local Variables:
+# org-confirm-babel-evaluate: nil
+# org-export-default-language: de
+# org-babel-noweb-wrap-start: "{{{"
+# org-babel-noweb-wrap-end: "}}}"
+# org-latex-images-centered: nil
+# End:
+# override template options:
+#+options: toc:nil H:3 num:nil ^:nil
A => software/schluessel-zum-licht.png +0 -0
A => +0 -0
A => +0 -0
M software/vorlesung-verteilte-systeme-1-p2p-nup-thumb.png +0 -0
M software/vorlesung-verteilte-systeme-1-p2p-thumb.png +0 -0
M wissen/klimalinks.org +11 -0
@@ 35,6 35,17 @@ Languages: 🇬🇧 English and 🇩🇪 Deutsch ([[https://www.draketo.de/wissen/klimalinks.xml][RSS-Feed]])
#+toc: headlines 2
+* Klimaschutz Priorität
+ :PROPERTIES:
+ :CUSTOM_ID: waermstes-jahr-ueberleben
+ :ID: 863557d0-a3eb-4bc1-96cd-3b42a46d36e2
+ :PUBDATE: 2025-01-21 Di 00:35
+ :END:
+
+- wdr: [[https://www1.wdr.de/nachrichten/interview-klimaforscher-niklas-hoehne-klimaziele-100.html][Klimaforscher: „Es geht um das blanke Überleben unserer Gesellschaft“]]
+
+[2025-01-20 Mo]
+
* Deutsches Klimakonsortium: Klimaschutz in Parteiprogramme
:PROPERTIES:
:CUSTOM_ID: dkk-klimaschutz-parteiprogramme
M zitate.org +22 -0
@@ 3600,3 3600,25 @@ dead” cultural values, etc.\\
about themselves in the next.*\\
--- OnlineVagabund on creating for\\
\phantom{---} Warhammer 40k ([[https://rollenspiel.social/@OnlineVagabund/113837198403751276][2025-01-17 Fr]])
+
+*
+ :PROPERTIES:
+ :CUSTOM_ID: reject-the-evidence-1984
+ :ID: ebf83cb7-35b7-415a-87d6-11734adbe8dc
+ :PUBDATE: 2025-01-25 Sa 17:18
+ :END:
+
+The Party told you to reject the evidence of your eyes and ears. It was their final, most essential command.\\
+--- George Orwell, 1984
+
+*
+ :PROPERTIES:
+ :CUSTOM_ID: truth-lie-questioned
+ :ID: cce8bd2b-52c7-4719-a05b-212905d9ff78
+ :PUBDATE: 2025-01-25 Sa 17:18
+ :END:
+
+Truth does not mind being questioned.\\
+A lie does not like being challenged.\\
+--- Original source unknown
+