Podchaser Logo
Home
Algoritmo Tit-for-Tat E Protocollo BitTorrent

Algoritmo Tit-for-Tat E Protocollo BitTorrent

Released Wednesday, 25th January 2023
Good episode? Give it some love!
Algoritmo Tit-for-Tat E Protocollo BitTorrent

Algoritmo Tit-for-Tat E Protocollo BitTorrent

Algoritmo Tit-for-Tat E Protocollo BitTorrent

Algoritmo Tit-for-Tat E Protocollo BitTorrent

Wednesday, 25th January 2023
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

Oh, finalmente, eccoci di nuovo qui. È un po' che non ci sentiamo, vero? Purtroppo,

0:06

in queste ultime settimane, anzi, diciamo più mesi, sono stato davvero sommerso dal lavoro

0:13

e non ho avuto modo di seguire questo progetto quanto avrei voluto e quanto avevo detto che

0:18

avrei fatto. Però oggi sono di nuovo qui e ricominciamo alla grande parlando di uno

0:23

di quegli argomenti principe di pensieri in codice, e cioè uno di quei tanti algoritmi

0:28

che utilizziamo ogni giorno ma magari nemmeno sappiamo di farlo. In questo episodio, infatti,

0:35

ritorniamo a parlare di come funzionano i nostri software ed in particolare di

0:41

algoritmo TIT4TAT e protocollo BitTorrent.

0:59

Iniziamo subito con un po' di storia che non fa mai male. Negli anni 50 del secolo scorso,

1:06

il matematico canadese Albert Tucker formulò un problema nell'ambito della teoria dei giochi,

1:13

il quale sarebbe presto divenuto famoso anche fra i non addetti ai lavori. Spesso definito

1:20

come paradosso, il dilemma del prigioniero, questo è il nome del gioco, consiste nel

1:25

prendere due ipotetici soggetti, due prigionieri appunto, e metterli di fronte ad una scelta che

1:32

determinerà i vantaggi che otterranno e le conseguenze che dovranno poi subire. Nello

1:37

specifico, nella sua formulazione più classica, il dilemma suona più o meno in questo modo. Due

1:43

malviventi vengono arrestati ed accusati di un crimine. I due poi vengono tenuti in celle

1:49

separate, non possono comunicare, ma ciascuno è a conoscenza del fatto che è stata arrestata

1:55

anche un'altra persona per il suddetto crimine. A questo punto gli investigatori iniziano con

2:01

degli interrogatori separati e danno ad entrambi la possibilità di confessare e accusare il complice

2:07

per avere in cambio maggiore clemenza. Ciò vuol dire in pratica che ciascuno può facilitare le

2:13

indagini scaricando la colpa del crimine sull'altra persona, con lo scopo di vedere ridotta la propria

2:20

pena. E siccome parliamo di un gioco matematico, a questo punto si vengono a configurare tre

2:25

possibili scenari ben distinti. Numero uno, entrambi i soggetti decidono di non confessare,

2:31

attenendosi ad una sorta di codice morale del criminale e non accusandosi l'un l'altro. In

2:37

questo scenario gli inquirenti non sono in grado di dimostrare la loro colpevolezza per il crimine

2:43

in questione ed entrambi vengono condannati ad un solo anno di reclusione per un crimine minore.

2:50

Nel secondo scenario invece uno dei due decide di tradire l'altro. In questo caso il primo,

2:57

cioè il traditore, se la cava senza scontare un giorno di galera, mentre il secondo ci rimarrà

3:03

per ben sei anni. E infine nel terzo scenario entrambi i criminali decidono di tradirsi l'un

3:09

l'altro. In pratica accusandosi vicendevolmente di crimini gravi, entrambi otterranno uno sconto

3:17

e verranno condannati a tre anni ciascuno. Ora puoi mettere pausa e fermarti a riflettere sul

3:23

problema o magari su cosa faresti tu o qualcuno che conosci, ma conti alla mano e visto che quelle

3:31

che ti ho dato sono le uniche informazioni disponibili per la scelta, dovrebbe apparire

3:37

subito chiaro che la migliore strategia da attuare per entrambi sia quella di tradirsi a vicenda e

3:44

beccarsi tre anni a testa. Certo c'è l'opzione in cui entrambi non collaborano, nella quale

3:50

