36 votes

Se déplacer dans une pile TCP/IP

Je travaillais en tant qu'ingénieur AQ pour un système d'exploitation propriétaire embarqué. Ils ont construit leur propre Pile ATN et le fait de le parcourir avec un débogueur a été l'expérience la plus révélatrice que j'ai eue en matière de réseau. Regarder chaque couche de la pile construire sa partie du paquet était incroyable. Et finalement, être capable de voir le paquet construit sur le fil avait plus de sens.

En tant qu'éducateur, j'aimerais partager cette expérience avec d'autres. Quelqu'un connaît-il une méthode directe pour passer à travers une pile TCP/IP ? Idéalement, je voudrais quelque chose de plus facile que le débogage d'un noyau *BSD ou Linux, bien que si c'est la seule option, quelques trucs et astuces pour ce processus seraient les bienvenus. Une pile de référence écrite en C/C++ qui pourrait être exécutée en mode utilisateur avec Visual Studio ou Eclipse serait idéale.

15voto

parasietje Points 847

Tout dépend de ce sur quoi vous voulez vous concentrer. D'après votre question, la chose qui vous intéresse le plus est le flux de données à travers les différentes couches (flux de l'espace utilisateur -> tension sur le câble).

Pour cela, je vous propose d'utiliser http://www.csse.uwa.edu.au/cnet/ qui est un simulateur de réseau complet. Il vous permet de passer par tous les niveaux de la pile.

Les systèmes réels auront toujours une distinction claire entre la couche 3, la couche 2 et la couche 1 (Ethernet et micrologiciel sur puce avec vérification du CRC, MAC matériel). Vous aurez du mal à entrer dans le système d'exploitation et certains détails de mise en œuvre seront désordonnés et déroutants pour les étudiants. Pour Linux, vous devrez expliquer l'infrastructure du noyau pour donner un sens à la conception de la pile TCP/IP.

Si vous êtes seulement intéressé par la partie TCP/IP, je vous recommande d'utiliser une pile TCP/IP embarquée comme http://www.sics.se/~adam/lwip/ . Vous pouvez incorporer cela dans un simple programme en espace utilisateur et construire entièrement le paquet TCP/IP.

Veuillez noter qu'il y a beaucoup d'aspects de la communication réseau que vous ne pouvez pas aborder en passant par la pile TCP/IP. Il y a toujours une puce MAC entre les deux qui régule l'accès au support, les collisions, etc. En dessous, il y a une puce PHY qui traduit tout en signaux électriques/optiques, et il y a même un protocole qui gère la communication entre MAC et PHY. En outre, vous ne voyez pas tous les aspects liés à la mise en file d'attente, à la concurrence, à l'allocation des ressources du système d'exploitation, etc. Une image complète devrait inclure tous ces aspects, qui ne peuvent être vus que dans un simulateur de réseau.

13voto

gby Points 8094

Je ferais tourner Minix dans une machine virtuelle et je déboguerais ça. C'est parfait pour cela.

Minix est un système d'exploitation complet avec une pile TCP/IP, vous disposez donc du code dont vous avez besoin. Cependant, contrairement à Linux/BSD, ses racines et son objectif de conception sont d'être un outil d'enseignement, il évite un certain niveau de complexité en faveur de la clarté. En fait, c'est le système d'exploitation sur lequel Linus Torvalds a commencé à travailler lorsqu'il a débuté avec Linux :-)

Vous pouvez exécuter minix dans une VM telle que VirtualBox ou VMware et le déboguer. Il y a des instructions sur le site web : http://www.minix3.org/

11voto

Peon the Great Points 1069

J'ai personnellement appris la pile TCP/IP en utilisant DOS et SoftICE (oups, j'ai appris que je suis un vieil homme). Utiliser DOS sur une machine virtuelle et déboguer à travers un pilote TCP/IP sera beaucoup plus simple puisque votre objectif est d'apprendre comment fonctionne TCP/IP. Les systèmes d'exploitation modernes optimisent beaucoup les entrées/sorties du réseau et il n'est pas facile de les déboguer.

http://www.crynwr.com/ a un tas de pilotes de paquets open source. Le débogage avec le code source sera un peu plus facile.

7voto

user162338 Points 106

Ce n'est pas exactement ce que vous recherchez, mais j'espère que cela vous aidera.

1995 - TCP/IP Illustré, Volume 2 : The Implementation (avec Gary R. Wright) - ISBN 0-201-63354-X

Il suffit de parcourir le code côte à côte. Un pas de côté grâce à l'expérience. M. Steven explique aussi les variables clés. C'est génial. Note : Le code a peut-être changé depuis le livre, mais il reste génial.

6voto

Evgeny Kluev Points 16685

Probablement Projet lwIP est ce que vous recherchez car il peut être fonctionner sans système d'exploitation .

En ce qui concerne le débogage du noyau Linux, il n'y a pas de moyen très simple, mais bien connu, de le faire. Utilisez KGDB . Installez la version de débogage du noyau Linux sur une machine virtuelle ou sur une boîte séparée. Et connectez GDB à distance à cette machine. Vous souhaitez probablement utiliser un frontal GDB au lieu de l'interface texte. Si vous avez besoin de plus de détails sur le débogage du noyau de la part de personnes plus compétentes, ajoutez simplement l'étiquette "linux" à votre question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X