Programmation réseaux - La couche 2 de OSI

J’ai récemment suivi des cours sur les réseaux (CCNA 1 à 4), et je comprends donc la majeure partie de la théorie qui se cache derrière tout cela. Ce que j’aimerais faire maintenant, c’est prendre les connaissances que j’ai et les mettre en pratique sous la forme de quelques petites applications.

J’ai lu quelques articles sur MSDN sur la façon de procéder, mais ils ne couvrent apparemment que la programmation réseau à partir de la couche 3 ou 4, si j’ai bien compris. Ce que je recherche, ce sont des exemples simples sur la façon de traiter la connectivité de la couche 2 (c’est-à-dire le découpage) entre les hôtes, ou même quelque chose de simple comme la façon d’effectuer une diffusion Ethernet.

J’ai un peu d’expérience avec C# et C++, donc des exemples qui utilisent l’un de ces langages seraient parfaits.

Merci de votre aide.

Pour Windows, jetez un coup d’œil à [WinPcap] (WinPcap · Developer Resources) qui fournit un accès de bas niveau au réseau. Le pack du développeur contient déjà quelques exemples simples pour vous aider à démarrer.

Sous Linux, il y a packet sockets.

Vous pouvez utiliser Codeplex pour écrire de petites applications (j’ai fait la même chose pendant mon CCNA).

Il s’agit d’une bibliothèque de programmation .Net facile à utiliser et orientée objet, qui vous permet de descendre jusqu’à la couche 2 et d’envoyer des trames personnalisées via WinPcap.

Des types de trames comme Ethernet, ARP, IP, UDP, TCP et RIP sont implémentés, et pour autant que je sache, ce sont des protocoles qui sont utilisés pendant le CCNA.

Des tutoriels en C# sont disponibles sur Codeplex, et si vous voulez étudier quelque chose en détail, comme la résolution d’adresses, vous pouvez toujours consulter le code source, puisque la bibliothèque est open source.

Il est très probable que vous puissiez étudier les utilitaires réseau de bas niveau sur les systèmes GNU/Linux, ou examiner les couches TCP, UDP ou IP du noyau. Mais par exemple, faire une diffusion Ethernet est quelque chose de très bas niveau, et pas très utile. Et les exemples réels (généralement codés en C, et non en C++) ne peuvent probablement pas être simples parce qu’ils doivent gérer les erreurs.