931
contributi
Modifiche
Da GolemWiki.
Risistemata, riscritta la parte sulle reti in maniera semplificata, eliminati imprecisioni e errori, tuttavia rimane un "corso molto molto accelerato sulle reti"
Esistono anche delle ''wireless shield'', molto simili, che però usano le reti senza fili, tra cui WiFi.
Dimenticatevi quindi di poter tirare su in questo modo un sito web con tante pagine, database, eccetera: per questo serve un computer ad uso generale, per quanto piccolo, ad esempio un [https://www.raspberrypi.org/ Raspberry Pi], una [https://beagleboard.org/bone BeagleBone] o un [https://www.olimex.com/Products/OLinuXino/open-source-hardware Olinuxino], anziché Arduino. =Concetti di base sulle reti =TCP/IP In questa sezione sono introdotti alcuni concetti '''fondamentali''' sulle reti, che è bene aver chiaro '''prima''' di cimentarsi nella realizzazione di dispositivi di rete. Alcuni concetti sono stati volutamente trascurati o omessi per semplicità di trattazione (e si vedrà che già così la strada è lunga). Si consiglia comunque di leggere la parte di teoria anche a coloro che già la sanno, a mo' di ripasso, dopodiché passare alla pratica. {{Note|type=warning|text=I concetti espressi nella seguente trattazione non sono sufficienti per la creazione di dispositivi sicuri, perciò è bene utilizzarli solo come punto di partenza per la realizzazione di prototipi, e protocollisuccessivamente approfondire. Potrebbe essere molto fastidioso - o addirittura pericoloso - che qualcuno possa, dalla rete Internet, accendere la nostra caldaia mentre non siamo a casa o spiare i nostri familiari.}} == Teoria ===== Livelli di astrazione ===[[File:osi-network-stack.png|thumb|Livelli di astrazione nelle reti]]Tutti i dispositivi collegati in rete devono rispettare un certoprotocollocerte regole per potersi identificare, ovvero seguire regole e per poter identificarsi parlare fra lorosenza creare conflitti, così come ogni persona ha un proprio nome, e segue delle regole durante una conversazione (es.non parla mentre altri stanno già parlando). Per avere connettività, è stato pensato uno schema che permette la connettività a 7 diversi livelli. Ne descriveremo 5, fondamentali per capire il funzionamento, ma ci preoccuperemo solo dei "dettagli" dei 3 a più alto livello. ==== Livello fisico ====Ogni dispositivo Non ci interesseremo del livello fisico, basta sapere che - com'è ovvio immaginare - una rete cablata su Ethernet è ben diversa da una rete senza fili WiFi già a partire dal mezzo fisico in cui si propagano le informazioni. ==== Livello di collegamento ====Permette ai dispositivi in particolare identificato da una (piccola) rete di parlare tra di loro. A questo livello appartiene il '''MAC Address''', un nome sullaindirizzo univoco per ogni dispositivo esistente.Esso viene assegnato in fabbrica ad ogni dispositivo e non cambia mai. ==== Livello di rete ====Permette ai dispositivi di parlare non solo con i dispositivi della stessa rete, detto ma anche con quelli di reti diverse. A questo livello appartiene l''''indirizzo IP. Ad esempio''', un indirizzo univoco nella mia rete . ===== IP vs MAC =====Perché c'è bisogno di casadue indirizzi, un MAC e un IP, per presentarsi in rete? Non sarebbe sufficiente il computer MAC che è già univoco di suo? I due indirizzi hanno uno scopo e una struttura completamente diversa:* l'indirizzo MAC (Media Access Control) serve per permettere la comunicazione in presenza di più dispositivi, serve cioè per identificarli. Ogni produttore assegna gli indirizzi MAC ai propri dispositivi facendo uso ha di un registro in comune con gli altri produttori, in modo da evitare che due dispositivi diversi possano avere lo stesso indirizzo. Come i ''codici fiscali'', anche gli indirizzi MAC quindi sono molto variegati tra loro, e non danno alcuna informazione su come raggiungere il dispositivo, ma si limitano ad identificarlo.* l'indirizzo IP (Internet protocol) serve invece per permettere la comunicazione tra dispositivi di reti diverse, per trovare la loro collocazione, e per creare reti logiche di dispositivi, raggruppandone un sottoinsieme. Come gli ''indirizzi geografici'', anche gli indirizzi IP di dispositivi "vicini" tra loro sono simili (cioè di dispositivi che si trovano nella stessa rete), e forniscono una chiara identificazione di dove si trovano. Un dispositivio con indirizzo MAC <code>AA:BB:CC:DD:EE:FF</code> lo conserverà per sempre, ma potrà cambiare il suo indirizzo IP da <code>192.1680.2.142100</code>, e il cellularea <code>192.168.10.119100</code>a seconda della rete in cui si trova. Tutti gli indirizzi Si rifletta sull'analogia (MAC = codice fiscale) e (IP = indirizzo geografico). ==== Livello di trasporto ====Il livello di rete permette di trasportare i dati da un dispositivo ad un altro, ma, quando questi dati sono composti da una quartina giunti al dispositivo di destinazione, a chi vanno consegnati? Se un dispositivo esegue più applicazioni di numerirete, a quale applicazione devo dare questi dati?compresi fra 0 Si pensi al computer, che permette di navigare sul web e 255contemporaneamente vedere un film in streaming: quando i dati giungono al computer, separati da come fa a sapere se sono un puntopezzo di film o una pagina web? Questo problema viene risolto dal livello di trasporto. Solitamente, nellereti Il '''protocollo TCP''' che utilizziamo si occupa anche del controllo di casatrasmissione, cioè di rendere affidabile la prima coppia comunicazione dati in rete tra mittente e destinatario: farà di tutto per impedire che i dati vengano persi o giungano corrotti a destinazione, eventualmente trasmettendoli più volte. TCP si occupa anche di controllare il flusso della trasmissione e evitare congestione all'interno della rete. Una caratteristica importante di TCP è fissa il concetto di '''porta''', un numero che permette di distinguere i diversi processi a 192 cui sono destinati i dati trasmessi. Un Arduino, pur eseguendo un solo compito, dovrà comunque offrire il suo servizio ''rimanendo in ascolto dietro una certa porta''. ==== Livello applicazione ====Una volta giunti al dispositivo giusto e 168al servizio giusto, i dati vengono finalmente letti dal nostro programma, mentre secondo un altro protocollo detto ''di livello applicativo''. Dovremo preoccuparci di scrivere le azioni che deve eseguire il terzoprotocollo nel nostro sketch di Arduino. Il protocollo che useremo è '''HTTP''' (Hyper Text Transfer Protocol), che sta alla base del web. {{Note|type=info|text=Ogni livello realizza un''''astrazione''', ossia può essere utilizzato senza doversi preoccupare di come funzionino i livello sottostanti.Per esempio, se abbiamo in casa uno smartphone collegato tramite WiFi e un computer fisso tramite Ethernet, se ci preoccupiamo di farli dialogare a livello di rete, ci basta conoscere i loro indirizzi IP senza doversi preoccupare dei livelli sottostanti (collegamento e fisico) che sono realizzati con due tecnologie differenti.}} == Pratica ===== MAC Address ===La libreria per lo shield necessita dell'indirizzo MAC del dispositivo, che è solitamente scritto su un adesivo sotto l'Ethernet Shield. Ha una forma del tipo <code>d8:ab:cd:ef:03:69</code> === IP Address ===La libreria necessita anche dell'indirizzo IP del dispositivo. Questo viene solitamente scritto nella forma <code>1.Quello 2.3.4</code>, dove ogni numero rappresenta un byte (e quindi può assumere valori che vanno da <code>0</code> a <code>255</code>). Ricordiamo che l'IP cambia a seconda della rete in cui siamo interessati questo è quindi inserito: pertanto, può darsi che debba essere modificato nello sketch quando ci si sposta tra casa, ufficio, officina. ==== Come scegliere l'ultimo numero, indirizzo IP? ====Chi è che variadà gli indirizzi in una rete? da Teoricamente ogni dispositivo può autoassegnarsi un indirizzo, ma questo non viene fatto su oggetti "quotidiani" (cellulari, computer, etc..) perché verrebbero a dispositivocrearsi altrimenti conflitti quando due o più si assegnano lo stesso indirizzo. C'è quindi un computer dedicato che esegue il protocollo '''DHCP''' ''Dynamic Host Configuration Protocol'' che ha l'autorità di dare ad ognuno il suo indirizzo evitando i conflitti; nelle reti domestiche questo compito viene svolto dal modem del gestore telefonico. Fa eccezione Il server DHCP dispone di un insieme di indirizzi da cui ''pescarne a caso'' uno libero da assegnare a chi ne faccia richiesta. Nelle reti domestiche, questo insieme è in genere nell'intervallo <code>192.168.0.2</code>-<code>192.168.0.254</code> oppure <code>192.168.1.2552</code>-<code>192.168.1.254</code>. Per i dispositivi che ''si collegano'' a servizi offerti da ''altri'' su Internet non ci interessa che abbiano un IP particolare, e quindi lo possono anche chiedere al modem col meccanismo del DHCP: ogni volta che è si collegano, può essergli assegnato un indirizzo speciale dettodiverso: si dice che hanno un ''IP dinamico''. I dispositivi a cui invece ''ci dobbiamo collegare'', che sono essi stessi fornitori di servizi, dovrebbero avere sempre lo stesso IP, noto e indipendente dalle volontà del server DHCP, così da poter essere facilmente raggiungibili: si dice che hanno un ''IP statico''. broadcast Anche il nostro Arduino dovrà avere un IP statico, che equivale gli assegneremo nel programma. Prima però dovremo assicurarci di due cose:* quale rete di IP è in uso nella propria rete domestica;* se l'IP scelto è disponibile, ovvero se il server DHCP non l'ha già assegnato a parlare contemporaneamente con tutti iqualcuno; dispositivi connessi alla Da un computer connesso, vediamo la rete di casa: Su Linux: $ '''ip addr''' 1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff inet 192.168.0.6/24 brd 192.168.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::aabb:ccff:fedd:eeff/64 scope link valid_lft forever preferred_lft forever Su Windows: > '''ipconfig''' Connection-specific DNS Suffix . : golem.linux.it. IP Address. . . . . . . . . . . . : 192.168.0.6 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.0.1
In questi casi la rete è <code>192.168.0.0</code>.
ping 192.168.0.80
==Il codice Arduino==
}
</pre>
[[Category:Howto]]