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:
-
Dettagli dell'Implementazione:
- Versione dello stack TCP
- Opzioni supportate
- Limitazioni note
-
Risultati dei Test:
- Casi di test superati/falliti
- Metriche di prestazioni
- Risultati di interoperabilità
-
Dichiarazione di Conformità:
- Livello di conformità RFC 9293
- Estensioni supportate
- Deviazioni o limitazioni
-
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.