Les adresses MAC ne sont pas uniques
Il peut y avoir et il y aura des doublons avec les MAC. Il y a plusieurs raisons à cela, l'une étant qu'elles n'ont pas besoin d'être (globalement) uniques.
Le MAC doit être unique sur le réseau local, afin que l'ARP / NDP puisse faire son travail et que le commutateur sache où envoyer les datagrammes entrants. Habituellement (pas nécessairement) cette condition préalable est remplie et les choses fonctionnent très bien, simplement parce que la probabilité d'avoir deux MAC identiques sur le même LAN, même si elles ne sont pas uniques, est assez faible.
Une autre raison est qu'il existe simplement plus d'appareils que d'adresses. Bien que les adresses 48 bits semblent avoir suffisamment d'adresses pour tout le monde jusqu'à la fin des jours, ce n'est pas le cas.
L'espace d'adressage est divisé en deux moitiés de 24 bits (c'est un peu plus compliqué, mais ignorons les petits détails). La moitié est l'OUI que vous pouvez enregistrer auprès de l'IEEE et attribuer à votre entreprise pour environ 2000 dollars. Les 24 bits restants, vous faites ce que vous voulez. Bien sûr, vous pouvez enregistrer plusieurs OUI, ce que font les plus gros joueurs.
Prenons Intel comme exemple. Ils ont enregistré un total de 7 OUI, ce qui leur donne un total de 116 millions d'adresses.
La carte mère de mon ordinateur (qui utilise un chipset X99) ainsi que la carte mère de mon ordinateur portable ainsi que la carte mère de chaque ordinateur x86 que j'ai possédé au cours des 10-15 dernières années avaient une carte réseau Intel dans le chipset. Il y a certainement plus de 116 millions d'ordinateurs Intel dans le monde. Ainsi, leurs MAC ne peuvent être uniques (dans un sens unique au monde).
En outre, des cas ont été signalés euh ... moins chers ... les fabricants "volaient" simplement les adresses de l'OUI de quelqu'un d'autre. En d'autres termes, ils ont simplement utilisé une adresse aléatoire. J'ai entendu parler de fabricants qui n'utilisent que la même adresse pour une gamme complète de produits. Rien de tout cela n'est vraiment conforme ou n'a beaucoup de sens, mais que pouvez-vous faire à ce sujet? Ces cartes réseau existent. Encore une fois: la probabilité que cela devienne un problème pratique est encore très faible si les adresses sont utilisées pour ce à quoi elles sont destinées, vous devez en avoir deux sur le même LAN. pour même le remarquer.
Maintenant, que faire de votre problème?
La solution est peut-être plus simple que vous ne le pensez. Vos appareils IoT auront très probablement besoin d'une certaine notion de temps, généralement le temps est automatiquement obtenu via NTP. La précision typique du NTP est de l'ordre de la microseconde (oui, c'est micro, pas milli). J'ai juste couru ntpq -c rl
pour être sûr et on m'a dit 2-20 .
La probabilité que deux de vos appareils soient allumés pour la première fois à la même microseconde précise est très faible. Il est généralement possible que cela se produise (surtout si vous en vendez des millions en très peu de temps, félicitations pour votre succès!), Bien sûr. Mais ce n'est pas très probable - en pratique, cela ne se produira pas. Ainsi, gagnez du temps après le premier démarrage sur le magasin permanent.
Le temps de démarrage de votre appareil IoT sera le même sur chaque appareil. Sauf que ce n'est pas vrai du tout .
Compte tenu d'une minuterie haute résolution, les temps de démarrage sont mesurablement différents, même sur le même appareil, à chaque fois. Ce n'est peut-être que quelques horloges différentes (ou quelques centaines de milliers, si vous lisez quelque chose comme le compteur d'horodatage du processeur), donc pas très unique, mais cela ajoute certainement de l'entropie.
De même, le temps nécessaire connect
pour revenir la première fois que vous accédez à votre site API sera légèrement, mais mesurablement, différent à chaque fois. De même, getaddrinfo
cela prendra un temps légèrement différent et mesurable pour chaque appareil lors de la première recherche du nom d'hôte de votre API Web.
Concaténez ces trois ou quatre sources d'entropie (adresse MAC, heure de la première mise sous tension, heure de démarrage pour la première fois, heure de connexion) et calculez un hachage à partir de cela. MD5 fera très bien à cet effet. Là, tu es unique.
Bien que cela ne garantisse pas vraiment l' unicité, il le garantit "à peu près", avec une chance ineffaçable d'échec. Vous devriez avoir deux appareils avec des MAC identiques qui sont allumés pour la première fois sur la même microseconde, et ont pris exactement le même temps pour démarrer et pour se connecter à votre site. Cela ne va pas arriver. Si cela se produit, vous devriez immédiatement commencer à jouer à la loterie, car à toutes les apparences, vous êtes assuré de gagner.
Si, toutefois, «ne se produira pas» n'est pas une garantie suffisante, passez simplement à chaque appareil un nombre croissant séquentiellement (généré sur le serveur) la première fois qu'ils accèdent à votre API Web. Laissez l'appareil stocker ce numéro, c'est fait.