Previous Contents Next

4   Analyse de l'existant

Il est maintenant temps d'explorer le code de la pile TCP/IP déjà écrit.

4.1   Structure en couches

Regardez comment les différentes couches de la pile TCP/IP sont déclarées dans la structure de données stackLayers du fichier stack.c. Explorez aussi les fichiers net*.c pour comprendre comment les différentes couches appellent les couches supérieures (dans les fonctions xxxDecodePacket) et les couches inférieures (dans les fonctions xxxSendPacket). En particulier, notez comment les tableaux associatifs sont utilisés pour communiquer entre les couches.

4.2   Gestion mémoire

En supposant que la primitive realloc soit capable de changer la taille des blocs mémoire sans jamais devoir déplacer ces blocs et que la fonction memmove soit capable de déplacer les données sans jamais utiliser de mémoire tampon, donnez la taille de l'espace mémoire utilisée sur le tas dans les situations suivantes : Détaillez l'utilisation mémoire selon les couches de la pile.

4.3   Protocole ARP

Vérifiez que la pile TCP/IP gère déjà correctement ARP, en particulier les requêtes ARP. Lancez la pile, affectez une adresse IP à l'interface Ethernet virtuelle dans le même réseau IP que la pile, et lancez un ping sur l'adresse IP de la pile. Arrêtez la commande ping et vérifiez que la requête ARP de votre machine de TP a bien reçu une réponse.

4.4   Protocole IP

Vérifiez que la pile TCP/IP gère déjà correctement IP. Relancez la manipulation avec la commande ping et vérifiez que les paquets ICMP echo request sont bien reçus par la couche IP. Familiarisez vous avec le code de la fonction ipDecodePacket, puis ajoutez ce qui est nécessaire pour envoyer le paquet ICMP ad hoc quand un paquet IP avec un TTL nul est reçu. Appuyez vous sur le code permettant de signaler à l'expéditeur qu'un protocole IP n'est pas connu de la pile. Trouvez une option à l'utilitaire ping permettant de constater que les options IPv4 sont bien affichées mais non prises en compte.

4.5   Protocole UDP

Commencez par examiner la structure stackProcess du fichier stack.c pour comprendre comment sont déclarés les processus applicatifs (couche 7, applications). Regardez aussi dans le fichier netudp.c comment ces processus sont trouvés et appelés. Enfin regardez le processus udp_echo pour comprendre comment fonctionne un tel processus, en particulier analysez l'utilisation du paramètre type. Testez le processus udp_echo en envoyant un datagramme UDP sur le port UDP 4000 de la pile. Pour ce faire utilisez l'utilitaire nc avec l'option -u.


Previous Contents Next