È evidente che Internet è un sistema estremamente complicato. Ci sono molti pezzi in Internet: numerose applicazioni e protocolli, vari tipi di sistemi terminali, commutatori, e vari tipi di supporti a livello di collegamento.
Si consideri una analogia. Come si dovrebbe trovare la struttura per descrivere una compagnia aerea che ha biglietteria, controllo bagagli, personale di terra, piloti, aerei, controllo del traffico aereo, e di un sistema mondiale di rotte per gli aerei? Un modo per descrivere questo sistema potrebbe essere quello di descrivere la serie di azioni che si prendono quando si vola su una compagnia aerea. Si acquista il biglietto, si fanno controllare i bagagli, ci si reca al cancello, e alla fine si viene trasferiti a bordo dell'aereo. L'aereo decolla e viene instradato verso la sua destinazione. Dopo l'atterraggio, si viene condotti al cancello di uscita e si ritirano i bagagli.
Alcune analogie con le reti di computer sono: si è in procinto di essere trasferiti dalla sorgente alla destinazione dalla compagnia aerea; un pacchetto viene spedito da un host sorgente ad un host destinazione in Internet. Ma questa non è proprio l'analogia che si cerca. Osservando la figura si nota che c'è una funzione di biglietteria a ciascuna estremità; c'é anche una funzione bagagli per i passeggeri giá muniti di biglietto, e una funzione di gate per i passeggeri già muniti di biglietto e bagaglio controllato. Per i passeggeri che hanno superato il cancello (cioè i passeggeri giè controllati e che hanno attraversato il cancello), c'é una funzione decollo e atterraggio, e durante il volo, c'è una funzione di instradamento aereo. Ciò suggerisce di osservare le funzionalità in figura in modo orizzontale.
La figura ha diviso la funzionalità compagnia aerea in livelli, fornendo un quadro in cui si possono discutere i viaggi aerei. Si noti che ogni strato, in combinazione con gli strati sottostanti, implementa alcune funzionalità, qualche servizio. A livello di biglietteria e sotto, la compagnia offre il servizio trasferimento di una persona. A livello di bagagli e sotto, si realizza il servizio controllo/ritiro del bagaglio di una persona. Si noti che il livello di bagaglio fornisce questo servizio solo per una persona con biglietto. Allo strato di gate, si realizza il servizio partenza/arrivo di una persona e dei bagagli. A livello di decollo/atterraggio, si realizza il trasferimento delle persone e dei bagagli. Ogni strato fornisce il servizio mediante l'esecuzione di determinate azioni all'interno del livello (per esempio, a livello di gate, le persone si trasferiscono a bordo o le persone si trasferiscono da un aereo al cancello di uscita) e utilizzando i servizi del livello immediatamente sottostante (ad esempio, nello strato di gate, usando il bus che attraverso la pista trasferisce i passeggeri dello strato di decollo/atterraggio).
Un'architettura a livelli permette di esaminare una ben definita parte di un sistema grande e complesso. Questa semplificazione fornisce modularità al sistema, rendendo molto più facile cambiare la realizzazione del servizio fornito da uno strato. Finchè il livello fornisce lo stesso servizio al livello sopra di esso, e utilizza gli stessi servizi dal livello sottostante, il resto del sistema rimane invariato quando viene modificato il modo di realizzare il servizio. (Si noti che la modifica del servizio è diversa dal modo, hardware o software, con cui si realizza). Ad esempio, se sono state cambiate le funzioni di gate (per esempio, distribuire le persone a bordo in base al loro peso), il resto del sistema linea aerea rimarrebbe invariato poichè lo strato di gate fornisce ancora la stessa funzione (carico e scarico persone); funziona in modo diverso dopo il cambiamento. Per sistemi grandi e complessi che vengono continuamente aggiornati, la possibilità di modificare l'implementazione di un servizio senza influenzare altri componenti del sistema è un altro importante vantaggio della stratificazione.
Si rivolga ora l'attenzione ai protocolli di rete. Per fornire la struttura per la progettazione di protocolli di rete, i progettisti della rete organizza a strati l'hardware di rete e il software che implementano i protocolli. Ogni protocollo appartiene ad uno degli strati, così come ogni funzione nell'architettura aerea in figura apparteneva ad uno strato. Si è anche interessati ai servizi che uno strato offre allo strato superiore nel cosiddetto modello di servizio di un livello. Come nel caso dell'esempio compagnia aerea, ogni strato fornisce il servizio eseguendo determinate azioni proprie dello strato e utilizzando i servizi del livello immediatamente sottostante. Per esempio, i servizi del livello n possono comprendere consegna affidabile dei messaggi da un sistema della rete ad un altro.
Questo potrebbe essere implementato utilizzando un servizio inaffidabile di recapito dei messaggi da un estremo all'altro di livello n-1, e aggiungendo la funzionalità allo strato n di rilevare e ritrasmettere i messaggi persi.
Uno strato di protocollo può essere implementato in software, hardware, o in una combinazione dei due. Protocolli, come a livello di applicazione HTTP e SMTP, sono quasi sempre implementati con software nei sistemi terminali. Poichè il livello fisico e il livello data link sono responsabili della gestione della comunicazione su un collegamento specifico, sono tipicamente implementati in una scheda di interfaccia di rete (ad esempio Ethernet o schede di interfaccia WiFi) associate a un determinato canale. Lo strato di rete è spesso una implementazione mista di hardware e software. Si noti inoltre che, così come le funzioni dell'architettura a strati del sistema compagnia aerea sono stati distribuiti tra i vari aeroporti e centri di controllo di volo che compongono il sistema, così anche un protocollo di livello n è ripartito tra i sistemi terminali, commutatori e altri componenti della rete. Cioè c'è spesso un pezzo di un protocollo di livello n in ciascuno di questi componenti di rete.
La stratificazione fornisce un modo strutturato per discutere le componenti del sistema. La modularità rende più facile modificare i componenti del sistema. Un potenziale svantaggio della stratificazione è che uno strato può duplicare la funzionalità del livello inferiore. Per esempio, molte pile di protocolli prevedono il controllo degli errori sia a livello di collegamento sia a livello end-to-end. Un secondo potenziale inconveniente è che la funzionalità in uno strato potrebbe aver bisogno di informazioni (per esempio, un valore timestamp) che è presente solo in un altro strato; questo viola l'obiettivo di separazione degli strati.
Presi insieme, i protocolli dei vari strati sono chiamati stack di protocolli. Lo stack di protocolli Internet è composto da cinque strati: fisico, collegamento, rete, trasporto e applicazione, come mostrato nella figura.
L'utente usa un'applicazione sul suo sistema locale per chiedere un servizio ad un sistema remoto. I sistemi si chiamano anche HOST perchè ospitano applicazioni. Il sistema dell'utente è considerato Cliente del servizio e il sistema remoto è considerato Fornitore del servizio.
L'host sorgente invia un pacchetto di tipo REQUEST contenente il servizio richiesto, L'host destinazione riceve il pacchetto e prepara un pacchetto di tipo RESPONSE contenente il risultato del servizio.
I due sistemi ritengono di colloquiare direttamente tra loro usando una Connessione, ignorano che tra i sistemi e i cavi che trasportano i segnali, i messaggi vengono elaborati da 7 processi.
Ogni processo (residente su un livello) riceve dal processo di livello superiore un pacchetto da consegnare a un sistema destinatario e aggiunge delle informazioni di controllo destinate al livello corrispondente sull'altro sistema. A un certo punto il messaggio, sotto forma di segnali, giunge sui cavi.
Sul sistema destinatario, ciascun livello che riceve il pacchetto elabora le informazioni aggiunte e passa il pacchetto al livello superiore
I processi residenti su uno stesso livello sui due sistemi si scambiano informazioni di servizio al fine di consegnare il Pacchetto. Le informazioni di servizio aggiunte al pacchetto dal sistema sorgente e utilizzate dal sistema destinazione sono dette Protocollo.
Ogni livello usa un protocollo.
Due processi di pari livello sui sistemi in comunicazione tra loro dialogano tramite un protocollo e usano la connessione che i livelli sottostanti hanno costruito
Il livello 7 è in diretto contatto con l'utente ed è denominato livello Applicazione. A questo livello risiedono i processi tramite i quali l'utente chiede un servizio alla rete.
I livelli 6 (Presentazione) e 5 (Sessione), nella pratica, non sono implementati. Il loro scopo è di fornire una conversione della codifica dei messaggi (da ASCII ad altro codice oppure una compressione dei dati ecc.)
Il livello 4 (Trasporto) si occupa di definire la qualità del servizio.
Il livello 3 (Rete o Network) assume che i due sistemi non siano collegati direttamente, ma tra essi siano frapposti dei sistemi intermedi che provvedono all'Instradamento dei messaggi.
Il livello 2 (Collegamento o Data Link) si occupa di controllare il flusso dei dati e, prima di consegnare il pacchetto alla rete, dove può essere alterato dal rumore, aggiunge dei controlli per consentire al ricevitore di verificare l'integrità dei dati.
Il livello 1 (Fisico) ha lo scopo di rendere la comunicazione indipendente dal mezzo, cioè trasforma i bit ricevuti in segnali da depositare sul mezzo.
Nel livello di applicazione risiedono le applicazioni di rete e i relativi protocolli. Lo strato applicazione di Internet comprende molti protocolli, come il protocollo HTTP (che prevede la richiesta e il trasferimento di un documento Web), SMTP (che prevede il trasferimento di messaggi di posta elettronica) e FTP (che prevede il trasferimento di file tra due sistemi terminali). Alcune funzioni di rete, come ad esempio l'associazione di nomi a indirizzi per i sistemi di Internet, come www.ietf.org all'indirizzo di rete a 32-bit, viene fatta con l'aiuto di uno specifico protocollo di livello applicazione, vale a dire, il sistema dei nomi di dominio (DNS).
Un protocollo di livello applicazione è distribuito su molti sistemi terminali: l'applicazione in un sistema terminale utilizza il protocollo di scambio di pacchetti con l'applicazione in un altro sistema terminale. Questo pacchetto di informazioni a livello di applicazione viene indicato con il termine "messaggio".
Il livello di trasporto di Internet consegna i messaggi generati dal livello applicazione a un'altra applicazione. In Internet ci sono due protocolli di trasporto, TCP e UDP, ciascuno dei quali può trasportare messaggi del livello di applicazione. TCP fornisce un servizio orientato alla connessione alle sue applicazioni. Questo servizio prevede la consegna garantita di messaggi al livello di applicazione della destinazione e il controllo del flusso (cioè regola la velocità del mittente e del destinatario). TCP scompone i messaggi lunghi in segmenti più corti e fornisce un meccanismo di controllo della congestione, in modo che una sorgente riduca il suo tasso di trasmissione quando la rete è congestionata. Il protocollo UDP fornisce un servizio senza connessione alle sue applicazioni. Questo è un servizio semplice che non fornisce affidabilità, nessun controllo di flusso, e nessun controllo di congestione. Si farà riferimento a un pacchetto del livello di trasporto come un "segmento".
Il livello di rete di Internet è responsabile per la consegna dei pacchetti a livello di rete, noti come datagrammi, da un host all'altro. Il protocollo di trasporto a livello di Internet (TCP o UDP) in un host di origine passa un segmento del livello di trasporto e un indirizzo di destinazione al livello di rete, proprio come si farebbe con il servizio postale segnando su una lettera un indirizzo di destinazione. Il livello di rete fornisce poi il servizio di consegna del segmento al livello di trasporto nell'host di destinazione.
Il livello di rete di Internet comprende il protocollo IP, che definisce i campi del datagramma e descrive come i sistemi terminali e i router usano questi campi. C'è solo un protocollo IP, e tutti i componenti di Internet che hanno un livello di rete devono eseguire il protocollo IP. Il livello di rete di Internet contiene anche protocolli di routing che determinano i percorsi che prendono i datagrammi tra origini e destinazioni. Internet ha molti protocolli di routing. Internet è una rete di reti, e all'interno di una rete, l'amministratore può eseguire qualsiasi protocollo di routing desiderato. Sebbene il livello di rete contiene sia il protocollo IP sia numerosi protocolli di routing, è indicato semplicemente come livello IP, per riflettere il fatto che IP è il collante che tiene insieme Internet.
Il livello Rete di Internet determina il percorso di un datagramma attraverso una serie di router tra la sorgente e la destinazione. Per spostare un pacchetto da un nodo (host o router) al nodo successivo nel percorso, lo strato di rete si basa sui servizi del livello di collegamento. In particolare, ad ogni nodo, il livello di rete passa il datagramma al livello di collegamento, che passa il datagramma al nodo successivo lungo il percorso. A questo nodo successivo, il livello di collegamento passa il datagramma al livello di rete. I servizi forniti dal livello di collegamento dipendono dal protocollo del livello di collegamento specifico che viene impiegato sul collegamento. Ad esempio, alcuni protocolli del livello data-link offrono la consegna affidabile, dal nodo trasmettitore, attraverso il canale, al nodo ricevitore.
Si noti che questo servizio di consegna affidabile è differente dal servizio di consegna affidabile di TCP, che prevede la consegna affidabile dal sistema di origine al sistema di destinazione. Esempi di protocolli del livello data-link includono Ethernet, WiFi, e il protocollo DOCSIS della rete di accesso via cavo.
I datagrammi in genere devono attraversare diversi canali per viaggiare dalla sorgente alla destinazione, quindi un datagramma può essere gestito da diversi protocolli del livello di collegamento incontrati lungo il suo percorso. Ad esempio, un datagramma può essere gestito da Ethernet su un collegamento e da PPP sul canale seguente. Il livello di rete riceve un servizio diverso da ciascuno dei diversi protocolli di livello di collegamento. Si farà riferimento ai pacchetti del livello data-link come "frame".
Mentre il compito del livello di collegamento è quello di spostare interi frame da un elemento di rete a un elemento di rete adiacente, il compito del livello fisico è spostare i singoli bit del frame da un nodo all'altro. Anche i protocolli di questo livello dipendono dal collegamento dal mezzo di trasmissione utilizzato per realizzare il collegamento (ad esempio, filo di rame twisted-pair, fibra ottica monomodale). Ad esempio, Ethernet ha molti protocolli di livello fisico: uno per il filo di rame twisted-pair, un altro per il cavo coassiale, un altro per le fibre, ecc. In ogni caso, un bit viene spostato attraverso il collegamento in modo diverso.
Alla fine del 1970, l'International Organization for Standardization (ISO) ha proposto un modello di riferimento per le reti di computer organizzato in sette strati, chiamato il modello Open Systems Interconnection (OSI). Il modello OSI è stato definito quando i protocolli di Internet erano ancora in fase di sviluppo; anzi, i progettisti del modello OSI probabilmente non pensavano che potesse diffondersi Internet.
I sette livelli del modello di riferimento OSI, mostrati nella figura, sono: livello di applicazione, livello di presentazione, livello di sessione, livello di trasporto, livello di rete, livello di collegamento dati, e livello fisico. La funzionalità di cinque di questi strati è più o meno la stessa delle loro controparti Internet con nomi simili. I due strati aggiuntivi presenti nel modello di riferimento sono il livello di presentazione e il livello di sessione. Il ruolo del livello di presentazione è quello di fornire servizi che consentono alle applicazioni che comunicano di interpretare il significato dei dati scambiati.
Questi servizi includono la compressione dei dati e la crittografia dei dati, così come la descrizione dei dati (che libera le applicazioni dal doversi preoccupare del formato interno in cui i dati sono rappresentati/memorizzati - il formato può differire da un computer all'altro). Il livello di sessione prevede la delimitazione e la sincronizzazione dello scambio di dati, compresi i mezzi per costruire un sistema di checkpoint e di recupero.
Il fatto che Internet manchi di due strati presenti nel modello di riferimento OSI pone un paio di domande interessanti: i servizi forniti da questi strati sono poco importanti? Cosa succede se un applicazione ha bisogno di uno di questi servizi? La risposta di Internet ad entrambe queste domande è la stessa: tocca allo sviluppatore dell'applicazione.
Sta allo sviluppatore dell'applicazione decidere se un servizio è importante, e di conseguenza, tocca allo sviluppatore dell'applicazione costruire quella funzionalità nell'applicazione.
La rappresentazione del modello di riferimento OSI mostra il percorso fisico seguito dai dati che partendo dal sistema terminale sorgente, vengono elaborati dai protocolli di ciascun livello, risalgono e poi scendono attraverso i livelli dei sistemi intermedi, e poi vengono elaborati dai protocolli residenti sui livelli del sistema destinatario. Router e switch sono sistemi intermedi, in essi vengono implementati solo i livelli fisico e collegamento, nel router anche quello rete. Ciò significa, per esempio, che i router di Internet applicano il protocollo IP (un protocollo di livello 3), mentre gli switch (a livello di collegamento) non sono in grado di applicare il protocollo IP ma riconoscono gli indirizzi MAC. Nei sistemi terminali sono realizzati tutti i livelli, in accordo con l'affermazione che la maggiore complessità di Internet risiede negli estremi della rete.
Il modello a livelli si basa sul concetto di incapsulamento. Presso il mittente, un messaggio a livello di applicazione (M in figura) viene passato al livello di trasporto. Nel caso più semplice, il livello di trasporto prende il messaggio e aggiunge ulteriori informazioni (cosiddette informazioni di intestazione a livello di trasporto, Ht in figura) che verranno utilizzate dal livello di trasporto sul lato ricevente. Il messaggio a livello di applicazione e le informazioni di intestazione a livello di trasporto, insieme, costituiscono il segmento a livello di trasporto. Il segmento a livello di trasporto incapsula così il messaggio a livello di applicazione. Le informazioni aggiuntive possono includere informazioni che consentano al livello di trasporto del lato ricevitore di recapitare il messaggio all'applicazione appropriata e determinare se i bit nel messaggio sono stati modificati lungo il canale. Il livello di trasporto passa quindi il segmento al livello di rete, che aggiunge informazioni di intestazione di livello di rete (Hn in figura), ad esempio gli indirizzi di origine e di destinazione dei sistemi terminali, creando un datagramma di livello di rete. Il datagramma viene quindi passato al livello di collegamento, che aggiungerà le proprie informazioni di intestazione e crea un frame a livello di collegamento. Così, ad ogni livello, un pacchetto ha due tipi di campi: un campi di intestazione e un campo di payload. Il carico utile è tipicamente un pacchetto proveniente dal livello superiore.
Per comprendere l'incapsulamento, si pensi all'invio di una nota da una filiale aziendale ad un altra tramite il servizio postale. Alice, che si trova in una filiale, vuole inviare un memo a Bob, che si trova in un'altra filiale. Il memo è analogo al messaggio a livello di applicazione. Alice mette la nota in una busta con il nome di Bob e il servizio richiesto scritto sulla parte anteriore della busta. La busta è analoga ad un segmento del livello di trasporto: contiene informazioni di intestazione (il nome di Bob e il reparto) e incapsula il messaggio a livello di applicazione (il memo). Quando l'ufficio spedizioni sorgente riceve la busta, la inserisce all'interno di un pacco contenente la corrispondenza destinata a quella filiale. Il reparto spedizioni scrive anche l'indirizzo postale della filiale sorgente e destinataria sul pacco. Qui, il pacco è analogo al datagramma: incapsula il segmento del livello di trasporto (busta), che incapsula il messaggio originale (la nota). Il servizio postale consegna il pacco all'ufficio spedizioni destinatario. Là inizia il processo di de-incapsulamento. Il reparto spedizioni estrae il memo e lo trasmette a Bob. Infine, Bob apre la busta ed estrae la nota.
Il processo di incapsulamento può essere più complesso di come è stato descritto. Ad esempio, un messaggio di grandi dimensioni può essere suddiviso in più segmenti di livello trasporto (che a loro volta possono ciascuno essere suddivisi in più datagrammi a livello di rete). In ricezione, tale segmento deve poi essere ricostruito dai suoi datagrammi costitutivi.
Internet è diventata indispensabile per molte istituzioni, grandi e piccole aziende, università e agenzie governative. Molte persone basano su Internet molte delle loro attività professionali, sociali e personali.
Ma dietro tutta questa utilità, c'è un lato oscuro, un lato dove una persona tenta di devastare le abitudini quotidiane e di danneggiare i computer collegati a Internet, violando la privacy, e rendendo i servizi Internet inutilizzabili. I motivi che spingono una persona a comportarsi da criminale sono molti: usare informazioni personali, danneggiare un'azienda concorrente, dimostrare le proprie abilità, ecc.
Il campo della sicurezza delle reti riguarda le tecniche usate per attaccare le reti informatiche e le misure di difesa contro tali attacchi, o meglio ancora, la progettazione di nuove architetture che siano immuni a tali attacchi. Data la frequenza e la varietà degli attacchi esistenti nonchè la minaccia di nuovi e più distruttivi attacchi futuri, la sicurezza delle reti è diventata un tema centrale nel campo delle reti di calcolatori. La descrizione del problema inizia ponendosi alcune domande: quali possono essere i danni? quali sono le vulnerabilità? Quali sono i più diffusi tipi di attacco?
Si accede alla rete per ricevere/inviare dati da/verso Internet. Questo include le pagine web, i messaggi di posta elettronica, lo scambio di file MP3, le telefonate, i video live, i risultati dei motori di ricerca, e così via. Ma, purtroppo, insieme a tutto questo potrebbe arrivare anche qualcosa di dannoso noto come malware, che può infettare i dispositivi dell'utente. Una volta che il malware infetta un computer può fare qualsiasi cosa indesiderata, tra cui l'eliminazione dei file; l'installazione di spyware che raccoglie informazioni private, come i numeri di carta di credito, le password e tutto ciò che si digita sulla tastiera, e quindi invia tutto (tramite Internet) al criminale. L'host compromesso può essere inserito in una rete di migliaia di altri dispositivi compromessi, noti come una botnet, che sono controllati dal criminale per distribuire e-mail o realizzare un attacco denial-of-service distribuito contro una vittima.
Gran parte dei malware in circolazione oggi é auto-replicante: una volta che infetta un host, da quello cerca di entrare in altri host su Internet, e da questi tenta ancora di diffondersi. In questo modo, il malware auto replicante può diffondersi in modo esponenziale. Il malware può propagarsi nella forma di un virus o un worm. I virus sono malware che richiedono una qualche forma di interazione da parte dell'utente per infettare il dispositivo dell'utente. L'esempio classico è un allegato di posta elettronica contenente codice eseguibile maligno. Se un utente riceve e apre un allegato, esegue inavvertitamente il malware sul suo computer. In genere, tali virus di posta elettronica sono auto-replicanti: una volta eseguito, il virus può inviare un messaggio identico con un allegato malevolo identico, per esempio, ad ogni destinatario nella rubrica dell'utente. I worm sono malware che possono entrare in un dispositivo senza alcuna interazione esplicita da parte dell'utente. Ad esempio, un utente può eseguire un'applicazione di rete vulnerabile a cui un utente malintenzionato può inviare malware. In alcuni casi, senza alcun intervento da parte dell'utente, l'applicazione può accettare il malware da Internet ed eseguirlo, creando un worm. Il worm nel dispositivo appena infettato poi, analizza Internet, alla ricerca di altri host che eseguono la stessa applicazione di rete vulnerabile.
Quando trova altri host vulnerabili, invia una copia di sé stesso a quegli host. Oggi è costoso difendersi dai malware. Mentre si studiano le reti di calcolatori, si dovrebbe pensare di rispondere alla seguente domanda: Che cosa possono fare i progettisti di reti per difendere i dispositivi collegati a Internet dagli attacchi dei malware? I criminali informatici possono attaccare server ed infrastrutture di rete
Un'altra classe di minacce alla sicurezza è nota come denial-of-service (DoS). Come suggerisce il nome, un attacco DoS rende una rete, un host o altro pezzo di infrastruttura inutilizzabile dagli utenti. I server web, i server di posta elettronica, i server DNS, e le reti aziendali, possono essere oggetto di attacchi DoS. Gli attacchi DoS su Internet sono molto comuni, ogni anno si verificano migliaia di attacchi DoS. La maggior parte degli attacchi DoS Internet rientrano in una delle tre categorie seguenti:
Attacco di vulnerabilità. Questo comporta l'invio di alcuni messaggi ben organizzati, ad un'applicazione vulnerabile o al sistema operativo in esecuzione su un host di destinazione. Se la giusta sequenza di pacchetti viene inviata a un'applicazione vulnerabile o al sistema operativo, si può interrompere il servizio o, peggio ancora, l'host.
Saturazione di banda. L'attaccante invia una raffica di pacchetti all'host vittima - l'enorme quantità di pacchetti occupano il canale, impedendo ai pacchetti legittimi di raggiungere il server.
Esaurimento delle connessioni. L'attaccante stabilisce un gran numero di connessioni TCP incomplete presso l'host di destinazione. L'host esaurisce le connessioni e non accetta quelle degli utenti autorizzati.
Si esamini adesso l'attacco di saturazione di banda. Ricordando le cause del ritardo e la perdita di pacchetti, è evidente che se il server ha un tasso di accesso di R bps, l'attaccante invierà traffico ad una velocità di circa R bps per causare danni. Se R è molto grande, l'attacco da una singola sorgente può non essere in grado di generare traffico sufficiente per danneggiare il server. Inoltre, se tutto il traffico parte da una singola sorgente, un router a monte può essere in grado di rilevare l'attacco e bloccare tutto il traffico da quella sorgente prima che il traffico si avvicini al server. In un DoS distribuito (DDoS) l'attaccante controlla più sorgenti e da ognuna invia traffico verso il bersaglio. Con questo approccio, il tasso di traffico complessivo proveniente da tutte le sorgenti controllate deve essere approssimativamente R per danneggiare il servizio. Gli attacchi DDoS che sfruttano botnet con migliaia di host sono un evento comune oggi. È molto più difficile rilevare e difendersi dagli attacchi DDoS rispetto ad un attacco DoS generato da un singolo host.
Anche in questo caso, mentre si studiano le reti, si dovrebbe trovare una risposta alla seguente domanda: cosa possono fare i progettisti di reti di computer per difendersi da attacchi DoS?
Molti utenti oggi accedono a Internet tramite dispositivi wireless, come i computer portatili WiFi o i dispositivi palmari con connessione cellulare. L'accesso a Internet è estremamente comodo e permette agli utenti mobili di usare nuove applicazioni, crea anche una maggiore vulnerabilità, basta, infatti, posizionare un ricevitore passivo in prossimità del trasmettitore wireless, che può ottenere una copia di ogni pacchetto trasmesso! Questi pacchetti possono contenere tutti i tipi di informazioni riservate, comprese le password, i segreti commerciali, e i messaggi personali privati. Un ricevitore passivo che registra una copia di ogni pacchetto in transito è chiamato packet sniffer.
Gli sniffer possono essere distribuiti anche in ambienti cablati. In ambienti cablati, come in molte LAN Ethernet, un packet sniffer può ottenere copie di pacchetti broadcast inviati sulla LAN. Anche le tecnologie di accesso via cavo sono soggette a sniffing. Inoltre, un malintenzionato che riesce a connettersi ad un router o ad un access point di un'istituzione può essere in grado di installare uno sniffer che fa una copia di ogni pacchetto in transito. I pacchetti sniffati possono poi essere analizzati separatamente per estrarre informazioni riservate. Il software packet sniffing è liberamente disponibile in vari siti web.
Poichè i packet sniffer sono passivi - cioè non iniettano pacchetti nel canale - sono difficili da individuare. Così, quando si inviano pacchetti in un canale wireless, bisogna essere consapevoli che qualche intruso stia registrando copie dei pacchetti. Alcune delle migliori difese contro il packet sniffing ricorrono alla crittografia.
È sorprendentemente facile creare un pacchetto con un indirizzo sorgente arbitrario, un messaggio, un indirizzo di destinazione e trasmettere il pacchetto artigianale in Internet, per consegnare il pacchetto alla sua destinazione. Il ricevitore ignaro (ad esempio un router) che riceve un tale pacchetto, prende il (falso) indirizzo sorgente come vero, e quindi esegue un comando incorporato nel pacchetto (ad esempio modifica la sua tabella di instradamento). La capacità di iniettare pacchetti in Internet con un indirizzo sorgente falso è nota come spoofing IP, ed è solo uno dei molti modi in cui un utente può mascherarsi come un altro utente.
Per risolvere questo problema, si ha bisogno dell'autenticazione, cioè, un meccanismo che permette di determinare con certezza se un messaggio proviene da dove asserisce di essere generato. Ancora una volta, è opportuno pensare a come questo può essere fatto mentre si studiano le applicazioni e i protocolli di rete.
Internet è diventato un luogo molto insicuro, in primo luogo perchè è stato originariamente progettato per essere usato solo da "un gruppo di utenti fidati collegati ad una rete trasparente", un modello in cui (per definizione) non c'è bisogno di sicurezza. Molti aspetti dell'architettura originale di Internet risentono ancora oggi di questa fiducia reciproca. Ad esempio, la possibilità per un utente di inviare un pacchetto a qualsiasi altro utente è predefinita mentre sarebbe auspicabile che ci sia la possibilità di richiedere e concedere il permesso di inviare, anche l'identità del mittente, per impostazione predefinita, è ritenuta quella dichiarata, piuttosto che verificarla con l'autenticazione.
Ma Internet di oggi di certo non collega "utenti che si scambiano la fiducia". Tuttavia, gli utenti di oggi hanno ancora bisogno di comunicare e non necessariamente si fidano l'uno dell'altro, potrebbero voler comunicare in forma anonima, indirettamente tramite terzi, e possono diffidare dell'hardware, del software e anche dell'aria attraverso cui comunicano.
Per riepilogare, i problemi che sono ancora aperti, riguardano le difese contro lo sniffing, il falso mittente, l'attacco man in the middle, l'attacco DDoS, i malware e altro. Bisogna ricordare che la comunicazione tra gli utenti che si fidano reciprocamente è l'eccezione piuttosto che la regola.