Sei sulla pagina 1di 13

PROTOCOLLI E STANDARD

Protocollo: documento che definisce le modalita’ con le quali due agenti comunicano , esso e’
standardizzato per garantire l’ interoperabilita’ fra dispositivi o agenti software sviluppati
indipendentemente

Schema di servizi di rete a livelli: ogni livello fornisce una serie di servizi al livello superiore e impiega
servizi offerti dai livelli inferiori , ogni livello di un host comunica con il corrispondente livello di un altro
host tramite i protocolli definiti per quel livello

Regole di un protocollo: sintassi (formato dei campi dei dati), semantica (significago ed interpretazione dei
campi dei dati), sincronizzazione (informazioni per invio e ricezione dati con host che elaborano a velocita’
diverse  Request-To-Send , Clear-To-Send)

Tipologie di standard: de facto (implementazioni gia’ eistenti), de jure (definizione di standard a cui le
implementazioni devono attenersi)

Organizzazioni di standardizzazione: ISO (international standard organization), ANSI (american national


standard institute), IEEE (institute of electrical and electronics engineers)

Request for comment (RFC): documento protocollato e con un codice indentificativo che viene pubblicato
su suggerimento delle autorita’ che regolano la rete internet , esso ha vari livelli di maturazione come
‘bozza’, ‘proposta di standard’, ‘standard internet’ e di impiego come ‘necessario, ‘consigliato’,
‘facoltativo’, ‘d’uso limitato’, ‘sconsigliato’.
IANA (internet assigned numbers authority): Gestisce i nomi dei domini, degli indirizzi IP (v4 e v6) e dei
numeri e nomi di protocollo.  dal 1998 sostituita da ICANN (internet corporation for assigned names and
numbers)

Modello ISO-OSI: OSI -> Open System Interconnection , un sistema aperto e’ un insieme di protocolli per
permettere la comunicazioni fra due sistemi indipendentemente dalla loro architettura HW e SW . Esso
utilizza un modello a strati (layer) che descrive la comunicazione a livelli di astrazione successivi -> ogni
livello si occupa di una serie di servizi da offrire per la comunicazione sfruttando i servizi dei livelli inferiori
(interfacce ai servizi -> API) e fornendone i propri a livello superiore.

Livello fisico: Riguarda la trasmissione dei bit sul canale fisico tenendo conto delle caratteristiche del canale
di comunicazione (linee di comunicazione, propagazione segnali), del tipo di codifica dei segnali (bit-rate e
tipo di modulazione -> QAM), modalita’ di trasmissione(simplex, half-duplex, full-duplex) e caratteristiche
meccaniche ed elettriche(connettori e livelli di tensione)

Data Link Layer: gestisce gli errori del livello fisico aumentandone l’ affidabilita’ (parity check e CRC), divide
i datagram in frame da trasmettere a livello fisico, attua controlli di temporizzazione della trasmissione e il
controllo di flusso, gestisce l’ eventuale duplicazione dei frame dovuti a ritrasmissione, gestisce l’ acceso al
canale tramite idirizzamento MAC (medium access control a 48 bit) e arbitraggio di accesso.
Esso e’ spesso realizzato in hardware riferendosi a parametri noti e poco variabili (ritardo e tasso di errore),
un datagram del livello di rete viene arricchito con un header contenente gli indirizzi MAC sorgente e
destinazione e un marker di inizio pacchetto e con un trailer con un market di fine pacchetto e bits per il
controllo di errore -> CRC)

Network Layer: e’ responsabile della consegna tra mittente e destinatario dei datagram IP attraverso reti
diverse (reti a commutazione di pacchetto) indirizzando gli host tramite un idirizzo IP a 32 bit. A questo
livello i segmenti del livello di trasporto vengono arricchiti con un header contenente gli indirizzi IP sorgente
e destinazione. Il livello di rete viene implementato anche dai router definendone gli algoritmi di
instradamento (ottimizzando una specifica metrica di interesse come throughput, fault-tolerance, ...)
Transport Layer: e’ responsabile della consegna punto punto gestendo la complessita’ di un messaggio
diviso in piu’ pacchetti, realizza un indirizzamento service-point impiegando coppie indirizzo IP e numero di
porta sorgente e destinazione definendo una comunicazione a livello di agenti software. Puo’ supportare
servizi con connesione TCP(flusso dati affidabile, gestione pacchetti -> riassemblaggio, ordinamento,
ritrasmissione, e controllo di errore check-sum) e senza connesione UDP(trasmissione di pacchetti
indipendenti senza garanzia di consegna). L’ header a livello di trasporto specifica i numeri di porta dei
processi mittende e destinazione, l’ ACK per la sincronizzazione della comunicazione e il numero d’ ordine
dei pacchettti per garantire una comunicazione affidabile tra gli host

Session Layer: controllo di comunicazione secondo la modalita’ prevista (half/full-duplex), fornisce la


sincronizzazione con checkpoint di un flusso di dati, permette di correlare comunicazioni successive in una
sessione

Presentation Layer: garantisce inter-operabilita’ nello scambio di dati fra sistemi con codifiche dati diverse
(Endianess: little/big endian) fornendo servizi di crittografia e compressione dati

Application layer: regola i protocolli applicativi specificando la struttura dei messaggi scambiati fra agenti
software

Internet Protocol: protocollo per la trasmissione di datagram indipendenti e senza connesione (consegna
best-effort) che non garantisce la consegna, il timing, l’ ordine di arrivo, esso non si occupa del
riordinamento dei pacchetti(compito del livello di trasporto)

Struttura indirizzi IP: un indirizzo IP e’ composto di 4 Byte e puo’ essere scomposto in indirizzo di rete
(gruppo di dispositivi collegati nella stessa posizione fisica al medsimo router) e indirizzo di host nella rete
(indirizzo che identifica un host specifico connesso ad una rete)

Classi di indirizzi IP: suddivisione standard per gestire gli indirizzi a livello globale ->

Classe A : 0... con 8 bit per rete e 24 bit per host

Classe B : 10... con 16 bit per rete e 16 bit per host

Classe C: 110... con 24 bit per rete e 8 bit per host

Classe D: 1110... con 32 bit per indirizzo multicast

Classe E: 1111... riservato per scopi futuri