prendono un anno di galera ciascuno, ma senza informazioni su come l'altro si potrebbe comportare

3:56

conviene maggiormente dare per scontato che questi cercherà di prendere la decisione migliore per se

4:02

stesso, puntando quindi a collaborare per ridurre o a zerare la pena. In tale condizione la cosa più

4:10

saggia che uno dei due possa fare è comunque collaborare con gli investigatori e tradire il

4:16

proprio compagno. Nel migliore dei casi l'altro non avrà collaborato e quindi il traditore se la

4:22

caverà senza pena. Nel peggiore anche l'altro avrà collaborato e il traditore prenderà comunque tre

4:29

anni invece di sei. Dunque questa decisione da prendere in tale contesto viene definita appunto

4:35

dilemma del prigioniero. Descritto in questo modo un problema del genere può apparire un bel

4:41

giochino da raccontare al bar davanti a una birra ma niente di più e invece il dilemma del prigioniero

4:48

rappresenta la logica di fondo di molti comportamenti umani. Un esempio che tutti noi conosciamo è ciò

4:55

che hanno fatto stati uniti ed unione sovietica durante la cosiddetta guerra fredda. Se ci pensi

5:02

la situazione è la stessa, le scelte non sono più se collaborare o meno con la polizia ma diventano

5:08

se competere o meno nella corsa agli armamenti nucleari e di conseguenza gli scenari diventano

5:15

uno. Entrambe le potenze decidono di non investire in armamenti e risparmiare così enormi risorse da

5:22

destinare ad usi ben più meritevoli. Due, una delle due potenze decide di armarsi e l'altra no, la

5:30

prima sprecherà tantissimi soldi in spese militari ma la seconda rischierà la cancellazione dalla

5:35

faccia della terra da parte dell'avversario. Tre, entrambe le potenze decidono di armarsi e

5:41

spendere miliardi di dollari per mantenere l'equilibrio strategico e guarda un po' come

5:47

ben sappiamo la scelta è stata quella dell'escalation degli armamenti, lo scenario numero 3, svantaggiosa

5:53

per entrambi ma la scelta migliore nell'ottica dell'impossibilità di sapere realmente cosa

6:01

avrebbe fatto l'avversario. Ma come dicevo prima questo è solo un esempio fra i tanti possibili,

6:07

schemi del genere si possono ritrovare continuamente nel comportamento di persone, comunità, aziende e

6:13

persino stati. In tali scenari la strategia più vantaggiosa viene definita equilibrio di Nash ed è

6:21

in pratica quella scelta in cui ciascun soggetto non ha modo di migliorare ulteriormente la propria

6:28

situazione facendo ricorso solo alle proprie forze. Tieni ben presente infatti che se è pur vero che

6:35

gli scenari possibili sono tre, in realtà le scelte possibili per ciascun prigioniero sono soltanto

6:43

due. Questo è un passaggio fondamentale da capire. I due soggetti dell'esperimento infatti possono

6:49

scegliere se confessare o negare, se collaborare o non collaborare, se investire in armamenti

6:55

nucleari o meno. Ma gli scenari risultano essere il frutto della somma delle scelte effettuate da

7:03

entrambi. Nessuno dei due può determinare la propria situazione in maniera totalmente autonoma

7:08

ma deve in qualche modo subire anche la scelta dell'avversario. Ok, tutto bellissimo. Spero di

7:21

non essere stato troppo prolisso e di essermi spiegato in maniera sufficientemente chiara,

7:26

ma sono certo che ora ti starai chiedendo perché tutto questo parlare di teoria dei giochi? Beh,

7:33

per capirlo dobbiamo fare un altro piccolo sforzo, un piccolo passo in più. Un passo che può sembrare

7:40

banale ma che ti assicuro rende tutto il nostro discorso molto più interessante. In pratica,

7:46

per come te l'ho descritto finora, il dilemma del prigioniero è un evento singolo. Due attori

7:52

vengono messi di fronte ad una scelta e per ciascuno le due opzioni disponibili risultano

7:57

essere più o meno vantaggiose in relazione alla scelta dell'altro. Questi due scelgono,

8:03

ottengono un qualche risultato e l'equilibrio di Nash ci dice qual è il risultato ottimale

8:10

ottenibile in autonomia. Fine. Ma se invece considerassimo una serie di dilemmi del prigioniero

