Introduzione
La comprensione delle reti è importante per chiunque gestisca un server. Non solo è essenziale per mettere online e far funzionare correttamente i tuoi servizi, ma ti fornisce anche l’opportunità di diagnosticare i problemi.
Questo articolo fornirà una panoramica di alcuni concetti di rete comuni. Discuteremo di terminologia, protocolli comuni e delle responsabilità e caratteristiche dei diversi livelli di networking.
Questa guida è agnostica al sistema operativo, ma dovrebbe essere molto utile durante l’implementazione di funzionalità e servizi che utilizzano la rete sul tuo server.
Glossario di rete
Inizieremo definendo alcuni termini comuni che troverai in questa guida e in altre guide e documentazione relative alla rete.
Questi termini saranno approfonditi nelle sezioni appropriate che seguiranno:
-
Connessione: In networking, una connessione si riferisce a pezzi di informazioni correlate che vengono trasferite attraverso una rete. In generale, una connessione viene stabilita prima del trasferimento dei dati (seguendo le procedure indicate in un protocollo) e può essere smantellata alla fine del trasferimento dei dati.
-
Pacchetto: Un pacchetto è l’unità più piccola che viene intenzionalmente trasferita su una rete. Quando si comunica su una rete, i pacchetti sono le buste che trasportano i tuoi dati (in pezzi) da un punto di origine all’altro.
I pacchetti hanno una parte di intestazione che contiene informazioni sul pacchetto, inclusi la sorgente e la destinazione, i timestamp, i salti di rete, ecc. La parte principale di un pacchetto contiene i dati effettivi che vengono trasferiti. Talvolta viene chiamata corpo o payload.
- Interfaccia di rete: Un’interfaccia di rete può riferirsi a qualsiasi tipo di interfaccia software per l’hardware di rete. Ad esempio, se hai due schede di rete nel tuo computer, puoi controllare e configurare singolarmente ciascuna interfaccia di rete associata a esse.
A network interface may be associated with a physical device, or it may be a representation of a virtual interface. The “loopback” device, which is a virtual interface available in most Linux environments to connect back to the same machine, is an example of this.
-
LAN: LAN è l’acronimo di “local area network”. Si riferisce a una rete o a una parte di una rete che non è accessibile pubblicamente tramite Internet. Una rete domestica o aziendale è un esempio di LAN.
-
WAN: WAN significa “rete di area vasta”. Si tratta di una rete molto più estesa rispetto a una LAN. Sebbene WAN sia il termine corretto per descrivere in generale reti grandi e disperse, di solito si intende l’internet nel suo complesso.
Se si dice che un’interfaccia è connessa alla WAN, generalmente si presume che sia raggiungibile tramite internet.
- Protocollo: Un protocollo è un insieme di regole e standard che definiscono un linguaggio che i dispositivi possono utilizzare per comunicare. Esistono numerosi protocolli ampiamente utilizzati nelle reti e spesso sono implementati su differenti livelli.
Alcuni protocolli di basso livello sono TCP, UDP, IP e ICMP. Alcuni esempi familiari di protocolli di livello applicativo, costruiti su questi protocolli inferiori, sono HTTP (per accedere ai contenuti web), SSH e TLS/SSL.
-
Porta: Una porta è un indirizzo su una singola macchina che può essere associato a un software specifico. Non è un’interfaccia o posizione fisica, ma consente al tuo server di comunicare utilizzando più di un’applicazione.
-
Firewall: Un firewall è un programma che decide se il traffico in entrata o in uscita da un server dovrebbe essere permesso. Di solito, un firewall funziona creando regole per stabilire quale tipo di traffico è accettabile su quali porte. In generale, i firewall bloccano le porte che non sono utilizzate da un’applicazione specifica su un server.
-
NAT: NAT sta per network address translation. È un modo per ripacchettizzare e inviare le richieste in arrivo a un server di routing verso i dispositivi o i server pertinenti su una LAN. Questo viene solitamente implementato nelle LAN fisiche come modo per instradare le richieste attraverso un indirizzo IP verso i server backend necessari.
-
VPN: VPN sta per rete privata virtuale. È un mezzo per collegare LAN separate attraverso Internet, mantenendo al contempo la privacy. Questo viene utilizzato per collegare sistemi remoti come se fossero su una rete locale, spesso per motivi di sicurezza.
Ci sono molti altri termini con cui ti imbatterai, e questa lista non è esaustiva. Spiegheremo altri termini man mano che ne avremo bisogno. A questo punto, dovresti comprendere alcuni concetti di alto livello che ci consentiranno di discutere meglio gli argomenti a venire.
Strati di rete
Sebbene le reti vengano spesso discusse in termini di topologia in modo orizzontale, tra gli host, la loro implementazione è stratificata in modo verticale all’interno di un determinato computer o rete.
Ciò significa che ci sono molte tecnologie e protocolli costruiti uno sopra l’altro affinché la comunicazione funzioni. Ogni strato successivo, più alto, astrae un po’ di più i dati grezzi.
Ciò consente anche di sfruttare i livelli inferiori in nuovi modi senza dover investire il tempo e l’energia per sviluppare i protocolli e le applicazioni che gestiscono quei tipi di traffico.
Il linguaggio che utilizziamo per parlare di ciascuno degli schemi di stratificazione varia significativamente a seconda del modello utilizzato. Indipendentemente dal modello utilizzato per discutere degli strati, il percorso dei dati è lo stesso.
Quando i dati vengono inviati da una macchina, iniziano nella parte superiore dello stack e filtrano verso il basso. Al livello più basso, avviene effettivamente la trasmissione verso un’altra macchina. A questo punto, i dati risalgono attraverso gli strati dell’altro computer.
Modello TCP/IP
Il modello TCP/IP, più comunemente noto come suite di protocolli Internet, è un modello di stratificazione ampiamente adottato. Definisce i quattro strati separati:
-
Applicazione: In questo modello, lo strato di applicazione è responsabile della creazione e trasmissione di dati utente tra le applicazioni. Le applicazioni possono trovarsi su sistemi remoti e dovrebbero sembrare funzionare come se fossero locali per l’utente finale. Questa comunicazione avviene tra peer.
-
Trasporto: Lo strato di trasporto è responsabile della comunicazione tra processi. Questo livello di networking utilizza le porte per indirizzare diversi servizi.
-
Internet: Lo strato internet viene utilizzato per trasportare dati da nodo a nodo in una rete. Questo strato è consapevole dei punti finali delle connessioni, ma non è interessato alla connessione effettiva necessaria per spostarsi da un luogo all’altro. Gli indirizzi IP sono definiti in questo strato come un modo per raggiungere sistemi remoti in modo indirizzabile.
-
Collegamento: Lo strato di collegamento implementa la topologia effettiva della rete locale che consente allo strato internet di presentare un’interfaccia indirizzabile. Stabilisce connessioni tra nodi vicini per inviare dati.
Come puoi vedere, il modello TCP/IP è astratto e fluido. Questo lo ha reso popolare da implementare e gli ha permesso di diventare il modo dominante in cui i livelli di rete sono categorizzati.
Interfacce
Le interfacce sono punti di comunicazione di rete per il tuo computer. Ogni interfaccia è associata a un dispositivo di rete fisico o virtuale.
Tipicamente, il tuo server avrà un’interfaccia di rete configurabile per ogni scheda internet Ethernet o wireless che possiedi.
Inoltre, definirà un’interfaccia di rete virtuale chiamata interfaccia “loopback” o localhost. Questa viene utilizzata come interfaccia per connettere applicazioni e processi su un singolo computer ad altre applicazioni e processi. Puoi vedere questo riferimento come l’interfaccia “lo” in molti strumenti.
Molte volte, gli amministratori configurano un’interfaccia per gestire il traffico verso internet e un’altra interfaccia per una LAN o una rete privata.
Nei datacenter con rete privata abilitata (inclusi i Droplet di DigitalOcean), il tuo VPS avrà due interfacce di rete. L’interfaccia “eth0” sarà configurata per gestire il traffico proveniente da internet, mentre l’interfaccia “eth1” funzionerà per comunicare con una rete privata.
Protocolli
Il networking funziona agganciando diversi protocolli uno sopra l’altro. In questo modo, un dato può essere trasmesso utilizzando più protocolli incapsulati l’uno dentro l’altro.
Cominceremo con i protocolli implementati sui livelli di networking inferiori e procederemo verso protocolli con un’astrazione più elevata.
Controllo di accesso al mezzo
Il controllo di accesso al mezzo è un protocollo di comunicazione utilizzato per distinguere dispositivi specifici. Ogni dispositivo dovrebbe ottenere un indirizzo di controllo dell’accesso ai mezzi (indirizzo MAC) univoco, fissato a livello hardware, quando viene prodotto, che lo differenzia da ogni altro dispositivo su Internet.
Indirizzare l’hardware tramite l’indirizzo MAC consente di fare riferimento a un dispositivo con un valore unico anche quando il software in cima può cambiare il nome per quel dispositivo specifico durante il funzionamento.
L’indirizzamento MAC è uno dei pochi protocolli del livello di collegamento a basso livello con cui probabilmente interagirai regolarmente.
IP
Il protocollo IP è uno dei protocolli fondamentali che permette il funzionamento di internet. Gli indirizzi IP sono unici in ogni rete e permettono alle macchine di comunicare tra loro all’interno di una rete. È implementato nel livello internet del modello TCP/IP.
Le reti possono essere collegate tra loro, ma il traffico deve essere instradato quando attraversa i confini delle reti. Questo protocollo assume una rete non affidabile e la presenza di percorsi multipli verso la stessa destinazione che possono essere cambiati dinamicamente.
Esistono diverse implementazioni del protocollo. L’implementazione più comune oggi è quella degli indirizzi IPv4, che seguono il formato 123.123.123.123
, anche se gli indirizzi IPv6, che seguono il formato 2001:0db8:0000:0000:0000:ff00:0042:8329
, stanno diventando sempre più popolari a causa della limitata disponibilità di indirizzi IPv4.
ICMP
ICMP sta per internet control message protocol. Viene utilizzato per inviare messaggi tra dispositivi per indicare la loro disponibilità o condizioni di errore. Questi pacchetti sono utilizzati in una varietà di strumenti di diagnostica di rete, come ping
e traceroute
.
Di solito i pacchetti ICMP vengono trasmessi quando un altro tipo di pacchetto incontra un problema. Vengono utilizzati come meccanismo di feedback per le comunicazioni di rete.
TCP
TCP sta per protocollo di controllo della trasmissione. È implementato nello strato di trasporto del modello TCP/IP e viene utilizzato per stabilire connessioni affidabili.
TCP è uno dei protocolli che incapsula i dati in pacchetti. Li trasferisce poi all’estremità remota della connessione utilizzando i metodi disponibili negli strati inferiori. Dall’altra parte, può verificare gli errori, richiedere il ritrasferimento di determinati pezzi e riassemblare le informazioni in un unico pezzo logico da inviare allo strato dell’applicazione.
Il protocollo costruisce una connessione prima del trasferimento dei dati utilizzando un sistema chiamato three-way handshake. Questo è un modo per le due estremità della comunicazione di riconoscere la richiesta e concordare un metodo per garantire l’affidabilità dei dati.
Dopo che i dati sono stati inviati, la connessione viene interrotta utilizzando un simile four-way handshake.
TCP è il protocollo di scelta per molte delle più popolari applicazioni su Internet, inclusi WWW, SSH ed email.
UDP
UDP sta per protocollo di datagrammi utente. È un protocollo compagno popolare di TCP ed è implementato anch’esso nello strato di trasporto.
La differenza fondamentale tra UDP e TCP è che UDP offre un trasferimento di dati non affidabile. Non verifica che i dati siano stati ricevuti all’altra estremità della connessione. Questo potrebbe sembrare un aspetto negativo e, per molti scopi, lo è. Tuttavia, è anche estremamente importante per alcune funzioni.
Perché non è necessario attendere la conferma che i dati siano stati ricevuti e si è costretti a rinviare i dati, UDP è molto più veloce di TCP. Non stabilisce una connessione con l’host remoto, semplicemente invia dati senza conferma.
Poiché si tratta di una transazione diretta, è utile per comunicazioni come la richiesta di risorse di rete. Inoltre, non mantiene uno stato, il che lo rende ottimo per la trasmissione di dati da una macchina a molti client in tempo reale. Questo lo rende ideale per VOIP, giochi e altre applicazioni che non possono permettersi ritardi.
HTTP
HTTP sta per protocollo di trasferimento di ipertesto. È un protocollo definito nello strato dell’applicazione che costituisce la base per la comunicazione sul web.
HTTP definisce diversi verbi che indicano al sistema remoto cosa stai richiedendo. Ad esempio, GET, POST e DELETE interagiscono con i dati richiesti in modi diversi. Per vedere un esempio delle diverse richieste HTTP in azione, consulta Come definire percorsi e metodi di richiesta HTTP in Express.
DNS
Il DNS sta per sistema di nomi di dominio. Si tratta di un protocollo di livello applicativo utilizzato per fornire un meccanismo di denominazione amichevole per le risorse Internet. È ciò che collega un nome di dominio a un indirizzo IP e consente di accedere ai siti per nome nel tuo browser.
SSH
SSH sta per shell sicura. È un protocollo crittografato implementato a livello applicativo che può essere utilizzato per comunicare con un server remoto in modo sicuro. Molte tecnologie aggiuntive sono costruite attorno a questo protocollo a causa della sua crittografia end-to-end e ubiquità.
Esistono molti altri protocolli che non abbiamo coperto ma sono altrettanto importanti. Tuttavia, questo dovrebbe darti una buona panoramica di alcune delle tecnologie fondamentali che rendono possibile Internet e le reti.
Conclusione
A questo punto, dovresti essere familiare con alcuni termini di rete e capire come diversi componenti possano comunicare tra loro. Questo dovrebbe aiutarti a comprendere altri articoli e la documentazione del tuo sistema.
Inoltre, per un esempio di alto livello nel mondo reale, potresti voler leggere Come effettuare richieste HTTP in Go.