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.