8:17

che si susseguono nel tempo? Mi spiego. Se invece di un'unica occasione di scelta gli attori in

8:23

gioco avessero tante possibilità e potessero decidere in base non solo alle opzioni disponibili

8:30

in un singolo momento ma anche in base a delle scelte fatte in precedenza? Così non ti sembra

8:37

più interessante. Certo non possiamo pensare che ci sia una guerra fredda ogni settimana,

8:43

né spero per te che tu possa pensare di essere arrestato o arrestata ogni mese, ma quello che

8:49

possiamo invece fare è inventarci una nostra situazione, ad esempio un piccolo semplice gioco.

8:55

E proviamo a immaginarlo questo gioco. Ci sono due giocatori, questi due giocatori passeggiano

9:02

seguendo percorsi casuali in un parco relativamente piccolo, quindi si incontrano con una certa

9:08

frequenza. Quando le loro strade si incontrano ciascuno dei due ha due possibilità. Può salutare

9:17

l'avversario oppure tirargli un bello schiaffo. Salutandosi entrambi i due giocatori totalizzano

9:23

due punti ciascuno, scenario 1. Se invece uno saluta e l'altro schiaffeggia allora l'equilibrio

9:30

viene meno e chi ha schiaffeggiato guadagna tre punti mentre chi ha salutato ed ha preso la sberla

9:37

non fa punti, scenario 2. Infine prendendosi a schiaffi entrambi i due totalizzano mezzo punto

9:45

ciascuno, scenario 3. È chiaramente una situazione simile a quelle precedenti e l'unica differenza sta

9:51

nel fatto che si ripete nel tempo permettendo ai giocatori di effettuare più scelte in sequenza e

9:58

di cumulare i punti relativi. Come starai già immaginando ora le scelte diventano molto più

10:05

interessanti. Finché i due scelgono sempre di salutarsi mantengono un buon punteggio globale ma

10:11

per nessuno dei due si tratta del punteggio ottimale. Al primo incontro infatti avranno due

10:17

punti a testa poi quattro poi sei dopo cinque saluti siamo a dieci punti ciascuno cioè 20

10:24

punti globali. Però ad un certo punto uno dei due potrebbe pensare che mollare schiaffoni sia

10:31

una scelta migliore. D'altronde se l'altro fosse un pacifista e continuasse sempre a salutare la

10:38

situazione sarebbe più o meno questa. Primo incontro pacifista 0 violento 3 secondo incontro

10:45

pacifista sempre 0 violento 6. Dopo cinque incontri il violento avrebbe totalizzato ben

10:52

15 punti mentre il pacifista sarebbe a 0. La situazione del violento sarebbe molto migliore

10:59

di quella di prima e quella del pacifista molto peggiore. Ma se in fondo il pacifista non fosse

11:05

poi così tanto pacifista magari dopo il primo schiaffo potrebbe iniziare a menare anche lui le

11:11

mani e quindi avremmo primo incontro 3 a 0 per il violento ma poi schiaffi a non finire. Secondo

11:18

incontro 3 e mezzo a mezzo. Ti ricordo che picchiarsi entrambi fa totalizzare solo mezzo

11:24

punto ciascuno. Poi 4 a 1 poi 4 e mezzo a 1 e mezzo e così via fino ad un risultato dopo 5

11:31

incontri di 5 a 2. Certo quello che ha iniziato a picchiare per primo avrebbe un punteggio più

11:37

alto dell'altro giocatore ma comunque un punteggio molto più basso di quelli totalizzati con le

11:44

strategie precedenti. In definitiva la strategia collaborativa cioè quella di salutarsi sarebbe

11:50

la scelta globalmente più vantaggiosa quindi quella che darebbe il maggior numero di punti

11:57

ad entrambi. E quindi? Già capito dove voglio arrivare? Ora la situazione non è più semplice

12:04

come lo era con il dilemma del prigioniero preso come evento singolo. Gli arrestati infatti avevano

12:09

come migliore opzione quella di accusarsi vicendevolmente perché senza avere altre

12:14

informazioni ciascuno sceglieva razionalmente la soluzione meno brutta per se stesso. Ma qui

12:21

nel nostro gioco del parco ci sono altre informazioni che sono quelle sul comportamento

12:28

