Internet e la famiglia dei protocolli TCP/IP
Guida ai protocolli Internet
Made in
 
DESCRIPTION Il modello ISO/OSI Live Discussion - Skill: 2- JUNIOR
Verso la fine degli anni '70 la ISO (International Standard Organization) con lo scopo di uniformare la comunicazione anche tra reti progettate da case diverse, sviluppò un modello standardizzato, chiamato modello di riferimento OSI (Open System Interconnection).
Il modello di riferimento OSI descrive il modo in cui le informazioni vengono trasferite tra gli host in rete tramite 7 livelli (layer): Application, Presentation, Session, Transport, Network, Data Link, Physical.

- Application layer (livello applicazione): è il livello più vicino all'utente e si occupa di fornire i servizi di rete (ad esempio il traferimento di file o la posta elettronica). Tra i protocolli che fanno parte di questo livello abbiamo: SMTP (Simple Mail Transfer Protocol) il quale si occupa del trasferimento dei messaggi di posta elettronica, HTTP (Hypertext Transfer Protocol) per l'interconnessione con siti web, TELNET il quale svolge le operazioni necessarie a creare una sessione con un host remoto, FTP (File Transfer Protocol) che permette il traferimento dati attraverso la rete tra due host, POP3 (Post Office Protocol v3) per il download dei messaggi di posta, IMAP (Internet Mail Access Protocol) un protocollo relativo alla posta, ma più avanzato e complesso, NNTP (Network News Transfer Protocol) che permette di leggere e scrivere informazioni su Usenet;

- Presentation layer (livello presentazione): gestisce le conversioni tra formati di dati, cioè definisce una codifica indipendente dalla macchina utilizzata allo scopo di creare un formato standard comprensibile da tutti. Se necessario, sono utilizzate anche la funzioni di compressione e crittografia;

- Session layer (livello sessione): definisce le regole per aprire e chiudere una connessione logica riguardante il trasferimento dati tramite protocolli di connessione e comunicazione. In questo layer sono svolte anche funzioni di sicurezza al fine di garatire che due host siano autorizzati a comunicare tra loro. Tra i protocolli di questo layer troviamo NFS (Network File System), RPC (Remote Procedure Call), X Window;

- Transport layer (livello trasporto): assicura la corretta trasmissione dei dati segmentando il flusso proveniente dal livello superiore in porzioni di dimensione prevista dal supporto utilizzato dalla rete. Inoltre fornisce un riscontro delle trasmissioni e nel caso in cui si verifichino errori provvede a reinviare i dati. I protocolli caratteristici di questo layer sono TCP e UDP;