Protocolli di supporto al TCP/IP: ARP(address resolution protocol) -> associa IP a MAC , RARP(reverse
address resolution protocol) -> associa Mac a IP, ICMP(internet control message protocol) -> invio di
messaggi sullo stato della trasmissione dei datagram, IGMP(internet group message protocol) -> permette
la trasmissione di un messaggio a piu’ destinatari

UDP: protocollo del livello di trasporto senza connessione per l’ invio e ricezione di datagram, prevede il
controllo di errore per scartare i pacchetti con dati corrotti

TCP: protocollo del livello di trasporto con connessione (full-duplex) per una trasmissione affidabile di dati
tramite una stretta di mano a tre vie per la sincronizzazione di trasmissione e ricezione che suddivide il
flusso di dati in segmenti numerati che verranno riordinati dal ricevente

Trasmissione TCP : riceve un flusso di dati da un applicazione che viene suddiviso in pacchetti di massimo
64 KB identificati dal numero di sequenza (numerazione del primo byte contenuto nel pacchetto), spedisce
i segmenti a livello di rete e inizializza un timer di ritrasmissione (pacchetti privi di ACK)
Ricezione TCP: riceve i datagram IP del livello di rete , riordina i pacchetti ricevuti con successo segnalandoli
al mittente con una risposta (ACK : num. Prossimo Byte atteso) e rende disponibile i dati al livello
applicativo

Socket: concetto introdotto da UNIX BSD , identificato con IP e numero di porta, esso viene aperto da
entrambi gli host e viene usato come un file in lettura e scrittura. La connesione tra due host e’ identificata
dai socket dei due end-point (IP source , Port source , IP destination , Port destination). Per connettersi ad
un servizio specifico di un server si devono conoscere l’ indirizzo IP dell’ host server e il numero di porta su
cui il processo server accetta connesioni, le porte inferiori alla 1024 sono dette Porte Ben Note (Well-
Known Ports) e sono assegnate a servizi standard . Il client definisce la porta di ogni sua connessione
utilizzando numeri elevati (numeri di porta effimeri) assegnati dal sistema operativo per garantirne l’
unicita’ per ogni host , tali porte vengono definite al momento di richiesta di connessione

Connessione UDP: protocollo che richiede meno overhead della connessione TCP, il destinatatio e’ un
processo server UDP in ascolto su una porta UDP nota (le porte UDP sono indipendenti da quelle TCP)

UDP server: Il sistema operativo associa una coda d’ ingresso/uscita ad ogni socket UDP creato, quando
arriva un pacchetto a livello di rete si cerca la coda relativa alla porta di destinazione specificata dal
mittente, se la coda non esiste si genera un messaggio ICMP -> Destination Unreachable

Difetti modello ISO-OSI: livello di sessione poco utile, livello di presentazione difficile da standardizzare,
livelli di rete e datalink complessi (richiedono una strutturazione in sottolivelli)

APPLICATION LAYER

Protocolli applicativi: permettono di standardizzare la comunicazione tra programmi sviluppati


indipendentemente in modo da renderli interoperabili, specificando il formato dei messaggi di richiesta e
risposta scambiati tra agenti software e definendo il tipo di meccanismo di trasporto utilizzato (TCP e UDP)

Tipo di servizio di trasporto utilizzato: UDP e’ adatto per le applicazioni che richiedono bassa latenza (poco
ritardo), basso overhead (dati minimali da trasmettere) e tolleranza rispetto alla perdita di informazioni
(trasmissioni video e audio), TCP si usa quando e’ necessario garantire che tutti i dati trasmessi arrivino
anche tollerando un eventuale ritardo (es: pagine web), nessuno dei due protocolli fornisce garanzie di
temporizzazione (no real-time application)

Applicazioni e protocolli applicativi: DNS (domain name system) -> converte i nomi degli host nei relativi
indirizzi IP , SMTP (simple mail transfer protocol) -> gestisce il trasmerimento di email da un client ad un
mail server e da un mail server ad un altro mail server , POP3 (post office protocol) e IMAP (interactive mail
access protocol) -> forniscono l’ accesso remoto ai mailbox (caselle di posta elettronica), FTP (file transfer
protocol) -> trasferimento di file remoti, SNMP (simple network management protocol) -> gestione di
apparati di rete, HTTP (HyperText transfer protocol) -> gestisce il trasferimento di risorse da server web al
browser del client, telnet, ssh, sftp

Architettura Client-Server: il server e’ un applicativo sempre in esecuzione su un host (con indirizzo ip o


nome DNS noto) in ascolto su una porta TCP o UDP nota, il client e’ un applicativo in esecuzione host della
rete con attivita’ saltuaria e indirizzo ip e porta che possono essere inizialmente (prima della richiesta lato
client) ignote per il server

Architettura Peer to Peer (P2P): tutti i nodi (peers) hanno la stessa importanza e sono sia client che server,
ogni peer condivide delle risorse (dati/potenza di calcolo) , posso essere presenti server centralizzati. Ogni
nodo e’ autonomo e dinamico, potendo entrare o uscire dalla rete in ogni momento. Gli indirizzi dei nodi
non sono noti a priori e devono quindi essere ottenuti tramite tecniche di discovery , su LAN con richieste
UDP di tipo broadcast, su internet consultando un server che indicizzi i peer. I peer sono connessi da una
rete a livello applicativo stabilendo piu’ connessioni TCP con altri peer (usate per la gestione della rete).
Vantaggi delle reti P2P: l’ assenza di server centralizzati permette la scalabilita’ della rete (tutti i peer
dividono il carico e ogni peer aumenta sia la domanda che la capacita’ di servizio)

Svantaggi delle reti P2P: gestione delle ricerche in modo distribuito (mancanza di un indice centrale per
indirizzare i peer a cui richiedere una risorsa) genera un traffico di rete elevato, incapacita’ di garantire una
gestione della rete in modo robusto (disconnessione dei peer dalla rete)

Architettura P2P ibrida: impiego di un discovery & lookup server con carico limitato che offre funzioni di
indice per le ricerche e discovery dei peer) dove lo scambio dei dati avviene fra i peer

