three-way-handshake

This commit is contained in:
dado
2025-05-27 22:01:07 +02:00
parent 71784b4ea2
commit aa2a34d3fc
2 changed files with 33 additions and 0 deletions

View File

@ -42,3 +42,36 @@ Il controllo del flusso in TCP viene realizzato tramite il meccanismo delle *fin
- La `Receive Window` (finestra di ricezione) impostata dal destinatario indica quanti byte è in grado di accogliere - La `Receive Window` (finestra di ricezione) impostata dal destinatario indica quanti byte è in grado di accogliere
- Il mittente regola la quantità di dati inviati in base a questo valore (`Send Window`), garantendo che il destinatario non venga sopraffatto. La dimensione della finestra di invio può essere dinamica e viene regolata in base alla capacità di ricezione del destinatario e alle condizioni della rete. - Il mittente regola la quantità di dati inviati in base a questo valore (`Send Window`), garantendo che il destinatario non venga sopraffatto. La dimensione della finestra di invio può essere dinamica e viene regolata in base alla capacità di ricezione del destinatario e alle condizioni della rete.
- A livello di invio, la `congestion window` può ulteriormente limitare il flusso in base alle condizioni di rete - A livello di invio, la `congestion window` può ulteriormente limitare il flusso in base alle condizioni di rete
## Apertura della Connessione TCP
Il processo di apertura di una connessione TCP prevede l'esecuzione del `three-way handshake`, che si compone di tre fasi fondamentali: `SYN`, `SYN/ACK` e `ACK`. Prima di poter trasmettere dati, entrambe le parti devono stabilire un canale di comunicazione; di solito una delle due attiva la richiesta di connessione.
La comunicazione TCP è *full-duplex*, cioè entrambi gli host possono inviare e ricevere dati simultaneamente. Ogni host gestisce indipendentemente la propria finestra di invio e quella di ricezione.
![three-way-handshake](asset/img/three-way-handshake.png)
### 1. Inizializzazione (SYN)
- **Host A**:
- Invia un segmento TCP (chiamato `segmento SYN`) rivolto a B
- Il segmento contiene un numero di sequenza iniziale (ISN), ad esempio 1001, che identifica il primo byte del segmento TCP trasmesso
- Viene impostata la flag `SYN` per indicare l'intenzione di stabilire una connessione
### 2. Risposta (SYN/ACK)
- **Host B**:
- Ricevendo il segmento `SYN` di A, decide di rispondere.
- B genera il proprio numero di sequenza iniziale `ISN`, ad esempio 2001
- Invia a A un segmento contenente il numero di sequenza (ISN) impostato ad esempio a 2001, con la flag `SYN` attiva
- La flag `ACK` attiva per confermare di aver ricevuto il segmento inviato da A
- Il campo `ACK number` viene impostato al valore 2001 (ISN di A + 1), supponendo che il SEQ di A fosse 1001, e che il segmento TCP di A fosse di 1000 byte (ISN di A + lunghezza dati + 1)
- Inoltre, B indica il valore della sua `Receive Window`, che servirà ad A per regolarsi nella trasmissione dei dati
### 3. Conferma (ACK)
- **Host A**:
- Riceve il segmento `SYN/ACK da B
- In risposta, invia un segmento TCP con il numero di `SEQ` impostato al valore atteso da B (2001)
- Flag `ACK` attiva e il relativo valore di `ACK number` adeguato, ad esempio 3001, qualora B avesse incluso 1000 byte nel suo segmento (ISN di B + lunghezza dati + 1)
- Un campo `Receive Window` che indica ad B la quantità di dati che A è pronta a ricevere

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB