Passa al contenuto principale

Appendice C. Verifica TCP

Questa appendice fornisce linee guida e metodi di test per verificare la correttezza delle implementazioni TCP.

Metodi di Verifica

1. Test Unitari

Parsing dell'Header:

  • Analisi corretta dei campi dell'header TCP
  • Elaborazione delle opzioni
  • Calcolo del checksum

Macchina a Stati:

  • Verifica di ogni transizione di stato
  • Test delle condizioni limite
  • Rifiuto delle transizioni di stato non valide

Numeri di Sequenza:

  • Imprevedibilità della generazione dell'ISN
  • Gestione dell'overflow dei numeri di sequenza
  • Rilevamento dei duplicati

2. Test di Integrazione

Ciclo di Vita della Connessione:

  • Stabilimento normale della connessione (handshake a tre vie)
  • Trasferimento dati
  • Chiusura normale della connessione (handshake a quattro vie)

Gestione degli Errori:

  • Simulazione di perdita di pacchetti
  • Pacchetti disordinati
  • Pacchetti duplicati
  • Checksum corrotti

3. Test di Interoperabilità

Verifica con Altre Implementazioni:

  • Interoperabilità con stack TCP principali (Linux, Windows, BSD, macOS)
  • Test in diverse condizioni di rete
  • Diverse dimensioni MTU

Rilevamento di Problemi Comuni

1. Problemi di Numero di Sequenza

Scenari di Test:

1. Verificare che lo stesso ISN non sia generato per più connessioni
2. Gestire correttamente l'overflow dei numeri di sequenza
3. Rifiutare i numeri di sequenza fuori intervallo

Metodi di Verifica:

  • Test di prevedibilità dell'ISN
  • Test di connessione a lungo termine
  • Simulazione di attacchi di numeri di sequenza malevoli

2. Errori di Checksum

Scenari di Test:

1. Tutti i segmenti inviati con checksum valido
2. Rifiutare i segmenti con checksum non valido
3. Calcolo corretto dello pseudo-header per IPv4 e IPv6

3. Gestione della Finestra

Scenari di Test:

1. Rispettare la dimensione della finestra di ricezione
2. Funzionamento corretto dello scaling della finestra (se abilitato)
3. Gestione delle situazioni di finestra zero

4. Meccanismo di Ritrasmissione

Scenari di Test:

1. Ritrasmissione dei segmenti persi
2. Calcolo appropriato del timeout (RTO)
3. Backoff esponenziale
4. Ritrasmissione veloce (dopo 3 ACK duplicati)

Verifica delle Prestazioni

1. Test di Throughput

Metriche di Misura:

  • Throughput massimo con diverse dimensioni di finestra
  • Relazione tra RTT e throughput
  • Efficienza del controllo della congestione

Ambiente di Test:

- Rete a bassa latenza (< 10ms RTT)
- Rete a latenza media (50-100ms RTT)
- Rete ad alta latenza (> 200ms RTT)
- Diversi tassi di perdita di pacchetti (0%, 0.1%, 1%, 5%)

2. Test di Latenza

Metriche di Misura:

  • Tempo di stabilimento della connessione
  • Tempo al primo byte (TTFB)
  • Latenza di consegna dei dati

3. Verifica del Controllo della Congestione

Test:

1. Comportamento dello slow start
2. Evitamento della congestione
3. Ritrasmissione veloce e recupero veloce
4. Conformità a RFC 5681

Verifica della Sicurezza

1. Test di Prevedibilità dell'ISN

Metodo:

# Pseudo-codice
isns = []
for i in range(1000):
conn = create_connection()
isns.append(get_initial_sequence_number(conn))
close(conn)

# Verificare che gli ISN siano statisticamente imprevedibili
assert is_random(isns) == True
assert entropy(isns) > MIN_ENTROPY

2. Protezione da Attacchi RST

Scenari di Test:

1. Ignorare i segmenti RST con numeri di sequenza fuori intervallo
2. Accettare solo RST nella finestra valida
3. Seguire le linee guida RFC 5961

3. Protezione da SYN Flood

Test:

1. Implementare SYN cookies o meccanismo equivalente
2. Resilienza del sistema sotto carico massiccio di richieste SYN
3. Verificare che le connessioni legittime possano essere stabilite

Test di Stress

1. Connessioni Simultanee

Test:

- Creare migliaia di connessioni simultanee
- Verificare la consegna corretta dei dati su tutte le connessioni
- Monitorare le perdite di memoria
- Misurare l'utilizzo della CPU

2. Connessioni a Lungo Termine

Test:

- Mantenere le connessioni per ore/giorni
- Verificare l'overflow dei numeri di sequenza
- Stabilità dell'utilizzo della memoria
- Assicurare l'assenza di degradazione delle prestazioni

Test delle Condizioni Limite

1. Casi Estremi

- Situazioni di finestra zero
- Dimensione massima del segmento
- Dimensione minima del segmento (1 byte)
- Frammentazione
- Cambiamenti MTU

2. Input Non Validi

- Lunghezza dell'header malformata
- Combinazioni di flag non valide
- Valori fuori intervallo
- Bit riservati impostati

Test di Conformità al Protocollo

1. Conformità RFC 9293

Elementi di Verifica:

  • Tutti i requisiti MUST sono implementati
  • I requisiti SHOULD sono implementati o documentati
  • Le deviazioni note sono chiaramente documentate

2. Conformità agli RFC Correlati

- RFC 5681: Controllo della congestione
- RFC 7323: Scaling della finestra e timestamp
- RFC 2018: SACK
- RFC 3168: ECN
- RFC 5961: Protezione da attacchi blind

Strumenti di Debug

1. Cattura dei Pacchetti

Strumenti:

- Wireshark: Ispezione dei pacchetti
- tcpdump: Cattura da riga di comando
- tshark: Analisi programmatica

2. Simulazione del Traffico

Strumenti:

- packetdrill: Scripting del comportamento TCP
- hping3: Generazione di pacchetti personalizzati
- netcat: Test di connessione di base

3. Emulazione di Rete

Strumenti:

- netem (Linux): Ritardo, perdita di pacchetti, limitazione della larghezza di banda
- dummynet (FreeBSD): Simulazione delle condizioni di rete

Rapporto di Verifica

Contenuti da Includere nel Rapporto di Test:

  1. Dettagli dell'Implementazione:

    • Versione dello stack TCP
    • Opzioni supportate
    • Limitazioni note
  2. Risultati dei Test:

    • Casi di test superati/falliti
    • Metriche di prestazioni
    • Risultati di interoperabilità
  3. Dichiarazione di Conformità:

    • Livello di conformità RFC 9293
    • Estensioni supportate
    • Deviazioni o limitazioni
  4. Problemi Noti:

    • Bug non risolti
    • Colli di bottiglia delle prestazioni
    • Problemi di compatibilità

Nota: La verifica TCP è un processo continuo. Test e aggiornamenti regolari garantiscono la robustezza e la sicurezza dell'implementazione.