Previous Contents

6   Améliorations possibles

Voici quelques améliorations possibles à apporter à la pile TCP/IP.

6.1   Configuration de l'interface virtuelle

Ecrire une fonction dans le fichier stack.c permettant de configurer l'interface Ethernet virtuelle en utilisant la primitive ioctl ainsi que les requêtes SIOCSIFADDR et SIOCGIFFLAGS. Ajoutez un champ dans la table des interfaces pour spécifier l'adresse de l'interface virtuelle correspondante et appelez votre fonction dans stackInitializeDevices.

6.2   Gérer les options IPv4

Analyser les options IPv4 dans les fonctions ipDecodePacket et ipSendPacket. Tester la bonne gestion de l'option d'enregistrement de route avec l'utilitaire ping et l'option -R.

6.3   Gérer la défragmentation IPv4

Gérer les fragments IP dans la fonction ipDecodePacket. Créer une structure pour les paquets IP fragmentés comprenant principalement le paquet IP en défragmentation et une carte des données déjà reçues. Lors de la réception d'un fragment aller mettre les données reçues dans le paquet en reconstruction, éventuellement en réallouant l'espace réservé si le nouveau fragment est en dehors du paquet courant. Sur réception du dernier fragment mettre à jour le champs taille du paquet. Enfin quand la carte des données reçues montre que le paquet est complet, le traiter comme un paquet IP classique. Vérifier le bon fonctionnement de la défragmentation en utilisant ping avec une taille de paquet dépassant la taille d'un paquet Ethernet.

6.4   Gérer la fragmentation IPv4

Gérer les fragments IP dans la fonction ipSendPacket. Quand on s'aperçoit que la taille des données IP dépasse la taille permettant d'envoyer un seul paquet Ethernet, découper les données pour envoyer des fragments IP. Vérifier le bon fonctionnement de cette fragmentation en envoyant un datagramme UDP de votre pile vers un serveur UDP de la machine de TP (le serveur étant réalisé par nc avec les options -l et -u).

6.5   Gérer une option TCP

Il existe de nombreuses options TCP qu'il est intéressant d'implanter. Un premier exemple est l'option d'estampille de temps qui permettrait de calculer des temps d'aller-retour pour mettre à jour la valeur des délais pour les minuteurs de ré-émission. Un second exemple est l'option d'accusé de réception sélectif pour accuser réception de données hors séquence. Cette dernière option nécessite de modifier la gestion des paquets TCP en ajoutant un tampon de données reçues pour chaque connexion TCP.

6.6   Eviter l'accumulation de paquets TCP en souffrance

Si un processus TCP génère un flux constant de paquets TCP et que le correspondant n'accuse pas réception, les paquets vont être stockés sous forme de sélecteurs. Il est possible de saturer la mémoire de la pile de cette façon. Implantez un mécanisme permettant de refuser l'envoi d'un paquet TCP si trop de données TCP sont accumulées. Trouvez aussi un protocole pour que les processus TCP puissent gérer ce bloquage. Une piste est l'appel du processus TCP avec un type particulier lorsque la pile s'aperçoit que les données TCP finissent par être accusées par le correspondant.

6.7   Processus TCP serveur web

Ecrire un processus TCP réalisant un serveur HTTP. Prévoir un système de stockage des pages en mémoire et/ou sur système de fichiers.


Previous Contents