passato dell'avversario. Come si è comportato durante l'incontro precedente e in quello prima

12:34

ancora? E se gli incontri fossero 10, 100 o 1000? Ecco che si crea lo spazio per immaginare una

12:41

strategia di comportamento più interessante e complessa e ovviamente noi da buoni informatici

12:48

sappiamo che il termine strategia spesso è sinonimo di algoritmo. Questo particolare

12:55

algoritmo prende il nome di tit for tat e alla fine non si tratta di niente di nuovo o rivoluzionario,

13:02

in italiano noi lo chiamiamo semplicemente occhio per occhio e consiste appunto nel rispondere con

13:08

lo stesso comportamento che si riceve da parte di un altro soggetto. In poche parole se l'altro si

13:15

comporta in modo cooperativo allora noi ci comporteremo in modo cooperativo a nostra volta,

13:20

se l'altro invece si comporta in modo egoistico allora anche noi ci comporteremo in modo simile,

13:26

almeno finché l'altro non mostri una maggiore disponibilità a migliorare il proprio atteggiamento.

13:32

Rapportato al nostro gioco di prima vuol dire che di base ogni giocatore inizia col salutare

13:39

l'altro quando lo incontra ma se in un qualsiasi momento riceve uno schiaffo allora dal turno

13:45

successivo restituirà a sua volta uno schiaffo. La strategia tit for tat è molto efficace in

13:51

molti contesti e questo poiché incoraggia i giocatori a comportarsi in modo cooperativo ed

13:57

ad evitare comportamenti egoistici che si approfittano degli altri senza contribuire a

14:04

propria volta. Guarda caso questo particolare algoritmo volto ad incoraggiare il comportamento

14:15

cooperativo in informatica è largamente utilizzato in particolare per applicazioni

14:21

basate su operazioni dirette fra i singoli soggetti come ad esempio nel caso di BitTorrent.

14:27

Ora sono sicuro che tutti abbiamo utilizzato BitTorrent almeno una volta nella vita ma è

14:32

sempre meglio fare un piccolo ripasso. BitTorrent è un protocollo di condivisione file peer-to-peer

14:39

detto P2P studiato per consentire agli utenti di condividere file di grandi dimensioni in modo

14:46

efficace. Per fare ciò in questo protocollo i file vengono suddivisi in piccoli pacchetti

14:52

dati che possono essere scaricati e condivisi indipendentemente l'uno dall'altro. Ciò significa

14:58

che ogni utente può scaricare una parte del file e iniziare immediatamente a ricondividerla anche se

15:05

il download del file intero non è ancora stato completato ed inoltre è possibile ricevere diversi

15:11

pacchetti di dati da più fonti contemporaneamente e in questo modo velocizzarne il download. Quando

15:18

un utente vuole scaricare un file sfruttando BitTorrent utilizza il proprio client per

15:23

connettersi ad un sistema chiamato tracker che è adibito a gestire la rete di condivisione dei

15:30

file. Il tracker fornisce al client l'elenco di altri client che condividono il file richiesto e

15:37

di conseguenza questo può iniziare a scaricare uno o più pacchetti di dati da più sorgenti. Ciascun

15:45

client BitTorrent oltre ad effettuare il download dei file richiesti lavora contemporaneamente per

15:50

ridistribuire i pacchetti di dati di cui è già in possesso quindi di fatto ciascun utente mentre

15:57

scarica un file ricarica anche automaticamente le porzioni di tale file di cui già dispone e

16:04

questo meccanismo di ridistribuzione è proprio alla base del funzionamento del protocollo

16:09

BitTorrent ed è il motivo principale della sua estrema efficienza e della sua grande diffusione

16:15

ed è dunque fondamentale che il comportamento di tutti i client mantenga un certo livello di

16:21

correttezza e cooperazione senza il quale tutto il sistema verrebbe meno. Se infatti ci fossero in

16:28

giro applicazioni implementate per mantenere un atteggiamento parassitario scaricando solamente

16:34

da chiunque si trovi a tiro senza mai ricondividere quanto ottenuto allora la velocità ed efficienza

16:41

del protocollo ne verrebbero danneggiate a scapito degli utilizzatori onesti. Come avrai

16:52

quindi certamente già capito l'algoritmo TIT4TAT risulta essere una base di partenza molto adatta

