Middle
Parlami dello strato di trasporto (transport layer) del modello TCP/IP.
sobes.tech AI
Risposta dell'AI
Il livello di trasporto TCP/IP garantisce la comunicazione tra processi eseguiti su host diversi. Le principali funzioni:
- Identificazione di applicazioni/processi sull'host (tramite porte).
- Fornitura di servizi di consegna dati:
- Consegna affidabile e ordinata (TCP).
- Consegna non affidabile e senza garanzie (UDP).
Due protocolli principali:
- Protoccolo di Controllo della Trasmissione (TCP):
- Orientato alla connessione.
- Garantisce la consegna dei pacchetti, mantiene l'ordine, controlla il flusso e gestisce la congestione.
- Usato per applicazioni che richiedono trasmissione affidabile (HTTP, FTP, SMTP).
- Protoccolo di Datagramma Utente (UDP):
- Senza connessione.
- Non garantisce la consegna, l'ordine o il controllo del flusso.
- Bassa latenza, adatto per applicazioni sensibili al tempo dove una piccola perdita di dati è accettabile (DNS, VoIP, streaming video).
I segmenti TCP includono campi per: porte di origine/destinazione, numeri di sequenza, numeri di riconoscimento, flag (SYN, ACK, FIN), checksum.
I datagrammi UDP includono campi per: porte di origine/destinazione, lunghezza e checksum.
Porte (ports): numeri a 16 bit usati per multiplexing/demultiplexing di dati tra processi.
- Well-known ports (0-1023): Riservati per servizi standard (80 per HTTP, 443 per HTTPS, 22 per SSH).
- Registered ports (1024-49151): Usati per applicazioni private registrate presso IANA.
- Dynamic/Private ports (49152-65535): Usati dai client per connessioni in uscita.
Esempio di stabilimento di connessione TCP (Three-way Handshake):
- Il client invia un segmento con il flag SYN e un numero di sequenza iniziale.
- Il server riceve il SYN, risponde con un segmento con flag SYN e ACK, il suo numero di sequenza iniziale e un numero di riconoscimento uguale a client_seq + 1.
- Il client riceve SYN+ACK, risponde con un segmento con flag ACK e un numero di riconoscimento uguale a server_seq + 1. La connessione è stabilita.
// Esempio di struttura di intestazione TCP (semplificata)
struct tcp_header {
unsigned short src_port; // Porta di origine
unsigned short dest_port; // Porta di destinazione
unsigned int seq_num; // Numero di sequenza
unsigned int ack_num; // Numero di riconoscimento
unsigned short flags; // Flag (SYN, ACK, FIN, ecc.)
// altri campi...
};
// Esempio di struttura di intestazione UDP (semplificata)
struct udp_header {
unsigned short src_port; // Porta di origine
unsigned short dest_port; // Porta di destinazione
unsigned short length; // Lunghezza del datagramma UDP
unsigned short checksum; // Somma di controllo
};