Quels sont vraiment les ports et les protocoles?

11

J'entends des gens parler de ports et de protocoles (en relation avec les réseaux informatiques), et ils leur fournissent souvent des analogies (par exemple: "un port ressemble beaucoup à un port d'expédition, il envoie et reçoit des données comme un port d'expédition envoie et reçoit des marchandises d'autres ports ") et des choses comme ça.

Je comprends ce que tout cela signifie, mais seulement à un niveau très artificiel. Fondamentalement, je sais ce qu'est un port et je comprends ce que sont les protocoles, mais quels sont-ils vraiment?

Ces ports sont-ils des objets physiques? Sont-ils intégrés à mon ordinateur? Combien de ports y a-t-il? Puis-je augmenter ou diminuer le nombre de ports? Sont-ils même quelque chose de physique? Ou écrit en code? Où est ce code? Le système d'exploitation? Qu'est-ce qu'un port?

Quels sont les protocoles? J'imagine qu'il s'agit d'une sorte de code ... Pouvez-vous créer votre propre protocole? Comment obtenir un port spécifique pour exécuter un protocole spécifique? Quelle langue utilisez-vous pour créer un protocole? Comment définissez-vous ou inventez-vous un nouveau protocole?

Bob
la source

Réponses:

9

Avant la réponse de Hello71, il pourrait être utile de visualiser un port en réfléchissant à la structure d'une adresse dans un paquet. Un paquet étant une unité de données transmise autour d'un réseau. TCP est un exemple de protocole de couche transport qui utilise des ports et est couramment utilisé sur IP.

L'IP a donc deux composants d'adressage - l'IP source et l'IP de destination. TCP ajoute à cela en utilisant un port source et un port de destination. Ce sont les ports qui permettent à la machine de réception de différencier le trafic destiné à la même adresse IP - c'est-à-dire, si vous avez un serveur qui reçoit à la fois les requêtes Web et les e-mails sur une seule adresse IP, vous devez déterminer quelle application doit recevoir les données. - le service de messagerie ou le service Web. Ils peuvent donc ressembler à ceci si un seul utilisateur devait effectuer une demande Web et une demande par courrier électronique sur le même serveur:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23434             192.168.1.1   80              web
10.1.1.10    34343             192.168.1.1   25              incoming email

Le service Web possède le port 80 et le service de messagerie possède le port 25 - ils "écoutent" sur leurs ports respectifs, ce qui permet au trafic de se retrouver au bon endroit.

Le port source est "éphémère" - en ce sens qu'il est constitué au moment de l'envoi du paquet. Cependant, il sert toujours un but utile. Il permet aux deux extrémités de la connexion de garder une trace des conversations distinctes. Considérez si notre utilisateur a envoyé deux demandes Web simultanées:

Source IP    Source Port       Dest IP       Dest Port       Service
10.1.1.10    23232             192.168.1.1   80              web request 1
10.1.1.10    23234             192.168.1.1   80              web request 2

Cela permet au service Web de savoir qu'il s'agit de demandes distinctes, mais aussi, le trafic de retour du serveur Web - les pages Web - est renvoyé aux ports source respectifs, ce qui permet au navigateur de savoir à quelle demande le serveur répond.

Notez que tout cela fait référence aux numéros de port, d'un point de vue TCP / IP, les données réelles déplacées sur ces ports pourraient être n'importe quoi. Il ne se soucie pas ou n'a aucune connaissance des applications, donc si vous aviez du trafic Web sur le port 25 et des e-mails sur le port 80, ce ne serait pas plus sage.

Il appartient à l'application d'envoi et de réception de s'assurer que les données sont la bonne structure, et c'est là que les protocoles d'application entrent en jeu. HTTP est un exemple de protocole d'application que les navigateurs Web utilisent pour communiquer avec les serveurs Web. Il s'agit d'un protocole bien défini qui garantit que le navigateur enverra des demandes à n'importe quel serveur Web et que le serveur Web comprendra et répondra de manière sensée. Mais ce qu'il n'inclut pas dans sa définition, c'est la façon dont les paquets passent de A à B - c'est la responsabilité des couches précédentes - les couches de transport, Internet et de liaison.

Paul
la source
Je vous remercie! C'était juste la réponse que je cherchais, merci pour votre aide!
Bob
3

Hm. Je pense que le meilleur endroit pour commencer serait de regarder la suite IP, alias le modèle TCP / IP. (Ignorer les autres couches du modèle OSI à des fins de simplicité.)

Fondamentalement, c'est une série de couches:

