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 :
-
récupération d'une requête ARP et réponse ARP ;
- récupération d'un paquet UDP et réponse UDP à ce paquet UDP.
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.