Domain Name System (DNS): servizio che permette di convertire i nomi DNS degli host su internet nei
corrispondenti indirizzi IP tramite un DNS lookup. Esso e’ una applicazione client-server basata su un
database distribuito gestito da un insieme di server DNS organizzati in modo gerarchico , le interrogazioni a
tale applicazione si fanno con richieste UDP alla porta 53 da parte del sistema operativo del client
(resolver). Quando un applicazione deve convertire un nome DNS in indirizzo IP utilizza il resolver che con il
protocollo DNS contatta il server DNS (usato da HTTP e SMTP)

Domain Name Space: lo spazio dei nomi e organizzato in modo gerarchico con un albero di nomi di
dominio dove ciascun nodo o foglia ha ssociati resource records

Domain Name (nomi DNS): un nome di dominio e’ una stringa composta da una o piu’ parti (label)
concatenate con il carattere “ . ” ->Domain Name : label1.label2.label3 . Ogni label e’ lunga al massimo 63
caratteri ed il nome di dominio non puo’ superare i 255 caratteri (1 byte per carattere) e l’ ultima (quella
piu’ a sinistra del domain name) identifica il top-level domain. Un hostname e’ un nome DNS a cui e’
associato almeno un IP

Host aliasing: un host con piu’ alias (piu’ nomi DNS) , il nome principale e’ detto canonico (canonical host
name)

Mail server aliasing: tramite il servizio DNS e’ possibile assegnare piu’ nomi (alias) allo stesso mail server
rendendo piu’ leggibili gli indirizzi email (nome.utente@dominio1.xxx -> nome.utente@dominio2.xxx)
generando un record ti tipo MX (Mail Exchange) nel server DNS

Distribuzione del carico server: Il DNS puo’ essere utilizzato per distribuire il carico fra piu’ server con IP
diversi , associando ad un hostname canonico piu’ indirizzi IP , il server DNS risolvera’ il nome canonico dell’
host richiesto fornendo l’ inisieme di indirizzi IP associati ruotando l’ ordinamento ad ogni risposta (round
robin), il resolver del client in genere sceglie il primo indirizzo IP della lista ottenuta dal server DNS

DNS come database distribuito: il servizio DNS e’ realizzato con un gran numero di server DNS distribuiti
sulla rete, tali server sono organizzati in modo gerarchico e distribuiti in tutto il mondo, ciascun server ha
competenza solo per un sottoinsieme di hostname

Approccio centralizzato per il DNS: l’ impiego di un unico server DNS centralizzato sarebbe un collo di
bottiglia sia per eventuali guasti (non permetterebbe piu’ a nessun host di sfruttare tale servizio), che per la
gestione del traffico richiesto (ogni client fa numerose richieste DNS). L’ accesso al server centrale da punti
remoti richiederebbe lunghe latenze e l’ aggiornamento delle risorse del database sarebbe complesso data
l’ enorme quantita’ di record da gestire (proveniente da client eterogenei)

Struttura gerarchica del DNS server: ROOT -> 13 server radice etichettati da A a M (contengono solo
riferimenti ai TLD Server), Top-Level Domain (TLD) -> 20 domini generici e 248 livelli per le nazioni,
Authoritative server (server autorevoli o di competenza o anche AS) -> server che gestisce i record DNS per
una zona (i nomi di dominio devono essere registrati dalla registration authority fornendo i riferimenti ai
server DNS di competenza)
Zone e Name servers autorevoli: lo spazio dei nomi di dominio e’ diviso in zone, una zona corrisponde ad
un sottoalbero della gerarchia dei nomi di dominio, ogni zona ha un server DNS primario ed eventuali
server secondari (repliche sincronizzate con il primo), un server autorevole fornisce risposte che derivano
da una sorgente diretta (server foglia che non fa interrogazioni ricorsive o iterative per risolvere il nome di
un dominio), un server DNS puo’ essere autorevole per piu’ zone

Interrogazione ricorsiva: il resolver puo’ chiedere la risoluzione di un domain name al server DNS con
modalita’ ricorsiva con un bit di flag nella richiesta, se il nome e’ locale si ottiene un record autorevole
(authoritative record), se il nome appartiene ad una zona non gestita direttamente dal server locale, si
innesca un’ interrogazione ricorsiva ad altri name server ottenendo o il Resource Record (RR) o un errore

Interrogazione iterativa: il client richiede al server DNS la migliore risposta che puo’ dare, se il nome
richiesto non e’ noto, il server fornisce un riferimento al name server di competenza per un livello piu’
basso dello spazio dei nomi. Al primo passo si contatta un root server che fornira’ il riferimento al server
TLD di competenza (es: .it) , al secodo passo si contatta il server TLD che fornisce il riferimento al name
server del dominio specifico (.xdiism.it), al terzo passo il name server locale invia la query al name server
del dominio specifico (.xdiism.it) che o risponde con il Resource Record contenente l’ IP richiesto o fornisce
un ulteriore riferimento ad un name server di sottodominio (.opennotes.xdiism.it)
Cache DNS: il caching DNS permette di ridurre la latenza nelle risposte ed il numero di messaggi necessari
ad ottenere la risposta, il server DNS e il resolver memorizzano in una cache locale le risposte ricevute, se
una nuova richiesta e’ relativa ad un resource record presente in cache (HIT) la risposta puo’ essere
inoltrata senza ulteriori interrogazioni, i RR nella cache vengono invalidati una volta scaduto il Time To Live
(TTL) (dato che le associazioni hostname – IP possono essere dinamici)

Formato dei messaggi DNS: il messaggio di richiesta e’ inviato come pacchetto UDP, il messagio puo’
contenere una o piu’ richieste sotto forma di Resource Record (RR) -> vedi slide 24

Tipi di resource records: A (hostname-indirizzo IP), NS (domain name-hostname del server di competenza),
PTR (IP-hostname), CNAME(alias-hostname canonico), HINFO(hostname-info sull’ host), MX(hostname
email-nome canonico del server email)

