D'après ce que je comprends, il n'y a aucun moyen d'envoyer un paquet à un ordinateur dans un réseau local depuis l'extérieur du réseau, à moins que nous connaissions le mécanisme de routage utilisé par le routeur.
En supposant que nous ayons une configuration qui ressemble à ceci:
Ordinateur-A, IP 192.168.1.2 (passerelle par défaut 192.168.1.1)
Ordinateur-B, IP 192.168.1.3 (passerelle par défaut 192.168.1.1)
Routeur-C, IP 192.168.1.1 (IP externe 1.1.1.1)
Routeur-D (IP externe 2.2.2.2)
L'ordinateur A, l'ordinateur B et le routeur C appartiennent au même réseau local. Le routeur-D veut envoyer des données à l'ordinateur-A, mais il ne peut pas le faire sans passer par le routeur-C.
Maintenant, le routeur-C transmettra les paquets à l'ordinateur-A si le port de destination est 1000, et transmettra les paquets à l'ordinateur-B si le port de destination est 2000. Mais sûrement, le seul périphérique qui connaît ce mécanisme de routage est le routeur-C lui-même! Même l'ordinateur-A ou l'ordinateur-B ne le sauront pas, non?
Le routeur-D peut donc envoyer un paquet à l'ordinateur-A s'il envoie un paquet au routeur-C via le port 1000, mais comment le routeur-D doit-il savoir pour envoyer des paquets via le port 1000, et pas le port 1001?
Comment les programmes peer-to-peer comme Bittorrent réussissent-ils à résoudre ce problème? La seule solution à laquelle je peux penser est que le routeur-D envoie le paquet au routeur-C via tous les ports, de sorte qu'il soit transféré à l'ordinateur-A, mais y a-t-il une meilleure solution?
la source
Votre question touche au cœur d'Internet et à la définition même du routage. Dans votre exemple, le routeur D envoie des données à l'ordinateur A sur la base de deux prémisses:
Votre scénario semble supposer la première option - le routeur D veut envoyer à l'ordinateur A. Mais comment y parvient-il? Il le fait grâce à l'utilisation de tables de routage qui sont partagées par les routeurs entre eux.
Le routeur C envoie régulièrement des mises à jour à tous les routeurs qui savent - y compris le routeur D - qu'il "connaît" le réseau "192.168. *" (En réalité - cela ne se produirait pas parce que ce réseau n'est pas routé - il est considéré comme privé. Mais ignorer cela.) Ainsi, le routeur D sait déjà que le routeur C connaît ce réseau.
Ainsi, lorsque les données sont destinées à l'ordinateur A, elles sont d'abord traitées par le réseau. Ainsi, le routeur D demande: "J'ai besoin de trouver le réseau 192.168. *. Est-ce que je le connais? Non. Est-ce que je connais quelqu'un d'autre qui le sait? Oui. Le routeur C le fait. Comment puis-je accéder au routeur C? 2.2 interface. "
Le routeur D envoie ensuite les données au routeur C. Le routeur C les obtient et dit: "Oh, j'ai des données du routeur D mais c'est pour le réseau 192.168. Est-ce que je connais ce réseau? Oui, via mon réseau 192.168.1.1" Et puis le transmet.
Il y a un autre travail à faire pour résoudre l'adressage IP et MAC, mais je couvre le routage, en soi, pas ARP et le réseau local.
Vous remarquerez que votre première hypothèse - le routeur distant doit connaître le mécanisme de routage - ne joue pas ici. Le routeur D ne se soucie pas si le routeur C utilise EIGRP, RIP, RIPv2, OSPF ou autre. Tout ce qui importe, c'est qu'il a obtenu une mise à jour. (Bien sûr, comment il a obtenu une mise à jour est important pour s'assurer que les deux restent synchronisés. Mais encore une fois, c'est un problème différent.)
Votre deuxième hypothèse - que le numéro de port est un facteur de routage - est également incorrecte. Les routeurs (généralement) n'ont pas besoin d'informations sur les ports pour prendre des décisions de routage. (Cela a légèrement changé, en raison de certaines nouvelles technologies de réseau et s'applique principalement aux pare-feu et aux proxys, mais l'hypothèse plus large s'applique toujours aux "vrais" routeurs.)
Poursuivant votre exemple, le routeur C transmettra les données sur le port 1000 (selon votre scénario) car il est possible qu'un service sur l'ordinateur A attend des données sur ce port spécifique. Mais il ne sait le faire que parce que le routeur D l'a envoyé sur le port 1000. Et le routeur D ne l'envoie que sur ce port parce que l'expéditeur des données l'a envoyé au routeur D sur ce port.
Je ne comprends pas que votre inclusion de programmes bittorrent ou P2P reflète la question que vous posez. Les mêmes explications s'appliqueraient. Les routeurs peuvent également être configurés avec un déclenchement de port qui associe un périphérique particulier (ou IP) à un port particulier. De telle sorte que lorsque le trafic arrive sur le port 1234, les routeurs savent envoyer des données au périphérique ABCD. Ceci est généralement associé à un port TCP sortant. ie si j'envoie du trafic sur le port 7890, le routeur sait que le trafic entrant sera sur le port 1234 et me l'envoie.
Mais le déclenchement de port n'est pas associé à des décisions de routage (à distance) - il concerne plutôt la table MAC / IP interne que le routeur utilise pour le LAN.
Mettre à jour / modifier : Pour répondre davantage et élaborer après votre commentaire. Le routeur D ne connaît l'ordinateur A que par son adresse IP (192.168.2.2). Mais le routeur C connaît l'ordinateur A par son adresse IP et par son adresse MAC. Le MAC (Media Access Control) est un identifiant unique (généralement ...) de 48 bits qui est défini par une norme internationale. Chaque appareil connecté à un réseau local (filaire et sans fil) est censé avoir une adresse MAC unique.
Le routeur (routeur C) associe l'adresse IP et l'adresse MAC ensemble dans une table (la table d'adresses MAC). Ainsi, lorsque le trafic arrive sur le routeur C et que le routeur y réalise son "local", il effectue une recherche dans la table d'adresses MAC. Le routeur modifie alors littéralement les informations d'adressage de trame.
Il reconstruit (réécrit) les informations de destination de la couche 2 pour avoir l'adresse MAC de destination de l'ordinateur A mais conserve les informations d'adresse IP (couche 3) pour qu'elles soient identiques.
Si l'itinéraire ne connaît PAS l'adresse MAC. Ou n'a pas de relation IP-MAC dans sa table, il fait quelque chose appelé ARP (protocole de résolution d'adresse) pour demander "HEY, tout le monde sur ce réseau. Avez-vous cette adresse MAC?" Ou parfois - "Tout le monde, quelle est votre adresse MAC?"). Le ou les périphériques appropriés répondent et le routeur crée sa table IP-MAC.
la source
Déclenchement de port. Comment un serveur Web vous envoie-t-il une page Web après l'avoir demandée? Parce que vous l'avez demandé. Lorsque vous le demandez, le routeur sait attendre une réponse et lorsqu'il l'obtient, il la transmet au PC approprié. Certains programmes sont écrits pour déclencher une ouverture en prévision d'un signal provenant d'un PC spécifique, même si l'on n'est pas vraiment en route.
Certains modèles ont un serveur central utilisé pour la communication de base. Par exemple:
Le serveur connaît désormais tous les fichiers que possèdent Client1 et Client2.
Client1 vient de tromper le routeur pour qu'il ouvre ce port pour Client2.
Dans certains cas, comme BitTorrent ou le Napster d'origine (iirc), vous devez transférer un port sur votre routeur pour qu'il fonctionne de manière optimale.
Pour autant que les autres clients sachent à quel port se connecter initialement, c'est parce que votre client a dit à l'essaim ou au serveur quel port vous utilisez. BitTorrent utilise fréquemment un tracker et qui garde la trace des ports utilisés par quels clients.
la source