Couche d'application - HTTP, FTP, POP, SSH, etc.
Couche de transport - TCP, UDP, etc.
Couche Internet - IP, ICMP, etc.
Couche de liaison - Ethernet, etc.

Les ports sont, pour la plupart, implémentés au niveau de la couche transport (couche 4 - Oui, la numérotation est correcte.)

La majorité des piles TCP et / ou UDP implémentées dans les systèmes d'exploitation utilisent un système de base pour attribuer des ports aux programmes et simplement déclencher des événements dans ces programmes à mesure que les paquets arrivent sur le réseau. Cependant, toute mise en œuvre pourrait théoriquement fonctionner; il peut même y avoir des piles alternatives hypothétiques réfléchies dans le monde universitaire.

TCP a été défini comme ayant un total de 65535 ports, que tout programme peut utiliser pour faire ce qu'il veut (bien que de nombreux systèmes d'exploitation limitent l'utilisation de ports inférieurs à 1024, ce qui leur confère un statut spécial ad hoc). Bien qu'il existe quelques listes limitées, il n'y a pas de véritable norme pour définir qui obtient quel port et quel port exécute quel programme. Un port est donc plus ou moins un nombre aléatoire sur lequel différentes implémentations d'un programme décident de se mettre d'accord pour communiquer. Bien sûr, les concepteurs de tels programmes essaient d'éviter les ports que d'autres programmes populaires ont déjà choisis.

Certes, il n'est en aucun cas nécessaire pour exécuter en utilisant TCP. Certains protocoles s'exécutent sur la couche Internet nue, ou même sur la couche de liaison nue, principalement à des fins d'efficacité, ou parce que ces protocoles ont été inventés avant même l'existence de TCP ou IP. Bien sûr, ce faisant, vous échangez la simplicité et la vérification approfondie des bogues des bibliothèques de mise en réseau du système d'exploitation.

Pour plus de détails, consultez les pages Wikipedia sur le modèle OSI, TCP et IP.

Bonjour71
la source
Je comprends tout ça. Donc, fondamentalement, un port n'est pas une chose physique? C'est quelque chose qui est programmé? Où le port est-il défini sur un ordinateur? Et puis pour les protocoles, comment sont-ils créés? Sont-ils programmés?
Bob
Non, un port n'est pas une chose physique dans ce contexte (évidemment un port USB est physique mais n'est pas lié à ce sujet). Les protocoles sont définis via des RFC ( en.wikipedia.org/wiki/Request_for_Comments ) et mis en œuvre dans un code - programmé.
Paul
Serait-il exact de dire que TCP est un processus système qui réserve de la mémoire pour stocker des données provenant d'IP (ou pour stocker des données à récupérer par IP) et que cette mémoire est divisée en «ports». Et que d'autres applications (processus) telles que HTTP, peuvent notifier à TCP qu'elles souhaitent réserver des ports spécifiques (par exemple 80 et 443). Ensuite, il revient à TCP de 1. permettre à HTTP d'ajouter des données sortantes à ces adresses mémoire, et 2. d'informer HTTP lorsque des données entrantes ont été ajoutées à ces adresses mémoire?
Zach Smith
Peut-être que Bob confondait les ports de protocole et les ports de commutateur physiques. La partie du port de protocole a été bien répondu par plusieurs, bien qu'il manque une source. Quant aux ports physiques, ce sont des lieux d'entrée et de sortie d'entrée où se connecte le câblage qui permet le transfert de données réseau. Cela peut impliquer des circuits électroniques, des récepteurs à fibre optique, des lasers et des tampons. L. Peterson 4e édition.
nassim
3

Bien que cette question ait déjà été marquée comme ayant reçu une réponse, je voulais répondre à certaines des questions supplémentaires posées dans le PO.

Ces ports sont-ils des objets physiques?

Aucun port n'est pas un objet physique.

Un numéro de port est un entier non signé de 16 bits, ce qui signifie que la plage de ports disponibles pour une utilisation va de 1 à 65535 (le numéro de port 0 est réservé et ne peut pas être utilisé). Un processus associe ses canaux d'entrée ou de sortie via des sockets Internet, un type de descripteur de fichier, à un protocole de transport, un numéro de port et une adresse IP. Ce processus est connu sous le nom de liaison et permet d'envoyer et de recevoir des données via le réseau.

Sont-ils intégrés à mon ordinateur? Sont-ils même quelque chose de physique? Ou écrit en code? Où est ce code? Le système d'exploitation? Qu'est-ce qu'un port?

Le logiciel de mise en réseau du système d'exploitation a pour tâche de transmettre les données sortantes de tous les ports d'application au réseau et de transmettre les paquets réseau arrivant à un processus en faisant correspondre l'adresse IP et le numéro de port du paquet.