Servizio di posta elettronica: l’ email e’ un sistema di comunicazione asincrona che prevede l’ invio e la
ricezione di un messaggio da parte di due utenti non sincronizzati , con l’ eventuale memorizzazione dei
messaggi inviati ma non ancora letti. L’infrastruttura del servizio prevede la definizione di un sistema di
indirizzamento per le caselle postali (mailbox) a cui sono inviati i messaggi, un sistema di agenti software
per inviare, ricevere e consegnare i messaggi (agenti per l’ utente che deve visualizzare le email e agenti per
il mail sever -> agenti di trasferimento email) con il relativo protocollo di comunicazione (Simple Mail
Transfer Protocol SMTP) e lo standard per il formato dei messaggi (formato della busta)

Indirizzi email: un indirizzo email individua una mailbox su un host nella rete internet, la mailbox e’ un file
di testo in una directory specifica nel server, i messaggi di posta in arrivo sono accodati al file di mailbox
(append), l’ utente puo’ accedere alla posta localmente leggendo il file mailbox o attraverso protocolli per l’
accesso remoto alla mailbox (POP3 o IMAP)

Struttura indirizzo email: utente@host.dominio , il campo utente identifica la mailbox (si posso avere alias)
, il campo host.dominio viene risolto dal DNS con una query di tipo MX (mail exchange) mappando
host.dominio -> IP Mail Server
Mail User Agent (MUA): applicazioni per leggere e spedire email e gestire mailbox (es: outlook , gmail),
utilizzano un server SMTP per la spedizione dei messaggi e gestiscono la mailbox interagendo con il server
tramite protocollo POP3 o IMAP

Message Transfer Agent (MTA): applicazioni per il trasferimento dei messaggi dal mittente alla
destinazione e la ricezione dei messaggi , inviare un messaggio corrisponde a trasferire un file di testo. Tali
agenti software usano il protocollo SMTP con connessione TCP (porta 25) per trasferire i messaggi

Consegna di un messaggio: il Mail User Agent (MUA) trasferisce il messaggio sul suo Message Transfer
Agent (MTA) (sul corrispondente SMTP Server), il MTA inserisce il messaggio nella coda di uscita (caso in cui
il mailbox destinatario non e’ interno al mail server), contatta il MTA destinatario tramite connessione TCP
(porta 25) e gli invia il messaggio, il MTA destinatario accodera’ il messaggio ricevuto nella mailbox dell’
utente destinatario

Relay Agent: sono Mail Transfer Agent (MTA) che fungono da mail server intermedi per il transito dei
messaggi verso altri MTA (funzionalita’ in genere disabilitata per evitare l’ invio di messaggi spam)

Formato dei messaggi email: un messaggio e’ un testo con codifica dei caratteri ASCII a 7 bit, strutturato in
due parti separate da una linea vuota (CR+LF), l’ intestazione contiene meta-informazioni che descrivono il
messaggio (linee consecutive di tipo campo:valore) ed il corpo del messaggio

Intestazione dei messaggi email: le intestazioni sono inserite dall’ user agent e/o dai MTA, alcune
intestazioni servono per la consegna, mentre altre per l’ interpretazione del corpo del messaggio.
Esempi di intestazione: To: (indirizzo DNS del destinatario), Cc: (copia in carta carbone -> indirizzi per
conoscenza), Bcc: (copia in carta carbone con indirizzi invisibili ai riceventi), From: (indirizzo di chi ha scritto
il messaggio), Sender: (indirizzo di chi ha inviato il messaggio <- opzionale), Subject: (oggetto del
messaggio), Date: (data e ora di invio del messaggio), Reply-to: (indirizzo al quale inviare le risposte),
Recived: (indica l’ agente che ha ricevuto il messaggio insieme ad un timestamp, viene inserito da ogni MTA
che trasferisce il messaggio), Message-Id: (numero unico che individua il messaggio sul MTA di origine)

MIME (multipurpose internet mail extensions): supporto per codifiche non ASCII 7 bit, possibilita’ di
aggiungere allegati alle email, gestione dei messaggi con piu’ parti, uso di codifica non ASCII nell’
intestazione (UTF-8)

MIME Content-Type: definisce il tipo di dati (Internet Media Type) come tipo/sottotipo (es : content-type:
text/html , text/plain, image/jpeg, multipart/mixed). L’ informazione sul content-type e’ fondamentale per
la visualizzazione corretta da parte dell’ utente

MIME Content-Transfer-Encoding: indica se e’ stata applicata qualche tipo di codifica ai dati specificati nel
Content-Type (7bit, quoted-printable, base 64, 8 bit, binary)  Guardare da slide 35 per codifiche standard

Post Office Protocol 3 (POP3): protocollo con modalita’ pull, apre una connessione TCp sulla porta 110,
autentica l’ agente con username-password (in chiaro), effettua una transazione per recuperare i messaggi
ed eventualmente altri comandi (list, retr, dele), applica l’ aggiornamento sulla mailbox al momento del quit

HTTP-WEB

World Wide Web: nasce nel 1989 al Cern di Ginevra come mezzo per scambiare informazioni, e’ un sistema
di documenti ipertestuali e risorse distribuite sulla rete internet e collegate fra loro con hiperlink pensato
come sistema di gestione dell’ informazione che sfrutta le infrastrutture di rete per facilitare la
pubblicazione, distribuzione, condivisione e accesso alle informazioni. La sua struttura e’ a ragnatela (web)
ed e’ definita dagli hyperlink che costituiscono il Webgraph (i nodi sono le pagine e gli archi sono gli
hyperlink). Il World Wide Web Consortium e’ l’ organizzazione che sovrintende allo sviluppo degli standard
per il web.
Il Web come applicazione: tale servizio e’ reso disponibile da un insieme di applicazioni server (Web Server
Application) ed e’ accessibile mediante un’ applicazione client con interfaccia grafica (browser web), si basa
sugli ipertesti realizzati in HTML (HyperText Markup Lenguage) ed indirizzati tramite URL (Uniform
Resource Locator) che sfruttano il protocollo HTTP(HyperText Transfer Protocol)

Web 1.0: l’ idea originaria del web e’ come collezione di documenti statici

Web dinamico: generazione dinamica delle pagine web (Server-Side Web) tramite linguaggi di script HTML
embedded trasformando i web server da archivi di coumenti a application server, sviluppo di linguaggi di
script client-side (java -> applet , javascript->eseguito dal browser client)

Web 2.0: il web e’ divenuto una piattaforma per lo sviluppo e la distribuzione di servizi e applicazioni,
legata al ruolo centrale degli utenti

