Quelqu'un pourrait-il expliquer clairement la différence entre un port et une prise? Je sais qu'un port sert de porte d'accès au réseau pour un processus d'application et que le processus d'application utilise une connexion socket au numéro de port donné pour gérer la communication réseau, mais lorsque vous avez plusieurs processus à l'écoute sur un seul numéro de port, je trouve il est difficile de comprendre la différence entre la prise et le port et comment ils s'emboîtent tous.
[~ # ~] s [~ # ~] est un programme serveur: disons que c'est un serveur HTTP, donc il utilisera le fameux numéro de port pour HTTP , qui est 80. Je l'exécute sur un hôte avec l'adresse IP 10.0.0.4
, il écoutera donc les connexions sur 10.0.0.4:80
(car c'est là que tout le monde s'attendra à le trouver).
À l'intérieur [~ # ~] s [~ # ~] , je vais créer un socket et lier à cette adresse: maintenant, le système d'exploitation sait que les connexions entrant dans 10.0.0.4:80
doit être acheminé vers mon processus [~ # ~] [~ # ~] via ce socket particulier.
sortie netstat une fois le socket lié:
$ netstat --tcp -lan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
NB. l'adresse locale est entièrement nulle car [~ # ~] s [~ # ~] ne se soucie pas de la façon dont ses clients l'atteignent
Une fois que [~ # ~] s [~ # ~] a ce socket lié, il accepter connexions - chaque fois qu'un un nouveau client se connecte, accept
renvoie un socket nouveau, qui est spécifique à ce client
sortie netstat une fois la connexion acceptée:
$ netstat --tcp -lan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 10.0.0.4:80 10.0.0.5:55715 ESTABLISHED
10.0.0.4:80
représente la fin de la connexion de [~ # ~] [~ # ~] et est associée au socket retourné par accept
10.0.0.5:55715
est la fin de la connexion du client et est associé au socket que le client a passé à connect . Le port du client n'est utilisé que pour le routage des paquets sur cette connexion TCP au bon processus: il est attribué de manière aléatoire par le noyau du client à partir de la plage de ports éphémères.Maintenant, [~ # ~] s [~ # ~] peut continuer à accepter plus de connexions client ... chacun aura sa propre socket, chaque socket sera associé à une unique TCP, et chaque connexion aura une adresse distante unique. [~ # ~] s [~ # ~] suivra l'état du client (le cas échéant) en l'associant au socket.
Donc, grosso modo:
accept
simultanés revient, il le fait uniquement dans le processus one, chaque socket de connexion entrante est unique pour une instance du serveursocketpair
, d'être un enfant de ce processus et d'en hériter, ou de passer explicitement l'une des sockets de ce processusConsidérez votre machine comme un immeuble à appartements:
Un port est un numéro d'appartement.
Une prise est la porte d'un appartement.
Une adresse IP est l'adresse municipale du bâtiment.
Un port fait partie de l'adresse dans les protocoles TCP et UDP. Il est utilisé pour aider le système d'exploitation à identifier l'application qui doit obtenir les données reçues. Un système d'exploitation doit prendre en charge les ports pour prendre en charge = TCP et UDP car les ports font partie intrinsèque de TCP et UDP.
Un socket fait partie de l'interface que le système d'exploitation présente aux applications pour leur permettre d'envoyer et de recevoir des données réseau. La plupart des implémentations de socket prennent en charge de nombreux protocoles au-delà de TCP et UDP, dont certains n'ont pas de concept de ports. Un système d'exploitation n'a pas à prendre en charge les sockets pour prendre en charge TCP ou UDP; il pourrait fournir une interface différente pour les applications à utiliser. Un socket est simplement un moyen d'envoyer et de recevoir des données sur un port spécifique.
Un ordinateur possède une adresse IP qui l'identifie comme une entité distincte sur le réseau. Nous ajoutons un numéro supplémentaire à cela pour nous permettre de différencier les connexions à cet ordinateur. Ceci est le numéro de port. Du côté OS de la connexion, vous avez besoin de tampons, de l'état de la connexion, etc. Cet objet logique est le socket.
Un socket est un chemin de communication vers un port. Lorsque vous souhaitez que votre programme communique sur le réseau, vous lui avez donné un moyen d'adresser le port et cela se fait en créant un socket et en le connectant au port. Fondamentalement, socket = IP + ports Les sockets permettent d'accéder au port + ip