Un seul processus peut se lier à une combinaison d'adresses IP et de ports spécifiques à l'aide du même protocole de transport. Les échecs d'application courants, parfois appelés conflits de port, se produisent lorsque plusieurs programmes tentent de se lier aux mêmes numéros de port sur la même adresse IP à l'aide du même protocole.

Le paragraphe ci-dessus est essentiel pour comprendre pourquoi les ports / protocoles sont utilisés en réseau. Si nous n'avions pas de moyen de spécifier le protocole, qui transmet les données sur un numéro de port convenu - vous ne seriez pas en mesure de faire plus d'une chose à la fois (vérifiez votre courrier électronique et utilisez le Web) car votre ordinateur aurait aucun moyen de faire la différence entre les données de votre client de messagerie et les données du site Web que vous consultez.

Combien de ports y a-t-il?

Les numéros de port sont attribués de différentes manières, en fonction de trois plages:

  1. Ports bien connus / système (0-1023) - Cette gamme de ports est utilisée par les processus système qui fournissent des types de services réseau largement utilisés (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)

  2. Ports enregistrés / utilisateurs (1024-49151) - La plage de numéros de port de 1024 à 49151 sont les ports enregistrés. Ils sont attribués par l'IANA pour un service spécifique à la demande d'une entité requérante. (Webmin / 10000, proxy HTTP / 8080, protocole de bureau à distance / 3389, etc.)

  3. Ports éphémères / dynamiques / privés (49152-65535) - La plage 49152–65535 contient des ports dynamiques ou privés qui ne peuvent pas être enregistrés auprès de l'IANA. Cette gamme est utilisée à des fins personnalisées ou temporaires et pour l'allocation automatique de ports éphémères.

Puis-je augmenter ou diminuer le nombre de ports?

En ce qui concerne la possibilité d'augmenter le nombre de ports disponibles, vous ne pouvez pas attribuer un port supérieur à 65535 en raison des mathématiques qui permettent au réseau de fonctionner (binaire) - donc la réponse à cette question est non, vous ne pouvez pas augmenter le nombre total de ports disponibles ports au-dessus de 65535.

Quels sont les protocoles?

En informatique, un protocole de communication est un système de règles numériques pour l'échange de messages à l'intérieur ou entre des ordinateurs. Lorsque des messages sont échangés via un réseau informatique, le système de règles est appelé protocole réseau. Un protocole est essentiellement un ensemble convenu d'instructions / commandes / appels sur lequel deux appareils en réseau peuvent communiquer. Vous pensez que si nous n'avions pas convenu de protocoles et de serveurs Web, nous avons simplement envoyé des données de manière aléatoire à des navigateurs Web dont le navigateur ne savait pas quoi faire? Heureusement, nous avons HTTP et que chaque navigateur Web créé a intégré au logiciel afin qu'il puisse communiquer avec n'importe quel serveur Web qui parle également la même langue (HTTP).

J'imagine qu'il s'agit d'une sorte de code ... Pouvez-vous créer votre propre protocole? Quelle langue utilisez-vous pour créer un protocole?

Oui, vous pouvez créer vos propres protocoles. Les protocoles sont écrits dans une grande variété de langues. Je ne suis pas développeur de logiciels, mais je suis à peu près sûr que tant que la langue que vous utilisez possède des bibliothèques qui vous permettent d'écrire des logiciels qui peuvent communiquer via TCP / IP (il existe d'autres suites de protocoles, mais TCP / IP est le plus largement utilisé), vous pouvez utiliser cette langue pour écrire un protocole. Le langage de programmation «C» semble être le plus couramment utilisé pour écrire des protocoles. Cela est dû au fait que bon nombre des premiers protocoles réseau ont été développés sur UNIX dans les années 1970 et C se trouve être le langage dans lequel UNIX lui-même est écrit.

Comment obtenir un port spécifique pour exécuter un protocole spécifique?

Cela diffère un peu entre les systèmes d'exploitation. Par exemple, pour modifier le numéro de port sur lequel s'exécute le protocole Bureau à distance sous Windows, vous devez modifier le registre. Sous Linux, de nombreux services réseau peuvent être configurés directement à partir d'un fichier .conf pour un service réseau particulier.

Comment définissez-vous ou inventez-vous un nouveau protocole?

Voir https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/ pour un article de blog par quelqu'un qui a récemment développé un nouveau protocole de mise en réseau et quel genre de choses il devait faire le long du chemin.

Richie086
la source