16:59

in questo tipo di situazioni per determinare come un client BitTorrent dovrebbe comportarsi

17:05

nei confronti degli altri. L'idea alla base è abbastanza semplice ogni client dovrebbe essere

17:11

disposto a condividere file con gli altri ma solo se anche questi sono disposti a farlo a loro volta.

17:17

Proprio come accadeva per la strategia ottimale dei nostri giocatori nel parco finché ciascuno

17:23

dei due manteneva un rapporto cordiale salutando e non aggredendo l'altro anche l'altro continuava

17:30

ad essere cooperativo. Appena uno dei due veniva meno al tacito patto di collaborazione anche

17:36

l'altro reagiva nello stesso modo. In altre parole nel protocollo BitTorrent un client risponde con

17:44

lo stesso comportamento che riceve dagli altri client se l'altro è disposto a condividere file

17:50

allora lui è disposto a fare lo stesso se invece l'altro non è disposto a condividere allora lui

17:57

risponde non condividendo a sua volta con quel client. Infine come sarai certamente intuendo

18:04

c'è anche da considerare che la strategia tit for tat può essere anche soggetta ad un fenomeno

18:09

chiamato punizioni a catena nel quale i soggetti decidono di non cooperare a oltranza. Se ad

18:17

esempio due client iniziano a rifiutare la condivisione l'un l'altro si rischia di entrare

18:22

in un circolo che può portare al risultato peggiore per entrambi. Quindi per tenere conto di

18:29

ciò nell'implementazione reale all'interno del protocollo BitTorrent la versione dell'algoritmo

18:35

tit for tat utilizzata è ovviamente un po' più avanzata della sua formulazione base. Esistono

18:42

infatti degli accorgimenti che puntano a mantenere un minimo di apertura verso qualsiasi nodo e questo

18:49

proprio per evitare situazioni di stallo in cui dei nodi si ritrovino ignorati da tutti gli altri.

18:56

Per fare ciò innanzitutto ogni client prova a riaprire la condivisione con cadenza periodica

19:02

alla ricerca di una reazione positiva anche dai nodi più avari diciamo così. In secondo luogo

19:09

poi il nodo battezzato come parassita non viene effettivamente disconnesso ma gli viene lasciato

19:16

l'accesso ad una connessione con un minimo di banda per dargli la possibilità di migliorare

19:22

il proprio upload e quindi riguadagnare uno status accettabile agli occhi degli altri. Infine due

19:29

nodi che sono in fase di scambio tendono a massimizzare i vantaggi reciproci cercando

19:34

l'uno nell'altro i pacchetti di cui hanno bisogno e per fare ciò estremizzano il concetto di

19:41

collaborazione tra i client al punto da rendere possibile per uno condividere verso l'altro anche

19:49

più di quanto l'altro possa ricambiare. Insomma grazie all'implementazione di questa strategia

19:55

TIT4TAT avanzata il protocollo BitTorrent è in grado di mantenere un proprio equilibrio e di

20:02

fornire un servizio funzionale ed efficiente. Tra i vari nodi della rete presi a due a due si

20:09

raggiunge quindi quella che viene definita efficienza di pareto cioè uno stato di equilibrio

20:16

in cui non ci sono ulteriori opportunità di scambio che potrebbero portare ad una situazione

20:22

migliore di quella corrente. Bene grazie per aver ascoltato questo episodio di pensieri in codice

20:33

io come al solito spero sia stato di tuo interesse e spero anche che ti sia mancato almeno quanto è

20:38

mancato a me. Un piccolo ringraziamento speciale va a Edoardo e Carlo che hanno continuato a

20:44

credere nel progetto nonostante lo stop improvviso di oltre tre mesi e che me l'hanno

20:50

dimostrato con le loro donazioni mensili. Ti ricordo che sul sito pensieriincodice.it trovi

20:56

tutti i link del progetto gruppo telegram donazioni affiliazioni eccetera e mi raccomando fai ascoltare

21:03

questo episodio a qualcun altro un amico un parente un conoscente un estraneo che se ognuno di noi

21:09

porta anche un ascoltatore in più tra una settimana siamo già il doppio. In ultimo ti

21:14

do appuntamento al prossimo episodio e non dimenticare mai che un informatico risolve

21:20

problemi a volte anche usando il computer

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features