Breve riassunto sulle reti e i principali termini che si possono incontrare nel forum.
Con le Reti si parla spesso di protocolli ovvero una serie di procedure atte a scambiare informazioni strutturando uno standard.
Ciascun protocollo regola normalmente solo una parte degli aspetti di una comunicazione. I diversi protocolli sono organizzati con un sistema detto “a livelli” : a ciascun livello viene usato unospecifico protocollo.
La divisione in livelli è fatta in modo che ciascun livello utilizzi i servizi offerti dal livello inferiore, e fornisca servizi più “ricchi” al livello superiore. I diversi livelli in un host comunicano tra loro tramite le interfacce. Ogni livello parla solo con quello immediatamente superiore e con quello immediatamente inferiore. I protocolli regolano invece la comunicazione tra due entità dello stesso livello, che serve a fornire servizi al livello superiore.
I vari livelli sono organizzati in pile di protocolli. Le pile di protocolli sono un modo flessibile per combinare componenti per realizzare un servizio.
Il livello più basso (1) è detto “livello fisico” e si occupa di gestire la trasmissione dei segnali attraverso il mezzo di trasporto (cavo, fibra ottica, infrarossi, ecc…). Il livello più elevato è chiamato “livello applicativo” ed è quello che permette all’utente di creare il messaggio da comunicare.
il protocollo tcp/ip oppure udp vengono usati dalle applicazioni, che se in versione server si mettono in ascolto di una porta dedicata , oppure aprono una porta …. I socket fanno parte del sistema operativo, e interagiscono con l’applicazione scambiando i pacchetti che arrivano tramite la scheda di rete.
Il protocollo TCP apre una connessione, in quanto crea un canale di comunicazione per ricevere e inviare i __ segmenti __ da lui creati ad un altro nodo della rete e controlla che i pacchetti non vengano persi. Invece IP e UDP si limitano a lanciare i segmenti nella rete, senza verificare nulla (persi nella rete, integrita’, ricezione, etc), infatti NON APRONO connessioni.
In genere il protocollo TCP dopo aver effettuato la sua __ tree handshake __ riceve istruzioni sull’ampiezza dei segmenti , in quanto l’altro nodo gli ha detto quanto deve essere grande la finestra; per questo motivo l’intero “dato” da inviare puo’ essere spezzettato in piu’ pacchetti (a meno che nello heder non vengano specificate opportune opzioni). Invece UDC e IP visto che sono a direzione univoca, mandano l’intero “dato” senza suddividerlo (in genere).
Internet stabilisce come ordine standard per gli interi a 32 bit, quello che prevede che i byte più significativi siano trasmessi per primi (stile Big Endian). Guardando viaggiare i dati da una macchina all’altra, un intero a 32 bit comincia ad essere trasmesso dal byte più significativo, cioè col byte più significativo più vicino all’inizio del pacchetto. Le librerie socket forniscono per le conversioni delle funzioni che sono: ntohs,ntohl, htons,htonl.
Il routing IP, ovvero l’instradamento di un pacchetto IP verso la destinazione specificata nell’header del pacchetto IP viene effettuato secondo le seguenti modalità:
l’host controlla l’indirizzo IP di destinazione per capire se l’indirizzo IP_D appartiene alla sua stessa sottorete cioè se la destinazione è raggiungibile in modo diretto mediante il MAC address cioe’ sfruttando il solo livello 2, ovvero se per raggiungere la destinazione non è necessario attraversare router (livello 3) ma al massimo si attraversano dei bridge (vedi subnetting).
La destinazione MAC_D a livello 2 vede passare il pacchetto, vede il proprio indirizzo MAC_D e carica il pacchetto passandolo al livello IP ed il gioco è fatto.
Quindi in sostanza si puo’ avere consegna DIRETTA via MAC address o INDIRETTA via IP address.
Puo’ essere in generale utile porsi la domanda: come viene fatto il routing all’interno di una rete??
la socket e’ il programma che fa da tramite tra il protocollo e la scheda di rete/porta. La socket fa parte del sistema operativo e ascolta su una singola porta.
Il sistema operativo puo’:
a seconda del tipo di rete cambia il modo in cui vengono inviati i dati. Ad esempio la rete ethernet manda i dati in BROADCAST, ovvero lancia i dati a tutti i nodi della rete come fa una ricetrasmittente: fissata la banda (la rete, ad esempio locale), tutti possono sia trasmettere che ricevere. I dati in questo caso condividono lo stesso dominio, e possono essere persi (ad esempio se due nodi lanciano messaggi contemporaneamente questi crashano tra di loro). La rete ethernet e’ veloce ma non svolge alcun controllo, pertanto i dati possono essere persi, corrotti o addirittura possono essere ricevuti senza rispettare l’ordine cronologico. Ricordo che eventualmente sono i protocolli a pensare a cosa fare (ad esempio TCP controlla che siano stati ricevuti e ricostruisce l’ordine cronologico).
In genere le reti ethernet hanno una banda massima di dati trasmissibili, intorno ai 1550 bit/s, ma puo’ cambiare a seconda dei nodi attraverso i quali la rete passa. Tipicamente il router calcola l’ MTU che indica la massima quantita’ di dati trasmissibile tra due nodi (se uno ne puo’ scambiare 500 e l’altro 700, ovviamente si passeranno i pacchetti del formato piu piccolo, vale a dire 500).
Se il protocollo (ad esempio IP), ha SEGMENTI(termine associato ai dati del protocollo) piu grandi dell’ MTU, allora il router IPV4 puo’ frammentare il segmento (i frammenti vengono detti frame), mentre il router IPV6 non puo’ eseguire frammentazione: pertanto in IPV6 e’ il protocollo a provvedere a suddividere i dati. Ricapitolando quest’ultimo (rivango la terminolgia):
Un computer con scheda di rete Ethernet può inviare i pacchetti di dati solo quando nessun altro pacchetto sta viaggiando sulla rete, ovverosia quando la rete è “tranquilla��?. In caso contrario, aspetta a trasmettere come quando, durante una conversazione, una persona deve attendere che l’altra smetta prima di parlare a sua volta.
Se più computer percepiscono contemporaneamente un momento “tranquillo��? e iniziano ad inviare i dati nello stesso momento, si verifica una “collisione��? dei dati sulla rete, che non implica errori ma la necessità di altri tentativi. Ogni computer, infatti, attende per un certo periodo e prova a inviare nuovamente il pacchetto di dati.
I calcolatori hanno un MAC address, che serve ad identificarli, e puo’ essere utilizzato anche per capire se puo’ supportare il MULTICAST .
Gli indirizzi IP oltre a identificare il nodo, aiutano anche a capire il livello del nodo, e ve ne sono di privilegiati: ad esempio vi e’ un nodo di podcast, il cui scopo e’ indirizzare il pacchetto a TUTTI i nodi della sua rete (vi e’ un analogo per il multicast, relativamente a un gruppo), oppure un IP speciale e’ quello riservato al router.
La soluzione standard per collegarsi ad altre reti o a Internet, o per permettere agli utenti remoti di collegarsi alla propria rete centralizzata, è la normale linea telefonica analogica. Basta quindi collegare un modem al computer e alla presa del telefono per collegarsi ad un Internet Service Provider o ad una filiale.
Un modem può supportare solo una “conversazione��? remota alla volta e ogni computer che vuole collegarsi con l’esterno deve disporre di un proprio modem. 10 computer richiedono perciò 10 modem, ma in questo caso vi è una soluzione più efficiente per una connessione WAN: il router.
Il router utilizza linee ISDN (digitali) e collega tutti i computer della rete locale: basta un router e 10 (o più) computer possono navigare sul web o collegarsi ad una filiale. Inoltre il router offre maggior protezione da accessi indesiderati, è più rapido nell’effettuare la connessione e nello staccare la linea telefonica quando l’attività di rete cessa.
il router riceve i pacchetti e li rimanda alla rete (locale o esterna, come internet) in broadcast (vedere meglio se li rimanda in broadcast o puo’ addirittura indirizzare a un nodo specifico). I router (a stella) connettono piu’ nodi, e con maggiori sono i nodi con maggiore e’ la probabilita’ di perdere dati, perche’ aumenta lo spazio del dominio condiviso (ci possono ad esempio essere piu scontri tra pacchetti provvenienti da piu nodi). Credo che in generale il router riesca a instradare a un nodo della rete locale, mentre credo che per i pacchetti internet si limiti da mandare il pacchetto nel web in broadcast, o a uno switcher
versione evoluta del router: puo’ essere composto da piu moduli, ciascuno con una propria scheda di rete. Se il nodo A del modulo 1 manda un pacchetto per il nodo B:
se B sta nel modulo 1, si limita a mandare il pacchetto in broadcast a tutti i nodi del modulo 1
se B sta in un modulo n (!=1):
da quest’ultimo punto si capisce che lo Switch ottimizza in quanto nella sua rete velocizza l’instradamento in quanto ciascun modulo puo’ memorizzare le posizioni dei nodi in una propria tabella.
Inoltre lo switch e’ dotato di un buffer, in cui memorizza temporaneamente i pacchetti, per poi lavorarci secondo quanto indicato sopra; proprio per via di questo buffer, e il fatto che le ethernet sono singole, lo switcher evita il problema della __ condivisione del dominio __ riducendo cosi’ l’instabilita’ della trasmissione dei dati.
e’ un collegamento fisico tra dei nodi: si limita ricevere pacchetti e a mandarli in broadcast agli altri nodi facenti parte della sua stella. Se alimentato a corrente oltre alla funzione di broadcast riamplia il segnare, evitando cosi’ il suo degrado (tipo un range extender).
e’ un collegamento fisico tra componenti del sistema per passare messaggi di varia natura, quali ad esempio:
e’ una memoria tampone in cui vengono salvati temporaneamente i dati per essere utilizzati appena la risorsa si libera; tipicamente e’ uno stack di tipo FIFO. Esempi:
il buffer di tastiera: se digito velocemente la tastiera salva i dati in un buffer, e il buffer viene man mano letto dal sistema. Ecco perche’ se scrivo mentre il sistema e’ incantato, dopo qualche secondo riappaiono tutti i caratteri (digito, i caratteri stanno nel buffer, il sistema operativo e’ bloccato pertanto il buffer continua a riempirsi, poi il sistema si libera e svuota il buffer della tastiera prendendo tutti i suoi dati)
buffer di CPU: quanto appena visto per la tastiera, oppure se devo mandare dati a una stampante. Infatti la stampante e’ lenta, pertanto la CPU salva i dati da stampare nel suo buffer, cosi’ la CPU ora si libera per continuare altri processi e la stampante puo’ reperire con calma i dati nel buffer
Qundi in generale il buffer, sia fisico che software, puo’ essere utile per far comunicare processi che hanno tempistiche tra loro differenti.
zona di memoria ad accesso rapido. In sostanza la cache e’ un buffer della RAM, e la ram e’ un buffer del DISCO FISSO.
Memoria tipicamente alimentata a corrente, che si resetta ogni volta che l’alimentazione cessa. Sono esempi la Ram e le memorie Flash. Il pc ad ogni riaccensione deve ricreare tutti i suoi processi e i dati sulla ram. Se invece la ram non fosse volatile, allora tutto potrebbe essere congelato in essa e di conseguenza il pc sarebbe subito pronto per essere utilizzato eliminando i tempi di caricamento e i costi derivanti dalla sua alimentazione.
Non volatile invece vuol dire che la memoria non si perde: ad esempio il disco fisso e le memorie USB, che non si cancellano ma pagano eccedendo in lentezza rispetto alle memorie volatili.
In una rete di calcolatori, e’ presente un gateway (ovvero un indirizzo IP) a cui si passa il pacchetto da inoltrare a un altro indirizzo IP. In sostanza il gateway nella rete locale e’ il router, pertanto per spedire un pacchetto all’ IP-7 (supponiamo che io abbia IP-3), in realta’ mando il pacchetto al gateway, e lui lo smista o alla rete locale mandandolo all’IP-7, oppure al resto del mondo, ovvero internet. La distinzione tra locale e internet ovviamente fa entrare in gioco discorsi sulla sicurezza, firewall ed eventualmente su come il pacchetto possa avere degli header modificati, ma questo non importa.
Tornando alla subnet: e’ un formato simile a un ip (4 sequenze da 8 bit) e il router la usa per determinare se due calcolatori appartengono alla stessa rete (o sottorete, detto Network Address) semplicemente facendo un AND logico (bit a bit) tra IP e Subnet mask, in modo da trovare un indiritto ip a cui appartiene la sottorete.
Riassumento: le sottoreti possono comunicare senza bisogno di instradarsi su un router!! vedi http://www.dis.uniroma1.it/~ficarola/notazione-cidr/ e convenzione di descrizione CIDR.
In sostanza se
````
IP-7 & SubnetMask == IP-3 & SubnetMask
```` allora vuol dire che i due ip appartengono alla stessa sottorete, pertanto il router lo inoltra direttamente al calcolatore. Inoltre l'indirizzo che otteniamo secondo questo AND logico e' proprio l'indirizzo della rete a cui apparteniamo.
Utile strumento per identificare tutto quello che puo’ interessare una rete e la subnet mask:
http://www.subnet-calculator.com/
Agli indirizzi MAC fanno riferimento i protocolli di livello 2 (data link) -> reti locali, broadcast • Perchè tradurre indirizzi IP in indirizzi MAC e viceversa? – Un host A deve mandare un pacchetto ad un host B, conoscendo solo l’indirizzo IP; c’è il problema di determinare l’indirizzo fisico-MAC su cui lavora lo strato Ethernet – Il protocollo RARP serve anche agli host per calcolare, in caso di guasti di alcune parti del sistema, il proprio indirizzo IP a partire da quello fisico-MAC
per stdin
, stdout
e stderr
apro due terminali ed in entrambi digito tty
, e vedro’ una risposta del tipo /dev/pts/1
e /dev/pts/2
. allora in pts1
digito echo "Ciao" 1>/dev/pts/2"
e magicamente in pts2
vedro’ apparire la scritta “ciao”.
Spiegazione: con 1>
reindirizzo lo stdout
di pts1
dovunque voglio… in questo caso con /dev/pts/2
reindirizzo al file descriptor che e’ associato a pts2
. Infatti il terminale continua a leggere/scrivere sul file descriptor da lui creato alla sua apertura, e che funge da un buffer statico.
Utili strumenti online per capire la rappresentazione, anche in virgola mobile:
netstat
netstat -a -b
tracert
netsh trace start capture=yes
ottimo esempio java in
http://michieldemey.be/blog/network-discovery-using-udp-broadcast/
ottimo esempio su http://www.linuxfocus.org/Italiano/March2000/article147.html.
Ad esempio Browsersync
usa proprio dei proxy server!