Annexe C. Vérification TCP
Cette annexe fournit des directives et des méthodes de test pour vérifier l'exactitude des implémentations TCP.
Méthodes de Vérification
1. Tests Unitaires
Analyse d'En-tête:
- Analyse correcte des champs d'en-tête TCP
- Traitement des options
- Calcul de somme de contrôle
Machine d'État:
- Vérification de chaque transition d'état
- Tests de conditions aux limites
- Rejet des transitions d'état invalides
Numéros de Séquence:
- Imprévisibilité de la génération d'ISN
- Gestion du bouclage des numéros de séquence
- Détection des doublons
2. Tests d'Intégration
Cycle de Vie de Connexion:
- Établissement de connexion normal (poignée de main à trois voies)
- Transfert de données
- Fermeture de connexion normale (poignée de main à quatre voies)
Gestion des Erreurs:
- Simulation de perte de paquets
- Paquets désordonnés
- Paquets dupliqués
- Sommes de contrôle corrompues
3. Tests d'Interopérabilité
Vérification avec Autres Implémentations:
- Interopérabilité avec les principales piles TCP (Linux, Windows, BSD, macOS)
- Tests dans différentes conditions réseau
- Différentes tailles MTU
Détection des Problèmes Courants
1. Problèmes de Numéro de Séquence
Scénarios de Test:
1. Vérifier que le même ISN n'est pas généré pour plusieurs connexions
2. Gérer correctement le bouclage des numéros de séquence
3. Rejeter les numéros de séquence hors limites
Méthodes de Vérification:
- Test de prévisibilité d'ISN
- Tests de connexion longue durée
- Simulation d'attaques de numéros de séquence malveillants
2. Erreurs de Somme de Contrôle
Scénarios de Test:
1. Tous les segments envoyés avec somme de contrôle valide
2. Rejeter les segments avec somme de contrôle invalide
3. Calcul correct du pseudo-en-tête pour IPv4 et IPv6
3. Gestion de Fenêtre
Scénarios de Test:
1. Respecter la taille de fenêtre de réception
2. Fonctionnement correct de la mise à l'échelle de fenêtre (si activée)
3. Gestion des situations de fenêtre zéro
4. Mécanisme de Retransmission
Scénarios de Test:
1. Retransmission des segments perdus
2. Calcul approprié du délai d'attente (RTO)
3. Recul exponentiel
4. Retransmission rapide (après 3 ACK dupliqués)
Vérification des Performances
1. Tests de Débit
Métriques de Mesure:
- Débit maximum avec différentes tailles de fenêtre
- Relation entre RTT et débit
- Efficacité du contrôle de congestion
Environnement de Test:
- Réseau à faible latence (< 10ms RTT)
- Réseau à latence moyenne (50-100ms RTT)
- Réseau à haute latence (> 200ms RTT)
- Différents taux de perte de paquets (0%, 0.1%, 1%, 5%)
2. Tests de Latence
Métriques de Mesure:
- Temps d'établissement de connexion
- Temps jusqu'au premier byte (TTFB)
- Latence de livraison des données
3. Vérification du Contrôle de Congestion
Tests:
1. Comportement du démarrage lent
2. Évitement de congestion
3. Retransmission rapide et récupération rapide
4. Conformité à RFC 5681
Vérification de Sécurité
1. Test de Prévisibilité d'ISN
Méthode:
# Pseudo-code
isns = []
for i in range(1000):
conn = create_connection()
isns.append(get_initial_sequence_number(conn))
close(conn)
# Vérifier que les ISN sont statistiquement imprévisibles
assert is_random(isns) == True
assert entropy(isns) > MIN_ENTROPY
2. Protection contre les Attaques RST
Scénarios de Test:
1. Ignorer les segments RST avec numéros de séquence hors limites
2. Accepter uniquement les RST dans la fenêtre valide
3. Suivre les directives RFC 5961
3. Protection contre l'Inondation SYN
Tests:
1. Implémenter SYN cookies ou mécanisme équivalent
2. Résilience du système sous charge massive de requêtes SYN
3. Vérifier que les connexions légitimes peuvent être établies
Tests de Stress
1. Connexions Simultanées
Tests:
- Créer des milliers de connexions simultanées
- Vérifier la livraison correcte des données sur toutes les connexions
- Surveiller les fuites de mémoire
- Mesurer l'utilisation du CPU
2. Connexions Longue Durée
Tests:
- Maintenir les connexions pendant des heures/jours
- Vérifier le bouclage des numéros de séquence
- Stabilité de l'utilisation de la mémoire
- Assurer l'absence de dégradation des performances
Tests de Conditions aux Limites
1. Cas Limites
- Situations de fenêtre zéro
- Taille maximale de segment
- Taille minimale de segment (1 byte)
- Fragmentation
- Changements de MTU
2. Entrées Invalides
- Longueur d'en-tête malformée
- Combinaisons de drapeaux invalides
- Valeurs hors limites
- Bits réservés définis
Tests de Conformité au Protocole
1. Conformité RFC 9293
Éléments de Vérification:
- Toutes les exigences MUST sont implémentées
- Les exigences SHOULD sont implémentées ou documentées
- Les déviations connues sont clairement documentées
2. Conformité aux RFC Connexes
- RFC 5681: Contrôle de congestion
- RFC 7323: Mise à l'échelle de fenêtre et horodatages
- RFC 2018: SACK
- RFC 3168: ECN
- RFC 5961: Protection contre les attaques à l'aveugle
Outils de Débogage
1. Capture de Paquets
Outils:
- Wireshark: Inspection de paquets
- tcpdump: Capture en ligne de commande
- tshark: Analyse programmatique
2. Simulation de Trafic
Outils:
- packetdrill: Script de comportement TCP
- hping3: Génération de paquets personnalisés
- netcat: Tests de connexion de base
3. Émulation Réseau
Outils:
- netem (Linux): Délai, perte de paquets, limitation de bande passante
- dummynet (FreeBSD): Simulation de conditions réseau
Rapport de Vérification
Contenu à Inclure dans le Rapport de Test:
-
Détails d'Implémentation:
- Version de la pile TCP
- Options supportées
- Limitations connues
-
Résultats de Tests:
- Cas de test réussis/échoués
- Métriques de performance
- Résultats d'interopérabilité
-
Déclaration de Conformité:
- Niveau de conformité RFC 9293
- Extensions supportées
- Déviations ou limitations
-
Problèmes Connus:
- Bugs non résolus
- Goulots d'étranglement de performance
- Problèmes de compatibilité
Note: La vérification TCP est un processus continu. Des tests et mises à jour réguliers garantissent la robustesse et la sécurité de l'implémentation.