diff --git a/001-ISO⁄OSI-TCP⁄IP.md b/001-ISO⁄OSI-TCP⁄IP.md index 23a1cc9..31e58a6 100644 --- a/001-ISO⁄OSI-TCP⁄IP.md +++ b/001-ISO⁄OSI-TCP⁄IP.md @@ -56,4 +56,67 @@ Ad esempio, l'utilizzo del protocollo HTTPS implica la necessità di una trasmis L’architettura a strati facilita l’interoperabilità tra differenti sistemi e protocolli, poiché ogni layer opera in modo indipendente. -Non tutti gli host implementano tutto lo stack protocollare. Ad esempio, un dispositivo embedded potrebbe avere solo le funzionalità base per comunicare via rete (come il livello di rete e di trasporto) senza implementare un layer applicativo complesso. \ No newline at end of file +Non tutti gli host implementano tutto lo stack protocollare. Ad esempio, un dispositivo embedded potrebbe avere solo le funzionalità base per comunicare via rete (come il livello di rete e di trasporto) senza implementare un layer applicativo complesso. + +### Esempio pratico di incapsulamento e deincapsulamento + +Vediamo un esempio pratico di incapsulamento e decapsulamento in una richiesta DNS per il caricamento di una pagina web. + +Il pacchetto in uscita é composto da vari strati: + +![dns-request](/asset/img/dns-request.png) + +A *livello applicativo*, il client genera una richiesta DNS per risolvere l'indirizzo IP del sito web. + +![dns-query](/asset/img/dns-query.png) + +Il pacchetto DNS viene poi incapsulato nel *livello trasporto* (transport layer). Dopo aver generato la query DNS a livello applicativo, il payload viene incapsulato in un segmento UDP. Durante questo processo, viene aggiunto un header, che contiene informazioni fondamentali quali: + +- la porta sorgente (determinata dal client) +- la porta di destinazione (la *well-known port 53*, utilizzata dal protocollo DNS) + +![udp-header](/asset/img/udp-header.png) + +Il segmento UDP così formato diventa, nel network layer, il payload del *pacchetto IP*. In questo livello, viene aggiunto l'header IP che include: + +- l'indirizzo IP sorgente, ovvero quello del client che ha inoltrato la richiesta +- l'indirizzo IP di destinazione, corrispondente al server DNS +- altre informazioni di gestione come la versione del protocollo (IPv4 o IPv6), la lunghezza totale del pacchetto, il TTL (Time To Live), ecc. + +![network-header](/asset/img/network-header.png) + +Al livello 2, il data link layer, avviene l'indirizzamento tramite MAC address: + +- il datagramma IP (contenente il segmento UDP con la query DNS) viene incapsulato in un *frame*. Qui interviene il *protocollo ARP* (Address Resolution Protocol), che permette di mappare l'indirizzo IP del server di destinazione all'indirizzo MAC fisico del dispositivo +- il frame, ora completo di header del livello 2 che include il MAC address sorgente e quello di destinazione, viene inviato allo switch + +![packet-to-switch](/asset/img/packet-to-switch.png) + +- lo switch riceve un frame in input + +![frame-ethernet](/asset/img/frame-ethernet.png) + +- lo switch, grazie alla sua MAC address table, sa quale porta utilizzare per inviare il frame al dispositivo corretto (in questo caso, il DNS server). Le informazioni vengono quindi trasferite tramite il cavo + +![deincapsulamento-switch](/asset/img/deincapsulamento-switch.png) + +Lo switch, per poter svolgere il proprio compito, deve analizzare le informazioni fino al livello 2, in particolare il MAC address di destinazione, per poter effettuare l'instradamento corretto. + +*Analisi del frame*: + +- Lo switch riceve il frame e ne esamina l'header per recuperare il MAC address di destinazione. A questo punto, il frame viene *deincapsulato* parzialmente: lo switch estrae l'informazione necessaria dal frame per capire su quale porta inoltrare il pacchetto. + +*Instradamento del frame*: + +- Se il MAC address di destinazione è già presente nella MAC address table dello switch e associato a una porta, il frame viene *reincapsulato* e inviato attraverso il cavo (porta) corrispondente, garantendo così la consegna al dispositivo di destinazione + +*Ricezione dal server DNS*: + +- Il server DNS riceve il pacchetto e procede con il completo deincapsulamento: viene rimosso l'header del livello Data Link, lasciando il pacchetto IP. A sua volta, si rimuove l'header del livello di rete e quindi quello del livello trasporto (UDP), fino a ricostruire la query DNS originale. +- Dall'informazione contenuta nella query, il server DNS elabora la richiesta e incapsula la relativa risposta: + - Nella risposta, il server DNS diventa il mittente e il client il destinatario. + - Lo stesso processo di incapsulamento viene applicato in senso inverso, in modo che il pacchetto risalga fino al client di origine. + +![dns-response](/asset/img/dns-response.png) + +Adesso il processo di incapsulamento si ripete per la generazione di una richiesta HTTP verso il sito web, di cui ora si conosce l'indirizzo IP. \ No newline at end of file diff --git a/asset/img/deincapsulamento-switch.png b/asset/img/deincapsulamento-switch.png new file mode 100644 index 0000000..0d97a1d Binary files /dev/null and b/asset/img/deincapsulamento-switch.png differ diff --git a/asset/img/dns-query.png b/asset/img/dns-query.png new file mode 100644 index 0000000..805e4a0 Binary files /dev/null and b/asset/img/dns-query.png differ diff --git a/asset/img/dns-request.png b/asset/img/dns-request.png new file mode 100644 index 0000000..af3031f Binary files /dev/null and b/asset/img/dns-request.png differ diff --git a/asset/img/dns-response.png b/asset/img/dns-response.png new file mode 100644 index 0000000..3bd6ff6 Binary files /dev/null and b/asset/img/dns-response.png differ diff --git a/asset/img/frame-ethernet.png b/asset/img/frame-ethernet.png new file mode 100644 index 0000000..557534d Binary files /dev/null and b/asset/img/frame-ethernet.png differ diff --git a/asset/img/network-header.png b/asset/img/network-header.png new file mode 100644 index 0000000..3c79750 Binary files /dev/null and b/asset/img/network-header.png differ diff --git a/asset/img/packet-to-switch.png b/asset/img/packet-to-switch.png new file mode 100644 index 0000000..bfe7749 Binary files /dev/null and b/asset/img/packet-to-switch.png differ diff --git a/asset/img/udp-header.png b/asset/img/udp-header.png new file mode 100644 index 0000000..1cefb99 Binary files /dev/null and b/asset/img/udp-header.png differ