7
votes

Comment écrivez-vous votre propre protocole IP? (En supposant que TCP et UDP ne conviennent pas)

En supposant que vous avez déterminé que pour un boîtier de niche donné, ni TCP ni UDP n'est idéal, comment allez-vous écrire votre propre protocole IP?

Par exemple, si vous développez sous Linux, où vous regarderiez-vous dans le noyau pour "accrocher" votre protocole?

Où commenceriez-vous?


3 commentaires

@Ignacio n'apprendrait rien puis je voudrais-je? Parfois, vous devez expérimenter et essayer de nouvelles idées, si seulement pour apprendre que c'était une horriblement mauvaise idée de commencer avec. J'ai écrit plusieurs protocoles simples sur TCP et UDP, mais mon défi actuel n'est pas un ajustement parfait pour non plus. Comme je n'ai pas travaillé directement à ce niveau bas auparavant, je pensais demander conseil :)


Juste curieux, mais comment TCP ou UDP ne répondent-ils pas à vos besoins?


Il existe également d'autres protocoles établis, tels que SCTP . Je parierai qu'il existe un protocole existant qui fonctionnera pour vous.


3 Réponses :


2
votes

Lisez sur des sockets Unix et de la mise en réseau. Ce n'est pas tellement «accrocher» dans le noyau, car il ouvre une prise et envoie vos données binaires sur cela.


7 commentaires

@Matty, je suppose que je peux utiliser des prises brutes, mais si je voulais un soutien intégré au protocole, j'aurais pensé avoir besoin de quelque chose de plus :)


@PeTerm intégré au support? Vous ne créeriez pas de module de noyau pour supporter un protocole. Vous échangez simplement des bits dans un format prédéterminé. Vous auriez un auditeur (un serveur) à une extrémité et un client à l'autre comprenant votre protocole. Je voudrais utiliser des prises brutes. Je ne sais pas comment tu ferais d'autre chose.


@MATTY Les applications individuelles n'ont cependant pas leurs propres piles TCP ou UDP. Par exemple, si vous pingez une machine, la réponse est quelque chose que je suppose serait gérée par le noyau plutôt que par une application actuelle.


@PeTERM ICMP fonctionne sur une autre couche OSI, IIRC, à TCP / UDP. Regardez quelque chose comme NGinx - lorsqu'il est exécuté, il ouvre une prise d'écoute et attend des connexions. Rien n'est compilé dans le noyau, par exemple.


@Peterm - Oh, je suis désolé, je t'ai mal compris. Je pensais que vous vouliez construire un protocole de couche d'application, pas un protocole de couche de transport. Y a-t-il une raison spécifique pour laquelle votre protocole ne peut pas être à la couche d'application?


@Matty pour la façon dont je l'envisage de fonctionner, vous auriez besoin d'une application pour gérer certaines des membres du protocole lui-même. J'avais à l'origine besoin d'une application par boîte pour utiliser le protocole, mais je pourrais maintenant avoir besoin de plusieurs applications pour l'utiliser, ce qui le rend beaucoup plus fidèlement - d'où l'idée de mettre les bases dans le noyau afin que toutes les applications puissent "partager" .


@Peterm Il est rare que vous devriez développer un protocole sous le niveau de l'application. Je peux comprendre avoir besoin de développer un nouveau protocole de couche d'application, mais quel type de problème avez-vous que cela nécessite de tomber en dessous de ce niveau?



9
votes

Vous pouvez le faire via un module de noyau. Je commencerais par lire comment ARP fonctionne par exemple. C'est un protocole plus simple depuis que les utilisateurs n'envoient pas de paquets avec elle directement.

Le point d'entrée de la création d'un nouveau protocole réseau est dev_add_pack < / code> , et le code pour ARP peut être trouvé ici .


1 commentaires

C'est ce que je cherchais. Pour une raison quelconque de ma boîte à Fedora, Net / IPv4 n'a que le répertoire NetFilter. Je suppose que j'aurais dû vérifier la source de Kernel.org et vérifié cela avant de poster :)



5
votes

Si votre protocole peut être implémenté directement sur IP, il peut également être mis en oeuvre dans des paquets UDP - et ce dernier présente l'avantage de passer à travers des périphériques NAT et des pare-feu existants qui déposeraient simplement votre protocole personnalisé. .


1 commentaires

+1, en particulier pour l'expérimentation qui est un chemin beaucoup plus facile que de rédiger un véritable protocole basé sur IP: cela peut être fait dans Pure utilisateursPace.