Comunicazione Ethernet
Le comunicazioni in rete fra calcolatori sono standardizzate a diversi livelli di astrazione, uno sviluppato sull'altro. Questi partono dal livello più basso, in cui vediamo le trasmissioni solo come una sequenza di segnali elettrici, a quello più alto che è quello con cui interagiscono le applicazioni utente. Lo standard in questione è identificato con la sigla ISO/OSI, e questi livelli si chiamano appunto Livelli OSI.
In questo esercizio descriviamo brevemente due livelli superiori al primo (quello dei segnali elettrici), e i comandi in Linux che ci permettono di analizzare cosa succede in tali livelli.
Livello 2: indirizzi MAC
Il livello 2, detto data-link, è a sua volta diviso in due parti: LLC e MAC; il primo gestisce la trasmissione di dati sul canale (ad esempio chi parla quando, nel caso di più trasmissione contemporanee), mentre il secondo descrive come organizzare i dati da essere spediti.
Vedremo qualche esempio di cosa appare del protocollo MAC ai livelli più alti. Una delle feature principali del protocollo è che i dati da trasmettere vengono impacchettati in un frame, e questo contiene anche un'indirizzo di destinazione dell'interfaccia di rete che deve ricevere il pacchetto. Solitamente ci si riferisce a questo indirizzo come MAC address.
Il MAC address ha significato solo nella rete locale in cui ci si trova: i computer direttamente collegati tramite un cavo oppure uno switch, come questo: Gli indirizzi sono composti da 12 cifre esadecimali, di solito raggruppate a coppie, ad esempio:
b8:5f:98:ce:a6:86
$ ip address showQuesto mostra molte informazioni; l'interfaccia di rete di interesse si chiamerà (su mathsgalore)
ens160
,
e l'indirizzo MAC è identificato dall'etichetta
link/ether
.
ip
si può usare per visualizzare vari dati sulla
configurazione della rete, e anche per configurarla, nel caso si possiedano
sufficienti permessi (non è però il vostro caso).
Quando ci si collega ad un'altra macchina, il PC ha bisogno di sapere
l'indirizzo MAC corrispondente, per poterlo inserire all'interno dei
pacchetti (frame) da spedire. Vedremo poi come questi indirizzi vengono
ottenuti. Per il momento,
tramite il comando arp
, possiamo vedere quelli che il sistema
ha correntemente in memoria.
arp
per vedere la lista degli
indirizzi MAC attualmemtente in memoria del PC corrente. Si controlli
quali delle altre macchine mathsgaloreN.unipi.it
sono elencate.
Se ne scelga una che non c'è, e si mandi un pacchetto con il comando
ping -c 1 mathsgaloreN.unipi.it
(vedremo poi i dettagli di questo comando).
Si verifichi ora la tabella degli indirizzi,
e si controlli che sia apparso l'indirizzo della nuova macchina.
Livello 3: IP
Al momento non è molto chiaro come questi indirizzi MAC vengono determinati;
per collegarsi ad una macchina noi in realtà utilizziamo un nome semplice
da ricordare, come mathsgalore4.unipi.it
; tuttavia, questo viene
tradotto in un indirizzo numerico in formato IP dal sistema DNS
(che vedremo
nel dettaglio fra poco).
Un indirizzo IP è formato da 4 numeri interi da $0$ a $255$; ad esempio
l'indirizzo di mathsgalore4.unipi.it
è
131.114.50.240
. Questo indirizzo, al contrario del MAC address,
permette di localizzare il computer non solo nella rete locale ma in
tutta la rete Internet.
ip address show
per determinare
l'indirizzo IP della macchina alla quale si è collegati. Si chieda ad un
collega nello stesso gruppo l'indirizzo della macchina trovata (possibile
collegati a macchine diverse), e si provi a collegarsi direttamente con
l'indirizzi numerico:
$ ssh xxx.yyy.zzz.www
Quando decidiamo di collegarci, o comunque di spedire un pacchetto, ad un determinato indirizzo IP, il computer deve per prima cosa determinare se quel computer si trova una rete locale, direttamente collegata con un cavo, ed è quindi direttamente raggiungibile spedendo un pacchetto con il giusto indirizzo MAC. Se è questo il caso, chiede sulla rete: "quale MAC ha l'IP xxx.yyy.zzz.www?"; appena ottiene risposta, impacchetta i dati da mandare.
Se invece così non è, il computer deve appoggiarsi ad un altro computer per chiedere l'inoltro del pacchetto a destinazione. Questo computer a sua volta potrebbe appoggiarsi ad altri, e così via. Questi "computer di appoggio" sono detti router. Anche il router fornito dal vostro operatore telefonico per l'ADSL di casa svolge questo ruolo, sebbene abbastanza in piccolo.
ip route show
per mostrare la tabella
di routing sul computer a cui si è collegati.
Nella tabella di routing si vedranno due tipi di campi:
- Una destinazione di default, che viene raggiunta attraverso il
router per questa rete (per mathsgaloreN l'indirizzo del router è
131.114.50.1
). Questa indica il router utilizzato nel caso non ci sia alcuna regola diversa indicata nelle altre righe. - Alcune destinazioni legate a sottoreti (ovvero insiemi
di indirizzi) che sono fisicamente collegate alla macchina. Queste
sono identificate da stringhe del tipo:
xxx.yyy.zzz.www/N
dove/N
è detta netmask, e sta ad indicare il numero di bit iniziali che tutti gli indirizzi della rete devono condividere. Gli altri bit, quelli finali, determinano tutti gli indirizzo disponibili nella rete. In particolare, gli indirizzi contenuti saranno $2^N$ (in realtà quelli utilizzabili un po' meno, perché alcuni sono riservati) - In principio, ci potrebbero essere regole particolari, del tipo "per questa sottorete usa questo router, invece che quello di default". Non dovrebbero però essere presenti sui computer mathsgalore.
192.168.0.0/30
è fatta di 4 indirizzi:
192.168.0.0, 192.168.0.1, 192.168.0.2, 192.168.0.3
Sui sistemi Linux (ma anche su Windows e Mac) esiste un comando che, tramite un protocollo apposito, permette di testare la connettività fra due computer, specificando il loro indirizzo IP. Questo programma si chiama ping. Come il nome suggerisce, il software invia una richiesta all'host di destinazione (il ping), e riceve una risposta (il pong). Da questo determina il tempo che è richiesto per un pacchetto a fare andata e ritorno da un determinato host.
ping
per contattare:
- Lo stesso computer dove si è attualmente collegati (ovvero, mandando un messaggio a se stessi).
- Un altro computer in laboratorio
- Un computer nella rete di Ateneo, ad esempio
www.dm.unipi.it
. - Il server che offre la pagina
www.google.com
. - L'IP
184.29.182.169
, che è quello di uno dei server che ospita il sito della Casa Bianca. Questo server si trova negli Stati Uniti. Quanto ci mette un pacchetto ad andare e tornare da oltre oceano? Sapendo che la velocità della luce è di 299792458 metri al secondo (e che l'informazione non può viaggiare più veloce di così), quando ci potrebbe mettere nel migliore dei casi? Si supponga che il server sia a Washington, e che la distanza Pisa - Washington in linea d'aria sia di $7000$ chilometri.
Gli altri livelli
I livelli successivi definiscono le regole pre instaurare una connessione, e per regolare i flussi di traffico (il transport layer, ovvero il livello 4). Andando ancora più in alto, si trovano i protocolli di rete, ovvero le regole che le applicazioni rispettano per capirsi tra di loro. Per maggiori dettagli, si veda la voce Wikipedia sui Livelli OSI.
Velocità di trasmissione
Lo standard che regola la trasmissione di dati attraverso il protocollo Ethernet (quello che abbiamo testato fino ad ora nella rete locale), prevede diverse possibili velocità a cui lavorare.
Le velocità di trasmissione si misurano in bit/s, ovvero nel numero di 0 e 1 che è possibile trasmettere in un intervallo di tempo. Tipicamente, le velocità più diffuse sono 100MBit e 1GBit (ricordate che 1 byte = 8 bit). Sono previste anche modalità a 2.5GBit, 5GBit, e 10GBit. Per velocità superiori, tipicamente si preferisce usare la fibra ottica, perché diventa sempre più difficile mantenere alte velocità (soprattutto su distanze più lunghe) tramite cavi in rame. La lunghezza massima di un cavo Ethernet si aggira sui 100m; questa è la ragione per cui la banda larga nelle case viene distribuita con la fibra ottica, e non con devi cavi Ethernet.
iperf
che permette di
testare la velocità di trasmissione fra due macchine. Si provi a verificare qual è la
velocità di collegamento interna delle macchine. Per fare questo, si lavori
con un collega, ognuno collegato ad una macchina diversa.
- Uno studente deve lanciare il comando
iperf -s
- Il secondo studente si collega alla prima macchina con il comando
iperf -c mathsgaloreN
, ed entrambi vedono la velocità misurata durante il test.
iperf
e ripetere il test della velocità da casa propria al dipartimento
lanciando il comando iperf -s -p 16000
su una macchina mathsgalore, e poi
iperf -c mathsgaloreN.unipi.it -p 16000
. Vedremo più avanti la ragione per
il parametro -p 16000
, per ora prendiamolo per buono.