HTTP: protocollo utilizzato per scambiare risorse sul web, basato sul modello client/server (browser web –
server web) che utilizza TCP come protocollo di trasporto (porta server web : 80) . Il client apre una
connesione TCP verso il server web utilizzando le informazioni presenti negli hyperlink/URL, il client invia
una richiesta HTTP per la risorsa (richiesta codificata in ASCII), il server risponde inviando la risorsa richiesta
o un codice di errore con una descrizione. Non ci sono vincoli sul tipo di dati che posso essere trasferiti
(immagini, video, testi , file compressi, ...), per ogni risorsa della pagina web richiesta (immagini, .css, .html
...) vi e’ una richiesta distinta
Uniform Resource Locator (URL): l’ URL individua univocamente una risorsa sul web , permettendo di
descrivere in modo uniforme la posizione di una risorsa sul web rispetto al protocollo utilizzato per
accedervi, contiene il riferimento all’ host attraverso il suo nome DNS e opzionalmente la porta, esso e’ un
riferimento non trasparente alla rilocazione di una risorsa (broken links)

URL -> protocol://host.domain:port/resource-path?query_string

URI (Uniform Resource Identifier): necessita’ di identificare univocamente una risorsa web tramite una
stringa opportunamente formattata

URN (Uniform Resource Name): nome assegnato stabilmente (permanentemente) ad una risorsa ed
indipendente dalla locazione fisica della risorsa (servizio di naming : URN -> URL) (es: Digital Object
Identifier DOI)

Richieste HTTP: Metodo – Percorso locale della risorsa – Versione HTTP (1^ riga header)

Metodo: GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS, CONENCT, PATCH

Percorso locale della risorsa: e’ la parte dinale dell’ URL dopo il nome dell’ host
(es: URL -> http:opennotes.it/index.html , local path -> index.html)

Versione HTTP: HTTP/1.1 o HTTP/1.0

Metodi HTTP: i metodi definiscono l’ operazione da effettuare sulla risorsa richiesta, metodi principali : GET
(richiede il trasferimento di una risorsa, se e’ seguita dall’ intestazione “if-modified-since” il server invia i
dati solo se sono stati modificati dopo la data specificata -> cache browser), HEAD (Richiede solo le
intestazione relative alla risorsa, serve per verificare le caratteristiche della risorsa), POST (utilizzato per
inviare dati al server, l’ intestazione e’ seguita da un corpo che contiene i dati passati, gli header MIME
content-type e content-length definiscono il tipo e la dimensione dei dati)
Risposta HTTP: la prima linea dell’ intestazione riporta il codice dell’ esito della richiesta , le intestazioni
riportano le informazioni relative al server e alla risorsa inserita nel corpo
Codici di stato:
1xx Informational -> 100 CONTINUE (indica che il server ha ricevuto l’ header della richiesta post per il
trasferimento dati da client a server e che il client puo’ inviare il corpo della richiesta),
2xx Success -> 200 OK (richiesta http eseguita con successo),
3xx Redirection -> 301 MOVED PERMANENTLY (richiesta da reindirizzare all’ URL presente nel campo
Location: xxx dell’ intestazione della risposta), 304 NOT MODIFIED (risposta ad una richiesta contenente il
campo if-modified-since),
4xx Client Error -> 403 Forbidden (richiesta ad una risorsa per la quale non si possiedono i permessi, es:
directory listing), 404 Not Found(richiesta per una risorsa inesistente),
5xx Server Error -> 500 INTERNAL SERVER ERROR (messaggio di errore generico), 503 SERVICE
UNAVAILABLE (server momentaneamente non disponibile a causa di carico eccessivo o manutenzione)

Campi di intestazione: linee di testo codificate come coppie Nome: Valore terminate da CR+LF

Virtual Hosting: tecnica per ospitare piu’ nomi di dominio su un singolo server (shared web hosting, piu’ siti
web sullo stesso server con un unico IP)

Campi di richiesta:
User-Agent: stringa che identifica il client/browser specificando il nome, la versione del protocollo e il
motore di layout (usata per scopi statistici e per ottimizzare il formato della risposta)

Host: campo obbligatorio che riporta l’ hostname a cui e’ diretta la richiesta

If-Modified-Since: gestisce il trasferimento condizionale di una risorsa, solo se la data di modifica sul server
e’ successiva al campo specificato viene inviata la risorsa

Cache-Control: permette di specificare come la max-age [sec] della risorsa, se la risorsa non e’ cachabile
(no-cache), se ka richiesta e’ cachabile nel browser ma non in server proxy condivisi (private),
es : Cache-control: max-age=3600, private