- Network layer (livello rete): si occupa di trovare il percorso migliore per il trasferimento dati tra host. Suddivide i dati in pacchetti che verranno poi instradati in un determinato percorso stabilito tramite degli algoritmi che analizzano le condizioni di traffico della rete. Tra i protocolli che sono coinvolti nelle funzioni svolte da questo livello abbiamo: IP (il quale si occupa dell'instradamento dei dati) e ICMP (si occupa della gestione degli errori ed il controllo dei messaggi) e protocolli di routing quali ad esempio RIP (Routing Information Protocol), IGP (Internet Gateway Protocol), oppure OSPF (Open Shortest Path First);

- Data link layer (livello collegamento dati): provvede ad organizzare i dati in blocchi di lunghezza predefinita chiamati frame ed effettua i primi controlli sulla validità tramite CRC (Cyclic Redundancy Check). Inoltre in questo strato sono definite le tecniche di sincronizzazione cioè le modalità per evitare che siano inviati dati ad una velocità incompatibile alla capacità di acquisizione del destinatario oppure che in una trasmissione bidirezionale i due nodi trasmettano contemporaneamente. Il Data link layer è suddiviso in due sottostrati: LLC (Logical Link Control) il quale si occupa del controllo errori e lavora a con il Network layer e MAC (Media Access Control) che fornisce l'accesso al mezzo trasmissimo (il cavo) e lavora quindi a stretto contatto con il Physical layer;

- Physical layer (livello fisico): gestisce l'interazione tra il computer e il mezzo trasmissivo e si occupa della conversione tra bit e segnali.

Le informazioni che vengono scambiate da un layer all'altro sono chiamate PDU (Protocol Data Unit). I dati del livello superiore vengono incpasulati come informazioni dallo strato inferiore.
Un esempio di processo:

1. I dati utente (Es. E-mail) vengono convertiti in un formato dati trattabile via rete;
2. I dati convertiti, a loro volta vengono trasformati in segmenti, quindi spediti tramite TCP o UDP ad un host remoto;
3. I segmenti vengono quindi incapsulati in pacchetti ai quale viene aggiunto l'indirizzo di partenza e di destinazione;
4. I pacchetti sono convertiti in frame a seconda del mezzo trasmissivo;
5. I frame sono convertiti in bit ed inviati via cavo.
Processo che dal punto di vista di Layer e PDU è il seguente:
[Dati] - in Application
[Dati] - in Presentation
[Dati] - in Session
[TCP o UDP Header][Dati] - in Transport (PDU = segmenti)
[IP Header][Dati] - in Network (PDU = pacchetti)
[LLC Header][Dati] - in Data Link (LLC) (PDU = frame)
[MAC Header][Dati] - in Data Link (MAC) (PDU = frame)
[010101] - in Physical (PDU = bits)

Una volta che i dati sono giunti a destinazione il processo viene ripetuto in senso inverso. Ogni layer estrae i dati che deve elaborare estrapolandoli dal relativo PDU.

--- SOURCE http://www.cisco.com/ - Url: http://www.cisco.com/warp/public/3/it/ciscoland/approfond/osi.html Sistemi vol.3 di Garavaglia e Petracchi - Url:

DESCRIPTION Il modello TCP/IP Live Discussion - Skill: 2- JUNIOR
Il modello TCP/IP, il quale prende il nome da i due protocolli principali di Internet progettati nel 1974 da Robert E. Kahn e Vinton G. Cerf a Berkeley, descrive il processo di trasmissione dati riassumendo i 7 livelli del modello ISO/OSI.
- Application (Applicazione): rappresenta i layer Application, Presentation e Session del modello OSI. Questo livello si occupa di fornire alle applicazioni (FTP, Telnet, Mail) i servizi di rete, compresi la rappresentazione dei dati, ed il mantenimento di sessioni;
- Transport (Trasporto): rappresenta l'omonimo layer del modello OSI. Questo livello si occupa del trasporto attraverso i protocolli TCP (Transmission Control Protocol) di tipo connection-oriented e UDP (User Datagram Protocol) di tipo connectionless permettendo quindi di stabilire comunicazioni tra due host;
- Internet (Internet): rappresenta il layer Network del modello OSI. Questo livello si occupa di indirizzare, suddividere e instradare i pacchetti sulla rete. Il protocollo IP lavora in questo layer offrendo un metodo di indirizzamento ed un tipo di trasmissione connectionless;
- Network (Rete): rappresenta i layer Data Link e Phisical del modello OSI, lavora a stretto contatto con l'hardware. Questo livello si occupa di prelevare ed immetere i frame dati, diversi a seconda della tipologia di rete, sul cavo di rete e di controllarne la correttezza tramite un algoritmo CRC (cyclic redundancy check). Rispetto al modello ISO/OSI non ci sono distinzioni tra schede di rete e driver con il vantaggio di poter implementare TCP/IP su ogni tipo di rete;

Un modello organizzato in questo modo presenta diversi vantaggi, infatti un nuovo protocollo in uno qualsiasi dei layer TCP/IP deve interagire solamente con quello adiacente a livello superiore od inferiore, semplificando e conseguentemente riducendo la possibilità di errori nello sviluppo e nella gestione.

--- SOURCE http://www.bo.cnr.it/ - Url: http://www.bo.cnr.it/corsi-di-informatica/corsolinux/gs-27mag02/img5.html http://www.lithium.it/ - Url: http://www.lithium.it/articolo.asp?code=54&pag=3

DESCRIPTION Il protocollo IP Live Discussion - Skill: 2- JUNIOR
Il protocollo IP si occupa di fornire un metodo di indirizzamento logico e di gestione frammentazione/riassemblaggio per la trasmissione dati tra gli host di una rete.
Il protocollo IP, descritto nella RFC 791, nasce negli anni '70 grazie a una serie di ricerche fatte dalle università americane su richiesta del ministro della difesa, allo scopo di realizzare una rete in grado di trasportare diversi tipi di informazioni. L'IP protocol definisce una tecnica di trasmissione dati non orientata alla connessione (connectionless) e senza riscontro (non c'è garanzia che i pacchetti giungano a destinazione e nella sequenza corretta). Esso prevede che le informazioni vengano strutturate in unità chiamate datagrammi IP (IP datagram), di lunghezza massima 65535 byte, suddivise in due aree: il campo dati (data) che contiene il messaggio da inviare e l'intestazione (header) che contiene le informazioni necessarie per instradare il pacchetto.

HEADER IP
L'intestazione di un pacchetto IP è suddivisa nei seguenti campi:
Version: campo di 4 bit, descrive la versione del protocollo;
IHL: campo di 4 bit, definisce la lunghezza dell'intestazione. Il campo IHL(Internet Header Lenght) viene sottratto da Packet Lenght per determinare l'inizio dei dati;
Service Type: campo di 8 bit, che definisce le caratteristiche del servizio in Precedence (importanza del pacchetto),
Delay, Throughput, Reliability (informazioni per il trasporto, servono a determinare il percorso che il pacchetto farà);
Packet Lenght: campo di 16 bit, definisce la lunghezza totale del pacchetto (Intestazione+Dati);
Packet Fragmentation: è formato da tre campi, identification di 16 bit , flags di 3 bit e fragment offset di 13 bit i quali permettono di suddividere il pacchetto in unità più piccole quando esso deve passare attraverso una rete che prevede frame di dimensioni minori, e di essere ricostruito all'uscita dalla rete;
Time-to-live (TTL): campo di 8 bit, definisce il tempo massimo di permanenza del pacchetto nella rete, ad ogni hop (router attraversato) il suo valore diminuisce di uno, una volta riaggiunto il valore zero il pacchetto viene scartato;
Protocol: campo di 8 bit, definisce il protocollo ad alto livello utilizzato per creare il messaggio contenuto nel campo dati (TCP, UDP, ICMP ecc);
Header Checksum: campo di 16 bit, definisce un checksum per il controllo della correttezza dei dati contenuti nell'intestazione del pacchetto;
Ip Address Source: campo di 32 bit, contiene l'indirizzo IP del mittente;
Ip Address Destination: campo di 32 bit, contiene l'indirizzo IP del destinatario;
Options: campo di dimensioni variabili, è opzionale, contiene informazioni sulle operazioni che devono essere effettuate durante il percorso;
Padding: campo di dimensioni variabili, è utilizzato per far raggiungere all'area d'intestazione una dimensione di 32 bit o un suo multiplo;
Data: i dati trasportati dal protocollo.

--- LINK RFC (Internet Protocol) IP - Url: http://rfc.openskills.info/rfc/791

--- SOURCE Sistemi vol.3 di Garavaglia e Petracchi - Url:

DESCRIPTION Indirizzi IP, classi e Subnetting Live Discussion - Skill: 2- JUNIOR
L'indirizzamento IP permette di identificare ogni host all'interno di una rete TCP/IP. Grazie all'utilizzo delle classi di indirizzi ed al subnetting è possibile organizzare e gestire in modo più efficiente il proprio network.
Un indirizzo IP, chiamato anche indirizzo logico, rappresenta un identificativo software per l'interfaccia di rete sulla quale è utilizzato. In combinazione con l'indirizzo fisico (MAC) consente di determinare in modo univoco ogni interfaccia di un dispositivo di rete. Un IP Address è un numero di 32 bit suddiviso in quattro gruppi da 8 bit ciascuno, la forma con la quale viene solitamente rappresentato è detta decimale puntata (Dotted Decimal).

Essendo ogni numero rappresentato da 8 bit, può assumere un range di valori da 0 a 255. Utilizzando 32 bit per indirizzo è possibile avere 4.294.967.296 combinazioni di indirizzi differenti. In realtà esistono alcuni indirizzi particolari, di conseguenza non tutti i valori sono disponibili al fine di identificare un host nella rete.

Un esempio di Ip Address:
         Rete.         Rete.        Rete.          Host
          192.          168.              5.                2 : Rappresentazione decimale
11000000.10101000.00000101.000000010 : Rappresentazione binaria

Questo è un esempio di indirizzo (Classe C) in cui 192.168.5 identifica la rete di appartenenza dell'host 2.

INDIRIZZI SPECIALI: NETWORK, BROADCAST E LOOPBACK
Esistono alcuni particolari indirizzi di rete che non possono essere assegnati per l'identificazione di un host, tra questi abbiamo: network e broadcast e loopback:
- Network: quando i bit dell'ottetto che rappresenta l'host hanno tutti valore 0, l'indirizzo è detto di rete o Network Address: 192.168.5.0 oppure in binario 11000000.10101000.00000101.00000000;
- 0.0.0.0: quando tutti i bit hanno valore zero, identificano "questo host";
- Broadcast: quando i bit del numero che rappresenta l'host hanno tutti valore 1, l'indirizzo è detto di broadcast o broadcast address, e rappresenta tutti gli host di quella rete. Inviare un pacchetto all'indirizzo 192.168.5.255 o in forma binaria 11000000.10101000.00000101.11111111 equivale a mandare un pacchetto a tutti gli host della rete 192.168.5;
- Broadcast di rete: abbiamo questo tipo di indirizzo quando tutti i bit, sia della parte relativa all'host sia della parte relativa alla rete hanno valore 1. Inviare un pacchetto a 255.255.255.255 o in binario 11111111.11111111.11111111.11111111 significa inoltrarlo verso tutti gli host della rete corrente;
- Loopback: è utilizzato per funzioni di test del protocollo TCP/IP, non genera traffico di rete e corrisponde all'indirizzo 127.0.0.1;

CLASSI DI INDIRIZZI
Per permettere una migliore organizzazione della rete, gli indirizzi disponibili sono stati suddivisi in classi in base alle dimensioni del network da gestire. In questo modo si verrando utilizzate le classi più adatte ad alla dimensioni della rete, con conseguente minore spreco di ip address. Sono disponibili cinque classi di indirizzi IP, di cui solo le prime tre possono essere utilizzate per assegnare indirizzi agli host.

Indirizzi di classe A
Il valore del primo ottetto è compreso tra 1 e 126 (I primi otto bit di questo indirizzo saranno: 0*****).
E' rappresentata da indirizzi di tipo: Rete.Host.Host.Host ovvero 8 bit per la identificare la rete (di cui il primo fisso) e 24 per identificare gli host. Permette di ottenere 126 reti formate da 16.774.214 host ciascuna.

Indirizzi di classe B
Il valore del primo ottetto è compreso tra 128 e 191 (I primi otto bit di questo indirizzo saranno: 10*****).
E' rappresentata da indirizzi di tipo: Rete.Rete.Host.Host ovvero 16 bit per la identificare la rete(di cui i primi due fissi) e 16 per identificare gli host. E' possibile ottenere 16.384 reti formate da 65.534 host ciascuna.

Indirizzi di classe C
Il valore del primo ottetto è compreso tra 192 e 223 (I primi otto bit di questo indirizzo saranno: 110*****).
E' rappresentata da indirizzi di tipo: Rete.Rete.Rete.Host ovvero 24 bit per la identificare la rete (di cui i primi tre fissi) e 8 per identificare gli host. E' possibile ottenere 2.097.152 reti con 254 host ciascuna.

Indirizzi di classe D
Il valore del primo ottetto è compreso tra 224 e 239 (I primi otto bit di questo indirizzo saranno: 1110****).
Sono indirizzi di rete riservati ai gruppi multicast e non assegnabili ai singoli host.

Indirizzi di classe E
Il valore del primo ottetto è compreso tra 240 e 255 (I primi otto bit di questo indirizzo saranno: 1111****).
Sono indirizzi riservati per usi futuri.

LE SUBNET MASK
Per il corretto funzionamento di una rete, ogni host deve poter distiguere quale parte dell'indirizzo identifica l'host e quale la rete. Questo può avvenire grazie all'ausilio delle subnet mask (Maschere di sottorete). Per quanto riguarda le classi A B C standard, cioè non ulteriormente suddivise, esistono delle subnet di default:
- Classe A: Rete.Host.Host.Host ha come subnet 255.0.0.0;
- Classe B: Rete.Rete.Host.Host ha come subnet 255.255.0.0;
- Classe C: Rete.Rete.Rete.Host ha come subnet 255.255.255.0;

Il processo di messa in AND
Per determinare se il destinatario dei propri pacchetti si trova sulla propria sottorete ogni host utilizza la propria maschera di sottorete durante un processo chiamato di messa in AND (ANDing process). Questo processo consiste nel confrontare il risultato dell'operazione di AND (matematica booleana) bit a bit tra il proprio indirizzo e la propria maschera subnet mask con quello tra l'indirizzo del destinatario e la propria subnet mask.

Avendo un Host A con IP 192.168.0.5 con subnet 255.255.255.0 che vuole inviare dei pacchetti ad un Host B 192.168.0.5 con subnet 255.255.255.0, esso deve determinare se B è sulla stessa sua sottorete:

Host A: 192.168.0.5
11000000.10101000.00000101.000000010 : Ip address Host A
11111111.11111111.11111111.000000000 : Subnet mask Host A

11000000.10101000.00000101.000000000 : Risultato operazione AND bit a bit

Host B: 192.168.0.25
11000000.10101000.00000101.000011001 : Ip address Host B
11000000.10101000.00000101.000000010 : Subnet mask Host B

11000000.10101000.00000101.000000000 : Risultato operazione AND bit a bit

Il risultato è identico, quindi, i due host possono inviarsi direttamente i pacchetti in quanto sulla stessa sottorete. Qualora il processo di AND avesse evidenziato valori diversi, i due host non avrebbero potuto comunicare direttamente, ma sarebbe stato necessario un router tra di essi.

NOTAZIONI
Esistono due principali notazioni attraverso le quali è possibile indicare un indirizzo IP:
- Indicando espressamente la subnet mask:
  49.22.5.3 255.0.0.0 - Classe A;
  172.16.20.5 255.255.0.0 - Classe B;
  192.168.15.4 255.255.255.0 - Classe C;
- Indicando i bit che compongono la subnet mask:
  49.22.5.3/8 - Classe A;
  172.16.20.5/16 - Classe B;
  192.168.15.4/24 - Classe C;

SUBNETTING
L'utilizzo della classe di rete corrispondente alle dimensioni che più si avvicinano a quella che si vuole gestire a volte non è sufficiente. Può essere necessario, dover suddividere la rete in ulteriori sottoreti. Per fare questo è possibile utilizzare la tecnica del subnetting.
Il subnetting di una rete comporta diversi vantaggi:
- Minor spreco di indirizzi: in quanto è possibile scegliere il numero di host che faranno parte della sottorete;
- Riduzione del traffico di rete: in quanto si riduce il dominio di collisione (broadcast domain);
- Miglioramento delle performance della rete: in conseguenza della riduzione del traffico;

Il subnetting consiste nell'utilizzare alcuni bit "presi in prestito" (borrowed) dalla parte host dell'indirizzo di rete. E' possibile procedere alla suddivisione della rete in sottoreti più piccole tramite lo scheda seguente:
- Determinare il numero di sottoreti necessarie.
E' necessario tenere presente che il numero di subnet che si possono creare è dato da 2^x-2 dove x è rappresentato dai bit presi in prestito dalla parte host dell'indirizzo ai quali naturalmente bisogna levare l'indirizzo di broadcast quello di rete non assegnabili. Esempio: utilizzando prendendo in prestito 4 bit, sarà possibile creare 14 sottoreti;
- Determinare il numero di host per ogni sottorete.
Questo valore è dato da 2^y-2 dove y è il numero di bit rimasti per la rappresentazione degli host; Esempio: se i bit rimanenti sono 6 si potranno avere sottoreti formate da 62 host l'una;
- Determinare le subnet valide.
Questo valore è dato da 256-z, dove 256 dove z rappresenta il valore della subnetmask. Esempio: con una subnetmask di valore 224 avremmo avuto 256-224=32. Questo valore è il valore della prima subnet valida ed è anche la base per le successive, la cui progressione sarà: 32, 64, 96, 128, 160, 192;
- Determinare gli host validi.
Sono rappresentati da tutti i valori compresi tra le subnet create togliendo gli indirizzi di broadcast e network;
- Determinare degli indirizzi di broadcast e network delle subnet.
Sono gli indirizzi in cui rispettivamente i bit della parte host sono settati a 1(broadcast) e a 0(network);

ESEMPIO SUBNETTING DI UNA RETE DI CLASSE C
Esaminiamo il caso di una rete con IP 192.168.5.0 che da suddividere in due sottoreti.
- Deteriminare il numero di sottoreti necessarie.
Volendo creare 2 sottoreti è necessario utilizzare 2 bit dalla parte host in quanto 2^2-2 = 2. Avremmo quindi una subnetmask di questo tipo 255.255.255.192. E' possibile notare che in binario 192 equivale a 11000000, i primi due bit vengono utilizzati per le subnet ed i restanti 6 per gli host;
- Determinare il numero di host per ogni sottorete.
I bit rimasti per gli host sono 6 quindi, abbiamo 2^6-2=62 indirizzi di host validi per sottorete;
- Determinare le subnet valide.
Le subnet che si andranno a creare sono due con base data da 256-192=64. Questo significa che la progressione delle subnet valide sarà 64 e 128 ovvero 192.168.5.64 e 192.168.5.128.
- Determinare gli host validi.
Gli host validi sono rappresentati dai valori compresi tra le subnet esclusi gli indirizzi di broadcast e di network. Avremo quindi gli indirizzi da 192.168.5.65 a 192.168.5.126 per la prima subnet e 192.168.5.129 a 192.168.5.190 per la seconda;
- Determinare gli indirizzi di broadcast e network delle subnet.
Gli indirizzi di rete (bit della parte host settati a zero) saranno 192.168.5.64 per la prima subnet e 192.168.5.128 per la seconda, mentre gli indirizzi di broadcast (bit parte host settati a 1) saranno rispettivamente 192.168.5.127 e 192.168.5.191.

Tabella di riepilogo
Rete di partenza: 192.168.5.0 255.255.255.0 suddivisa in due sottoreti tramite la subnet 255.255.255.192:
Subnet 1: 192.168.5.64 in binario 11000000.10101000.00000101.01000000
Primo indirizzo valido: 192.168.5.65 in binario 11000000.10101000.00000101.01000001
Ultimo indirizzo valido: 192.168.5.126 in binario 11000000.10101000.00000101.01111110
Broadcast: 192.168.5.127 in binario 11000000.10101000.00000101.01111111
Subnet 2: 192.168.5.128 in binario 11000000.10101000.00000101.10000000
Primo indirizzo valido: 192.168.5.129 in binario 11000000.10101000.00000101.10000001
Ultimo indirizzo valido: 192.168.5.190 in binario 11000000.10101000.00000101.10111110
Broadcast: 192.168.5.191 in binario 11000000.10101000.00000101.10111111

Questo procedimento è lo stesso da applicare anche per il subnetting delle classi A e B, con la differenza di poter creare un maggior numero di subnet.


INDIRIZZI IP PRIVATI
Sono stati definite alcune classi di indirizzi, definiti nella RFC 1918, chiamati privati, per le reti locali che non accedono ad internet:
Da 10.0.0.0.0 a 10.255.255.255.255
Da 172.16.0.0 a 172.31.255.255
Da 192.168.0.0 a 192.168.255.255

Questi indirizzi non possono essere utilizzati in Internet, e sono riservati per utilizzi in reti interne. Qualora però un host all'interno di un lan si connetta ad internet il suo indirizzo verrà riscritto tramite NAT (Network Address Traslation) da un router od una macchina che fa da gateway verso Internet.


DESCRIPTION Porte & Socket Live Discussion - Skill: 2- JUNIOR
Le porte ed i socket permettono di individuare e gestire quali sono gli host in comunicazione tra loro e tramite quale protocollo.
LE PORTE
Ogni processo locale che comunica con uno remoto viene identificato in una connessione TCP/IP tramite una porta.
Una porta è rappresentata, all'interno di un pacchetto TCP o UDP, da un campo a 16 bit che può assumere un valore tra 0 e 65535.

E' possibile suddivere i tipi di porte in tre categorie:
Well Known Ports: il cui valore va da 0 a 1023 sono assegnate a specifici protocolli dalla Internet Assigned Number Authority (IANA);
Registered Ports: il cui valore va da 49151, sono registrate a nome delle società che hanno sviluppato specifiche applicazioni;
Dynamic and/or Private Ports: il cui valore va da 49152 a 65535, non sono gestite da nessun organo di controllo, e vengono assegnate dinamicamenete, dal sistema operativo, quando un client si connette ad un host remoto;

I SOCKET
La combinazione tra indirizzo IP, protocollo di trasporto e numero di porta prende il nome di Socket. Le condizioni per instaurare una connessione TCP sono due:
- apertura passiva lato server, la quale indica al sistema operativo su quale porta vengono accettate le connessioni;
- apertura attiva lato client, che richiede al sistema operativo l'assegnamento di una porta per connettersi all'host remoto;

WELL KNOWN PORTS
Sebbene generalmente un'applicazione utilizzi solamente un protocollo tra TCP e UDP, vi sono dei casi come per esempio il protocollo DNS o altri in cui vengono utilizzati entrambi i protocolli. In quest'ultimo caso si avrà il medesimo numero di sia per quanto riguarda TCP che per quanto riguarda UDP. Di seguito alcune tra le Well Known Port (porte note) più comuni:

Porte TCP
  7 ECHO - Servizio Echo;
 20 FTP DATA - File Transfer Protocol Dati;
 21 FTP - File Transfer Protocol Controllo;
 22 SSH - Secure Shell Remote Login Protocol
 23 TELNET - Telnet Protocol;
 25 SNMP - Simple Network Management Protocol;
 53 DNS - Server dei nomi di dominio;
 67 BOOTPS - (Dhcp) Bootstrap Protocol Server;
 68 BOOTPC - (Dhcp) Bootstrap Protocol Client;
 80 HTTP - Hypertext Transmission Protocol;
110 POP3 - Post Office Protocol 3;
111 SUNRPC - Sun RPC Portmap;
113 AUTH - Servizio autenticazione;
119 NNTP - Network News Transfer Protocol;
137 NETBIOS-NS - NETBIOS Name Service
138 NETBIOS-DGM - NETBIOS Datagram Service
139 NETBIOS-SSN - NETBIOS Session Service
143 IMAP - Internet Mail Access Protocol;
389 LDAP - Lightweight Directory Access Protocol;
443 HTTPS - http protocol over TLS/SSL;
515 PRINTER - Spooler;

Porte UDP
  7 ECHO - Servizio Echo;
 53 DNS - Server dei nomi di dominio;
 67 BOOTPS - (Dhcp) Bootstrap Protocol Server;
 68 BOOTPC - (Dhcp) Bootstrap Protocol Client;
 69 TFTP - Trivial File Transfer Protocol;
111 SUNRPC - Sun RPC Portmap;
123 NTP- Network Time Protocol;
137 NETBIOS-NS - NETBIOS Name Service;
138 NETBIOS-DGM - NETBIOS Datagram Service;
139 NETBIOS-SSN - NETBIOS Session Service;
161 SNMP - Simple Network Management Protocol (SNMP);
162 SNMP - TRAP Simple Network Management Protocol Trap;
515 PRINTER - Spooler;

--- LINK Iana assignments port numbers - Url: http://www.iana.org/assignments/port-numbers


DESCRIPTION Il protocollo UDP Live Discussion - Skill: 2- JUNIOR
E' un protocollo di trasporto di tipo connectionless, per la trasmissione dati tra due host.
UDP (User Datagram Protocol) viene descritto nella RFC 768. E' un protocollo non orientato alla connessione, utilizzato quando l'affidabilità, il cui controllo viene richiesto ai protocolli applicativi che ne fanno uso, non è il target primario. I vantaggi nell'utilizzo di UDP sono infatti la velocità, e la minore congestione di rete rispetto a TCP (non ci sono pacchetti di conferma) e la possibilità di trasmettere in multicast (invio di un pacchetto ad un gruppo di host) e broadcast (invio di un pacchetto a tutti gli host di un segmento di rete).

HEADER UDP
Il formato di un pacchetto UDP non è molto complesso e comprende i seguenti campi:
Source Port: campo di 16 bit (facoltativo), contiene la porta UDP di origine dell'host sorgente;
Destination Port: campo di 16 bit, contiene la porta UDP di destinazione del pacchetto sull'host remoto;
Lenght: campo di 16 bit, contiene la lunghezza in byte dell'intestazione UDP e dei dati;
Checksum: campo di 16 bit, è utilizzato per verificare l'integrità dei dati trasportati;
Data: campo di lunghezza variabile contenente i dati;

TRASMISSIONE UDP
La trasmissione di un pacchetto UDP avviene incapsulandolo all'interno di un pacchetto IP. Giunto a destinazione, il pacchetto viene inviato alla porta di destinazione indicata nell'intestazione UDP. Qualora la porta non fosse disponibile, viene inviato un paccheto ICMP (Internet Control Message Protocol) all'host mittente con messaggio di port unreachable (porta irraggiungibile).

Attraverso un network sniffer è possibile visualizzare i vari campi di un pacchetto UDP. Un esempio:
Source IP: 192.168.0.97 Target IP: 195.130.224.18 UDP Length: 27
Essendo UDP incapsulato in IP vediamo prima l'intestazione IP con gli indirizzi sorgente e destinazione e la dimensione
Source Port: 33997 Target Port: 53 Leng: 35 ChkSum: 2342
Nell'header UDP troviamo la porta sorgente (33997) e la porta destinazione (53 - richiesta DNS) la dimensione (35) ed il checksum (2342)
00000000: 1A B4 01 00 00 01 00 00 00 00 00 00 09 6C 6F 63
...

Infine troviamo il campo dati

UDP viene utilizzato da protocolli come TFTP (Trivial File Transfer Protocol), SNMP (Simple Network Managment Protocol), DNS (Domain Name Server), per l'invio di stream audio, ed è ampiamente usato nelle applicazioni videoludiche.

--- LINK RFC UDP - Url: http://rfc.openskills.info/rfc/768


DESCRIPTION Il protocollo TCP Live Discussion - Skill: 2- JUNIOR
E' un protocollo di trasporto di tipo connection-oriented per la trasmissione dati tra due host.
Il protocollo TCP ha il compito di fornire alle applicazioni un servizio affidabile per il trasferimento dei dati attraverso la rete. Questo protocollo offre un servizio orientato alla connessione (connection-oriented), esso garantisce la consegna e l'ordinamento corretto dei dati grazie all'utilizzo di sequence number e conferme di consegna. Tra gli host impegnati nella comunicazione viene simulato un colloquio diretto attraverso un canale che consente lo scambio interattivo delle informazioni (full-duplex). I dati vengono presentati e ricevuti da TCP ai protocolli superiori come un'unica sequenza (byte-stream). In questo modo è il TCP ad occuparsi di segmentarli lasciando ai protocolli superiori solo il compito di prepararli. Le informazioni contenute in un segmento sono suddivise in due parti: l'intestazione (header) e i dati (data). Il Transmission Control Protocol è utilizzato da diversi protocolli a livello applicativo quali FTP, Telnet, SMTP, POP3 ed altri.

HEADER TCP
L'intestazione di un pacchetto TCP è formata dai seguenti campi:
Source Port: campo di 16 bit, contiene il numero porta utilizzata dall'host mittente;
Destination Port: campo di 16 bit, contiene il numero della porta utilizzata dall'host destinatario;
Sequence Number: campo di 32 bit, definisce l'ordine in cui i segmenti devono essere riassemblati. E' utilizzato anche nella fase di connessione (handshake);
Acknowledgment Number: campo di 16 bit, contiene il prossimo numero di sequenza che l'host destinatario si aspetta di ricevere dall'host mittente. Esprime il numero di segmenti ricevuti correttamente fino a quel momento;
Data Offset: campo di 4 bit, definisce la lunghezza in parole a 32 bit dell'intestazione TCP. Indica dove inziano i dati;
Reserved: campo di 6 bit, riservato per futuri utilizzi;
Urgent Controlo Bit: campo di 6 bit, contiene a sua volta 6 flag da un bit:
 - URG se è attivo indica che il campo Urgent Pointer è significativo e deve essere letto;
 - ACK se attivo indica che il campo Acknowledgement Number è significativo è deve essere letto;
 - PSH se attivo significa che il pacchetto deve essere inviato immediatamente, invece di attendere il riempimento del buffer;
 - RST viene utilizzato per indicare che la connessione deve essere reinizializzata, solitamente a seguito di problemi;
 - SYN viene utilizzato per stabilire una sessione, indica al destinatario di leggere il campo Sequence number e sincronizzare il proprio con esso;
 - FIN indica che l'host mittente non ha più dati da spedire, e vuole terminare la connessione;
Windows Size: campo di 16 bit, contiene la dimensione del buffer di dati che il mittente può accettare;
Checksum: campo di 16 bit, stabilisce la correttezza delle informazioni (Intestazione+Dati);
Urgent Pointer: campo di 16 bit, indica quale porzione dati è urgente;
Options: campo di dimensione varabile, contiene le opzioni per la comunicazione;
Padding: campo di dimensioni variabili, è utilizzato per far raggiungere all'area d'intestazione una dimensione di 32 bit o un suo multiplo;
Data: i dati trasportati dal protocollo;

I FLAG TCP
Durante una sessione TCP è di fondamentale importanza lo stato dei flag del campo Urgent Control Bit che possono assumere combinazioni differenti:
SYN: è presente nel primo pacchetto di un host che intende stabilire la connessione con un altro;
SYN | ACK: è la risposta di un host contattato che accetta la connessione;
ACK: a connessione stabilita ogni pacchetto è confermato tramite i flag ACK attivo;
FIN: è inviato da un host che intende chiudere una sessione;
FIN | ACK: è la risposta di un host che conferma la chiusura di una connessione;
RST: viene inviato da un host che riceve un pacchetto inatteso e che quindi non accetta la connessione;

STATI DI UNA SESSIONE TCP
Una sessione TCP attraversa diversi stati in seguito al verificarsi di determinati eventi:
LISTEN: host in attesa di connessione;

SYN-SENT: host che ha inviato una richiesta di connessione ed è in attesa di risposta;
SYN-RECEIVED: host in attesa di conferma per la richiesta di connessione dopo aver ricevuto ed inviato una richiesta di conferma;
ESTABLISHED: host con una connessione aperta durante la quale i dati sono inviati e ricevuti;
FIN-WAIT1: host in attesa di una richiesta di termine della sessione o di conferma di richiesta di termine della connessione;
FIN-WAIT2: host in attesa di una richiesta di termine della sessione da parte di un host remoto;
CLOSE-WAIT: host in attesa di terminare la sessione;
CLOSING: host in attesa della conferma della richiesta di termine di connessione;
LAST-ACK: host in attesa della conferma dellle richiesta di termine della connessione già inviata all'host remoto;
TIME-WAIT: host in attesa (per un determinato lasso di tempo) per garantire che l'host remoto abbia ricevuto la conferma della richiesta di termine della connessione;
CLOSED: non esiste connessione tra host;

SESSIONE TCP
Il presupposto per instaurare una connessione è l'esistenza di un server con un socket attivo in stato di listen (apertura passiva). Inizialmente il client ed il server sono in stato closed. Successivamente una sessione TCP attraversa i seguenti passaggi:
- Instaurazione della connessione
1. Il client esegue una procedura chiamata apertura attiva creando un socket, ed inviando un segmento TCP con il flag SYN (synchronize) settato ed un sequence number (random) seq=x;
[Host A (Stato Syn Sent)] SEQ=100 SYN --> [Host B (Stato LISTEN)]
2. Il server risponde con il flag SYN e ACK (risposta di conferma) attivi, inviando un sequence number settato a seq=y e ACK x+1 oppure se non accetta la connessione risponde inviando un pacchetto con flag RST attivo;

[Host A (Stato ESTABLISHED)] <-- SEQ=300 ACK=101 SYN,ACK [Host B (Stato Syn Received)]
3. Il client riceve il segmento dal server e ne invia uno con il flag ACK settato: ACK x+1. Durante questa fase gli host impostano la dimensione massima del buffer di trasmissione (Window Size). La procedura three-way handshake è terminata ed inizia il trasferimento dati;
[Host A (Stato ESTABLISHED)] SEQ=101 ACK=301 ACK --> [Host B (Stato ESTABLISHED)]
- Scambio dati
4. I Dati vengono scambiati tra i due host.
[Host A (Stato ESTABLISHED)] SEQ=101 ACK=301 ACK (Dati) --> [Host B (Stato ESTABLISHED)]
- Termine della connessione
5. Per rilasciare la connessione il client invia un segmento contenente il flag FIN settato;
[Host A (Stato FIN-WAIT-1)] SEQ=500 ACK=700 FIN,ACK --> [Host B (Stato CLOSE-WAIT)]
6. Il server lo riceve e invia un segmento di conferma con il successivo numero sequenziale atteso ACK y+1;
[Host A (Stato FIN-WAIT-2)] <-- SEQ=700 ACK=501 ACK [Host B (Stato CLOSE-WAIT)]
7. Il server invia la richiesta di fine connessione e la conferma con il flag FIN;
[Host A (Stato TIME-WAIT)] <-- SEQ=700 ACK=501 FIN,ACK [Host B (Stato LAST-ACK)]
8. Il client conferma la ricezione, ed il server chiude la connessione;
[Host A (Stato TIME-WAIT)] SEQ=501 ACK=701 ACK --> [Host B (Stato CLOSED]
9. La connessione viene chiusa anche dal lato client;
[Host A (Stato CLOSED)]

FINESTRE SCORREVOLI e TIMEOUT
Il meccanismo delle finestre scorrevoli (Sliding Windows) viene utilizzato dal TCP/IP per migliorare le performance di una trasmissione. La dimensione della finestra di trasmissione, contenuto nel campo Windows Size, viene scambiata tra i due host nella fase di handshaking (può comunque variare in seguito durante la sessione).
Questa dimensione indica il numero massimo di segmenti che si possono inviare ogni volta. Il meccanismo dei timeout permette invece di rispedire un pacchetto, qualora scaduto un determinato periodo di tempo (timeout appunto) non sia stata ricevuta la conferma da parte dell'host remoto.

Poniamo che a seguito dell'handshake si abbia una finestra di partenza di 6 segmenti:
1. L'host mittente invia i 6 segmenti al all'host destinatario.
Host A [(1)(2)(3)(4)(5)(6)]7 8 9 10 11 12 - Host B [ ]
Host A (1)(2)(3)(4)(5)(6) --> Host B
2. Se l'host destinatario riceve solamente i segmenti 1 e 2, invia una conferma indicando che si aspetta il segmento 3, inidicando quindi che i segementi 1 e 2 sono stati ricevuti. A questo punto la finestra si sposta di due segmenti in modo da poter trasmettere i segmenti 7 ed 8.
Se non viene confermata la ricezione dei segmenti da 3 a 6 inviati precedentemente, il timer di ritrasmissione raggiunge lo zero e vengono quindi rispediti ma con il tempo di timeout raddoppiato.
Host A 1 2 [(3)(4)(5)(6)(7)(8)] 9 10 11 12 - 1 2 [ ]
Host A (7)(8) --> Host B
3. L'host destinatario invia un pacchetto di conferma in cui si aspetta di ricevere il segmento 8, indicando quindi di aver ricevuto i segmenti fino al 7. La finestra a questo punto scorre oltre il segmento 7, e si devono inviare i segmenti da 8 a 12 e cosi via.
Host A 1 2 3 4 5 6 7 [(8)(9)(10)(11)(12)] - Host B 1 2 3 4 5 6 7 []
Host A (8)(9)(10)(11)(12) --> Host B

Grazie a queste tecniche si ha un miglioramento delle prestazioni in quanto, l'host destinatario può inviare le conferme di ricezione di più segmenti (contigui) contemporaneamente riducendo quindi il traffico di rete. Naturalmente una finestra troppo grande potrebbe portare a perdere troppi segmenti e quindi a peggiorare la trasmissione.

--- LINK RFC TCP - Url: http://rfc.openskills.info/rfc/793

--- SOURCE www.eventhelix.com - Url: Sistemi vol.3 di Garavaglia e Petracchi - Url:

TIPS Request For Comments (RFC) Live Discussion - Skill: 2- JUNIOR
Ogni standard riguardante la suite di protocolli TCP/IP viene pubblicato sotto forma di Request For Comments, un documento che ne illustra le specifiche tecniche.
Le Request For Comments, meglio conosciute come RFC, sono mantenute dalla IAB (Internet Architecture Board) e pubblicate al fine di far conoscere, studiare e migliorare (commentare) le specifiche riguardanti la suite TCP/IP. E' bene ricordare che nonostante gli standard TCP/IP vengano pubblicati sotto forma di RFC non tutte le RFC rapprentano degli standard. A volte infatti, si tratta di specifiche in corso di studio o di test che in alcuni casi diventano standard in altri vengono scartate.

I test delle RFC non hanno un formato predefinito, possono essere redatte da chiunque intenda proporre una specifica riguardante TCP/IP e successivamente verrano vagliate da una commissione tecnica quale IETF (Internet Engineering Task Force) oppure IRTF (Internet Research Task Force). Come nota di cronaca, è necessario dire che state pubblicate anche RFC ironiche.

Una volta vagliata una RFC viene classificata:
- Required: obbligatorio implementarle su tutti gli host ed i gateway TCP/IP;
- Recommended: non sono obbiglatorie ma è raccomandato implementarle su ogni host e gateway;
- Elective: non è obbligatorio implementarla, anche se è completamente definita;
- Limited use: non è destinata ad un impiego generale;
- Not Recomended: si consiglia di non implementarla;

Prima di diventare standard, una RFC passa attraverso un processo chiamato di "maturazione":
Internet Standard: RFC che ha acquisito la necessaria maturità tecnica;
Draft Standard: implementazione base per lo sviluppo dello standard finale, in questa fase sono richiesti soprattutto test e commenti;
Proposed Standard: protocolli destinati a diventare standard previo processo e sperimentazione ulteriore;
Experimental Protocol: protocolli non destinati ad un utilizzo operativo ma destinati alla sperimentazione;
Informational Protocol: protocolli sviluppati da rivenditori od organizzazioni autorevoli al di fuori degli organi ufficiali Internet;
Historic Protocol: si tratta di protocolli abbandonati o diventati obsoleti che difficilmente diverrano standard;

Ogni RFC pubblicata riceve un numero di documento, in caso di aggiornamento verrà pubblicata una nuova RFC alla quale verrà assegnato anche un nuovo numero identificativo.

--- SOURCE TCP/IP - Guida Completa di Brian Komar - Ed. Apogeo - ISBN 88-7303-498-5 - Url:

  Openskills LiveBook: Guida ai protocolli Internet | (C)oresis Srl | GNU FDL licence Generated: 23/10/2003