Sobes.tech
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):

  1. Il client invia un segmento con il flag SYN e un numero di sequenza iniziale.
  2. 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.
  3. 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
};