Accept: lista di tipi MIME compatibili con l’ user-agent (tutti -> wildcard: */*)

Accept-Lenguage: permette all’ user-agent di specificare una lista di lingue di preferenza

Campi di risposta:

Age: tempo in secondi trascorso dalla risorsa in una cache

Content-Lenguage: indica la lingua della risorsa

Content-Type: Indica il tipo MIME della risorsa permettendo al browser di interpretarla correttamente

Content-Length: se specificata indica la lunghezza in byte della risorsa, se non viene specificata il server
web specifica Content-Encoding: chunked (la risorsa sara’ inviata a pezzetti e man mano visualizzata)

Web Proxy: e’ un server intermedio per le richieste http di un client, riceve richieste, le propaga al server di
destinazione, recupera la risorsae inoltra la risposta al client. Esso e’ configurabile a livello di sistema
operativo e browser, permette il caching condiviso, il controllo di accesso e puo’ essere l’ unico canale per l’
accesso al web da una rete privata aziendale.

Protocollo HTTP senza stato: il server web risponde alle richieste del client senza memorizzare nessuna
informazione di stato del client, se il client invia piu’ richieste queste sono considerate indipendenti e anche
di fronte a richieste consecutive della stessa risorsa non modificata il server rispondera’ ad ognuna di
queste richieste indipendentemente . Piu’ richieste possono essere gestite dalla stessa connesione
persistente TCP specificando keep-alive, tale funzione puo’ essere disabilitata con il campo di intestazione
Connection: close cosi da ridurre l’ uso di risorse

Parametri GET: parametri accodati dopo ‘?’ nell’ URL della risorsa , l’ URL deve essere composto da
caratteri ASCII e i caratteri non ASCII sono codificati con ‘%XY’ dove X e Y sono due numeri esadecimali

TRANSPORT LAYER

Livello di trasporto: fornisce un servizio per la comunicazione fra processi applicativi interni a host nella
rete, si basa su librerie API (socket API) con cui il sistema operativo implementa lo scambio dati ,
presuppone un modello client-server e gestisce l’ indirizzamento dei processi (indirizzo di porta)

Servizio per stream dati (con connessione): fornisce un canale affidabile su cui scrivere o da cui leggere
dati, dal punto di vista del programmatore e’ come un file, deve gestire il controllo degli errori, la perdita di
pacchetti, i numeri di sequenza dei datagram, il controllo di flusso (evita il riempimento del buffer di
ricezione) e deve nascondere il problema delle latenze di trasmissione dovuta ai pacchetti memorizzati nei
nodi di instradamento (router) e spediti con ritardo
Servizio datagram (senza connesione): fornisce l’ indirizzamento verso le applicazioni (porte), replica le
funzionalita’ di consegna dei datagram del livello di rete, puo’ aggiungere il controllo a rilevazione di errore
(checksum)

Application Program Interface (API): il server attiva una procedura che rimane in attesa di richieste da
parte di un client (LISTEN), il server effettua una richiesta al sistema operativo per la creazione di un end-
point (server socket) specificando il tipo di servizio richiesto (stream/datagram -> porta TCP/UDP) e la porta
su cui si mettera’ in ascolto (nota al client), tale procedura crea le strutture dati a livello di sistema
operativo per la gestione della comunicazione del servizio richiesto(buffer, code di richiesta di connesione,
strutture per il multiplexing di piu’ canali di comunicazione, ...). Per il servizio Stream il server rimane in
attesa di accettare una richiesta di connessione (ACCEPT), per il servizio Datagram rimane in attesa di
ricevere un datagram client (RECVFROM). L’ agente client invia una richiesta di connessione (CONNECT) o
un messaggio datagram (SENDTO) di tipo UDP o TCP. Per i servizi di stream con connessione (TCP), client e
server si scambiano dati leggendo/scrivendo (SEND/RECEIVE) sul canale (socket), al termine dello scambio
dei messaggi la connessione viene chiusa (DISCONNECT)

Trasmission Control Protocol (TCP): protocollo di trasporto orientato alla connessione e progettato per
fornire un flusso dati affidabile end-to-end su una rete internet non affidabile (consegna best-effort),
include meccanismi di congestione e flusso

User Datagram Protocol (UDP): protocollo senza connessione per l’ invio di datagram indipendenti.

Indipendenza del numero di porta: l’ indirizzo di trasporto e’ definito dal numero di porta (16 bit), TCP e
UDP usano spazi di porta distinti, stessi numeri di porta per i due protocolli vengono distinti in un campo
dell’ intestazione IP che specifica il protocollo di trasporto usato

Servizio di stream con TCP: TCP implementa un trasferimento affidabile di un flusso di dati, tale flusso e’
scomposto in datagram che sono inviati al destinatario su un servizio di rete non affidabile, i datagram
possono essere persi, possono arrivare in modo disordinato o contenere dati corrotti
Perdita di pacchetti: per garantire l’ arrivo di tutti i pacchetti viene adottato un meccanismo basato sul
riscontro della ricezione (ACK), il mittente invia un ACK in risposta alla corretta ricezione di un pacchetto, il
mittente ritrasmette il pacchetto fino a che non e’ sicuro della sua corretta ricezione gestendo sia la perdita
del pacchetto che dell’ ACK di ritorno, la ritrasmissione avviene allo scadere di un timeout, dopo un certo
numero di ritrasmissioni fallite si genera un errore

Ordinamento e duplicazione: il protocollo prevede la numerazione dei pacchetti e dei relativi ack, il
numero di ordine identifica univocamente i dati nella connessione e permette di riconoscere i pacchetti
duplicati (si scartano)

Controllo di errore: Un codice a rilevazione di errore permette di scartare in ricezione i pacchetti corrotti,
tali pacchetti verranno ritrasmessi allo scadere del timeout mittente

TCP flag bit: URG -> Urgent Pointer che specifica la posizione dei dati urgenti a partire dal numero di
sequenza attuale (es: CTRL-C), ACK -> Indica che il campo di Acknowledgement number e’ valido, PSH ->
indica dati di tipo PUSH che dovranno essere consegnati subito e senza bufferizzazione, RST -> Richiesta di
reinizializzazione di una connessione diventata instabile, rifiuto di un segmento non valido o apertura di
connesione, SYN -> usato per creare una connessione tale bit e’ caratteristico dei segmenti TCP Connection
Request (SYN=1 , ACK = 0) e Connection Accepted (SYN=1, ACK=1), FIN -> viene utilizzato per chiudere la
connessione

Apertura della connessione (3-way handshake): la specifica richiede che il numero iniziale di sequenza sia
casuale in modo da evitare che si possano scambiare segmenti relativi a due connessioni distinte con gli
stessi parametri e aperte a breve distanza di tempo, i segmenti possono essere memorizzati nella rete ma
per un tempo non superiore al Maximum Segment Lifetime (MSL) di 2 minuti, il ricevente puo’ inviare un
datagram contenente RST=1 per rifiutare la richiesta di connessione se il numero di porta di destinazione e’
inesistente

Sequence Number Wrap Around: 2^32 numeri di sequenza (4 Gb), puo’ essere un problema quando si ha
un flusso dati superiore a 4Gb che con velocita’ di trasferimento elevate e’ possibile che la numerazione si
ripeta prima dello scadere del MSL

Protection Against Wrapped Sequence (PAWS): viene utilizzata l’ opzione Timestamp che aggiunge un
ulteriore campo a 32 bit che permette di individuare l’ ordine con cui sono stati generati i pacchetti
permettendo il corretto ordinamento anche in presenza di reinizializzazione dei numeri di sequenza

Chiusura della connessione: la connessione e’ full-duplex e deve essere chiusa dai due end-point, uno dei
due host invia un segmento di FIN con il nuemero di sequenza SEQ=X e il bit FIN=1 e l’ altro invia un
ACK=X+1 per confermare la chiusura della connessione del richiedente , l’ altro host puo’ ancora inviare
dati o chiudere la connessione

ACK Ritardati: Normalmente il TCP non invia un ack istantaneamente ma ritarda l’ invio sperando di avere
anche dati da inserire nel pacchetto (ACK piggyback), il ritardo solitamente e’ di 200 ms

Regolazione del flusso di dati: viene impiegato un protocollo a finestra scorrevole (sliding window) con
dimensione variabile. Il ricevente indica la dimensione della finestra (quantita’ di dati) che puo’ gestire in un
dato momento, tale dimensione dipende dallo spazio disponibile nel buffer di ricezione, l’ evoluzione della
dimensione dipende dalla velocita’ di elaborazione dati dell’ applicativo client. La finestra dei dati
trasmissibili e’ ottenuta a partire dal numero dell’ ultimo byte ricevuto e dalla dimensione della finestra
(base-offset), il mittente puo’ continuare ad inviare dati senza attendere l’ ack fino a che non esaurisce la
finestra disponibile

Finestra scorrevole: Se il ricevente e’ saturo indica una finestra di dimensione 0 , il mittente per controllo
puo’ inviare periodicamente un segmento di un byte per forzare il destiantario a specificare il prossimo
byte atteso e l’ ampiezza della finestra (per evitare attese infinite in caso di perdita dei pacchetti)
TCP timeout e ritrasmissione: il tempo di ritrasmissione e’ dipendente dal timeout di attesa e si stima
tramite un algoritmo di stima del Round-Trip-Time (RTT -> media mobile del tempo che intercorre tra l’
invio di un pacchetto e la ricezione di un ACK)

Finestra di congestione: la dimensione della finestra di congestione e’ definita dalla rete ed adattata
dinamicamente (la finestra effettiva e’ la minima fra congestione e ricezione) , essa cresce se non scade il
timeout di trasmissione (il ricevente e’ in grado di elaborare il flusso dati) e si riduce in caso contrario (il
ricevente non risponde con ack a causa del flusso dati elevato)

User Datagram Protocol (UDP): non garantisce la consegna, implementa il controllo di integrita’ con un
codice a rilevazione di errore (checksum), se il datagram eccede la Maximum Transfer Unit (MTU) della rete
fisica esso viene frammentato a livello di rete. Tale protocollo richiede meno overhead avendo un header di
soli 8 byte, non disponendo di procedure di connesione e non prevedendo la ricezione di un ACK

Header UDP: la porta destinazione individua il processo destinatario (socket), la porta sorgente insieme all’
indirizzo IP forniscono le informazioni per ricevere un eventuale risposta, il checksum comprende un
pseudoheader contenente informazioni del livello di rete (indirizzo IP, tipo di protocollo, dimensione
datagram)

Perdita di una richiesta: l’ applicazione che invia una richiesta deve prevedere l’ eventualita’ di un errore di
tramissione o di ack di ritorno ritrasmettendo la richiesta dopo la scandenza di un timeout
Associazione richiesta-risposta: un datagram trasmesso ha un identificativo della richiesta da allegare nella
risposta, la rete non garantisce che risposte e richieste multiple arrivino nell’ ordine giusto
Controlli invio/ricezione dati: nessuna bufferizzazione (datagram inviati direttamente al livello di rete),
nessun controllo di flusso e congestione (datagram inviati alla velocita’ con cui sono generati), nessun ACK
per ogni pacchetto inviato (ack implicito quando si riceve una risposta o non necessario in caso di
applicazioni tolleranti rispetto alla perdita dati)

NETWORK-LAYER

Livello di rete: trasmissione host-to-host di pacchetti tra reti fisiche anche differenti (internetworking)
mediante indirizzamento logico globale (indirizzi IP pubblici) con l’ uso di nodi intermedi di instradamento
detti router

Internet: collezione di sottoreti interconnesse come backbone (dorsali) ad alta capacita’ e con router veloci,
reti regionali e reti locali

Internet Protocol: protocollo senza connessione best-effort per la trasmissione di datagram IP indipendenti
senza garanzia di consegna

Header IP: VERSION(specifica di versione per la intercompatibilita’), IHL(lunghezza preambolo in 32bit


words), SERVICE TYPE (tipo di servizio in termini di affidabilita’, velocita’, ritardo), TOTAL LENGTH
(lunghezza header e dati , max 64KByte), IDENTIFICATION (identificatore del datagram a cui appartiene un
frammento), FRAGMENT OFFSET (identifica il numero d’ ordine del frammento -> 13 bit), FLAGS (indica un
pacchetto non frammentabile), TIME TO LIVE (contatore per limitare la vita del pacchetto, viene
decrementato ad ogni hop su un router, quando il contatore e’ a zero si scarta il pacchetto e si notifica al
mittente), PROTOCOL(individua il protocollo di trasporto -> indipendenza porte UDP/TCP), HEADER
CHECKSUM (codice di controllo errore per l’ header, ricalcolato ad ogni hop se cambia TTL)
Indirizzamento IP: indirizzo a 32 bit che identifica univocamente un dispositivo (router o host) su rete, essi
sono assegnati dal Network Information Center (NIC) e sono composti da una porzione relativa all’ indirizzo
di rete e la restante parte per l’ indirizzamento di un host specifico sulla rete

Classi di indirizzi IP: A (1.0.0.0 – 127.255.255.255) -> grosse organizzazioni, B (128.0.0.0 – 191.255.255.255)
-> medie organizzazioni , C (192.0.0.0 – 223.255.255.255) -> piccole organizzazioni , D (224.0.0.0 –
239.255.255.255), E (240.0.0.0 – 247.255.255.255)

Dynamic Host Configuration Protocol (DHCP): protocollo di rete che usa UDP (porta 67) con modalita’
broadcast (boot : IP mittente = 0.0.0.0 , IP destinatario = 255.255.255.255)

Indirizzi privati: indirizzi locali ad una sottorete non direttamente collegati alla rete internet, la sottorete
accede alla rete internet pubblica per mezzo di un gateway che implementa il Network Address Translation
(NAT)

Network Address Translation: permette l’ accesso alla rete pubblica da una rete privata, il mapping e’ di
tipo uno-a-molti ovvero tutti gli host della rete privata vengono associati all’ indirizzo IP pubblico del router,
tale tabella richiede la modifica delle intestazioni del livello di rete (IP privato -> IP pubblico) e del livello di
trasporto (Porta privata -> Porta pubblica) e risiede nel router (possibile manual port forwarding associando
una porta well-know del router a quella di un host interno per rendere accessibile nella rete pubblica un
server web interno alla rete privata)
Subnetting: puo’ essere utile suddividere la rete in sottoreti per gestire separatamente un numero minore
di host creando una gerarchia a piu’ livelli (rete-sottorete-host)
Net Mask: si utilizza una maschera di bit a 1 nelle posizioni corrispondenti alla parte di IP riferita alla rete,
permette di verificare se un indirizzo IP destinazione appartiene alla propria sottorete calcolando l’ AND bit
a bit.

Rete di classe A: subnet mask = 255.0.0.0 , es: IP host=126.32.16.10 && SM=255.0.0.0 => 126.0.0.0 ==? My
network address

Rete di classe B: subnet mask = 255.255.0.0 , es: IP host=129.100.0.11 && SM=255.255.0.0 => 129.100.0.0
==? My network address

Rete di classe C: subnet mask = 255.255.255.0 , es: IP host=193.121.30.128 && SM=255.255.255.0 =>
193.121.30.0 ==? My network address

Sottoreti di reti standard: la sottorete e’ individuata da bit aggiuntivi nella parte di indirizzo prevista per l’
host

Sottoreti di classe C: subnet mask= 255.255.255.192, es: IP host=193.121.30.129 && SM=255.255.255.192


=> 193.121.30.128 . Maschera = 11111111 . 11111111 . 11111111 . 11000000 -> 2 bit per sottorete (4
sottoreti) e 6 bit per host (62 host per sottorete –>2 host non utilizzabili -> host 0 e 255)

Scopo del Subnet mask: permette di verificare se l’ indirizzo destinatario di un pacchetto IP appartiene alla
sottorete del mittente (consegna diretta), in caso contrario il pacchetto deve essere instradato verso il
router (default gateway -> consegna indiretta)

Consegna diretta: il destinatario e’ un host interno alla sottorete LAN del mittente, si verifica tramite la
netmask di rete e si associa a tale indirizzo IP destinatario il suo indirizzo MAC (48 bit) tramite protocollo
ARP (Address resolution Protocol)

Protocolli ARP e RARP: l’ associazione IP-MAC puo’ essere o statica (si compila una tabella con le
associazioni ip-mac, poco flessibile ed alta manutenzione) o dinamica (associazione ip-mac ricavata tramite
richiesta broadcast sulla sottorete, la macchina con quel indirizzo IP risponde fornendo il suo MAC che
verra’ inserito in una cache locale)
Consegna indiretta: la destinazione del datagram e’ un host connesso ad una rete LAN diversa da quella del
mittente, il mittente dopo aver verificato tale indirizzo esterno usa la tabella di routing per l’ instradamento

Default gateway: sull’ host puo’ essere definita una tabella di routing che specifica il gateway a cui inviare i
pacchetti per ogni specifica destinazione, di solito si specifica un default gateway che e’ l‘ IP del router della
sottorete (il pacchetto viene inviato direttamente al gateway utilizzando l’ informazione del suo MAC noto)

Instradamento Next-Hop: il router utilizza le tabelle di routing per individuare il prossimo nodo a cui inviare
il pacchetto, la tabella e’ costituita da IP sottorete di destinazione-> IP Next-Hop/consegna diretta ad un
interfaccia del router

Routing di default: permette di instradare tutti i pacchetti con destinazione diverse dalle sottoreti interne
ad una LAN verso un router di confine (tra rete privata e pubblica) Border Router

Tabella di routing: definisce il next-hop di un pacchetto da instradare, le entry sono scandite in sequenza e
si applica la prima regola verificata (Destination&&SubnetMask == entry i-esima), l’ ultima entry e’ sempre
verificata (Subnet Mask = 0.0.0.0 && Destination -> 0.0.0.0 == 0.0.0.0 ALWAYS TRUE) e instrada il pacchetto
al default gateway
Routing: noto l’ IP di destinazione si cerca nella tabella di routing per eseguire un instradamento o diretto
(host destinazione interno alla sottorete), o ad un host esterno alla sottorete specificato nella tabella, o ad
una rete esterna presente nella tabella o ad un gateway di default, si ricava quindi il next-hop (nel
pacchetto spedito compare solo l’ indirizzo di destinazione e non anche gli indirizzi dei nodi intermedi)

Traceroute: funzione per tracciare il percorso dei pacchetti verso una data destinazione mostrando i nodi
intermedi attraversati (max 30) , utilizza il campo Time To Live notificando la scadenza del pacchetto
(TIME_EXCEEDED) tramite notifica ICMP (traceroute invia 3 pacchetti sonda per ogni nodo intermedio ->
restituisce l’ IP nodo intermedio e 3 tempi di arrivo relativi a tale nodo)

Limiti indirizzamento IPv4: gli indirizzi IP si stanno esaurendo, l’ organizzazione in classi porta ad uno
spreco dato che acquisire una rete di classe B implica avere 64K indirizzi (troppi) e una rete di classe C offre
solo 256 indirizzi (pochi per molte organizzazioni). Il Classless Interdomain Routing (CIDR) definisce l’
allocazione geografica delle reti di classe C in blocchi di reti contigue

Internet Control Message Protocol (ICMP): protocollo per la generazioni di messaggi di controllo e la
gestione delle funzionalita’ del livello di rete, puo’ segnalare un errore (Destination Unreachable ->
pacchetto non consegnabile, Time Exceeded -> time to live scaduto, Parameter Problem -> errori parametri
header del messaggio spedito) da parte di un router/host di consegna o fare una richiesta (Echo
request/reply -> verificare tramite back-print se un host risponde, Timestamp Request/Reply ->
richiesta/risposta con timestamp)

Comando Ping: invia pacchetti ICMP ECHO REQUEST ad un host o gateway ed attende le risposte ICMP
ECHO REPLY, il pacchetto contiene un timestamp per misurare il round-trip time

Potrebbero piacerti anche