IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

Plusieurs ports 80 en LISTEN


Sujet :

Développement

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut Plusieurs ports 80 en LISTEN
    J'ai un serveur chez OVH (Linux Red Hat 7.2), et apache lancé et activé dessus.
    Tout ça fonctionne très bien.

    J'ai fait un petit :
    et je me suis apperçu qu'il y avait plusieurs port 80 (http) en écoute (LISTEN). En fait, il y a 10 processus http avec l'utilisateur nobody qui écoutent sur ce même port, et un avec l'utilisateur root.

    Je voulais savoir comment il est possible que des processus différents écoutent sur un seul et même port. Dh'abitude, quand j'essaye de faire ça en programmant avec les socket BSD, on me refuse de faire un bind car le port est déjà en écoute.
    D'autre part, comment l'utilisateur nobody peut-il se mettre en écoute sur le port 80 étant donné que celui-ci est dans la plage des ports admin (0-1023 je crois).
    Pourquoi apache a-t-il besoin de lancer 10 processus concurrents?
    Quand un utilisateur se connecte au site, quel est le processus qui prend le accept.

    J'ai essayé de killer les processus http de nobody, mais ceux-ci se relancent automatiquement. Je pense donc qu'il sont controllés par le processus http de l'utilisateur root. Cependant, il ne semble pas y avoir de fork() car les processus de nobody ne sont pas des fils du processus de root.

    Est-ce tout simplement la commande lsof qui se trompe et me répond des choses que j'ai mal interprétées?

    Bref, je cherche à avoir des infos supplémentaires là dessus.

    Je remarque que sous MacOS X (10.3.6), c'est la même chose sauf que seulement 4 processus de l'utilisateur http sont lancé en plus du root.

  2. #2
    Membre chevronné
    Avatar de Greg01
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2002
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2002
    Messages : 297
    Par défaut
    ça ne serait pas lié à apache, et notamment à un paramètre fixant le nombre de connexions simultanées ?

  3. #3
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Je viens de voir que c'est en effet, un paramètre d'Apache. Il lance plusieurs processus avec un autre user.

    Par contre, je ne sais toujours pas comment un utilisateur classique peut être en listen sur les ports inférieurs à 1024 d'une part, et je ne sais pas non plus comment plusieurs processus peuvent écouter sur le même port TCP.

  4. #4
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Les processus nobody sont bien des fils du processus root. Dans la configuration d'apache on peut préciser un certain nombre de processus à lancer en parallèle pour pouvoir servir plusieurs connexions simultanément. Inutile donc de chercher à les tuer, d'une part apache les relance automatiquement, d'autre part ils sont nécéssaires au bon fonctionnement du serveur. Si tu souhaites en avoir moins tu peux modifier ce nombre dans la conf d'apache.

    Comment un programme peut avoir un port < 1024 ouvert sans être root ? Simple : il suffit de l'ouvrir en root puis de faire un setuid() .

  5. #5
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    La commande ps -auxT m'indique que ce ne sont pas des fils du processus Apache.

    Comment plusieurs processus peuvent écouter sur le même port?

  6. #6
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Fais plutôt un 'ps faux' tu verras que ce sont bien des fils.

    Quand tu fais un fork tous les descripteurs de fichiers sont dupliqués, y compris les socket.

  7. #7
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Ca marche pas ton ps -faux.
    Comment le system arrive à savoir sur quel port en LISTEN doit être connecté l'hote distant?

    Existe-il des priorités?

  8. #8
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    J'ai dit "ps faux", pas "ps -faux"

    Je ne comprend pas ta question sur l'hôte distant ...

  9. #9
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Ca ne fonctionne pas non plus le ps faux.

    Pour l'hote distant, je me demandais juste sur quel processus la connexion allait être établie étant donné qu'il y a plusieurs ports 80 ouverts.

    Comment l'OS arrive-t-il à choisir sur quel port en LISTEN il doit connecter le client?

  10. #10
    Fry
    Fry est déconnecté
    Membre confirmé Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Par défaut
    effectivement avec winsock tu ne peut pas binder plusieur fois le meme port...
    ca vient peut etre du fait que c apache qui gere auxquel de ses processus les donne doive etre transmise mais alors je ne voi pas pourquoi tu voi plusieu bind?
    enfin j utilise pas trop linux...

  11. #11
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Avec n'importe quel type de descripteur, tu ne peux pas faire deux bind sur un même port. C'est plus une spécificité du protocole TCP en général qu'un type d'implémentation.

    Par contre, en effet, quand tu fais un fork() (duplication de processus, tous les descripteurs sont dupliqué aussi et ainsi, on a plusieurs processus qui écoutent sur le port 80.

    En fait, je pense maintenant avoir compris.
    Quand tu bind, tu as une file d'attente. Mais pour éviter de faire attendre d'autres connexions le temps que le processus père se remette en LISTEN, apache crée plusieurs processus d'avance. Ainsi, même si tu as beaucoup de connect simultanés arrivant sur un seul et même port, si le premier est en train de forker et n'est plus en LISTEN, c'est un second processus qui prend le relais car il est lui, en LISTEN sur ce même port.

    Après, je ne sais pas trop comment l'OS désigne les priorité sur les ports écoutant. Ca doit être un truc du style "dernier processus lancé" prend la connexion.

    Bref, je viens de comprendre.
    A mon avis, il faut vraiment avoir un paquet de requettes concurrentes pour que ce système soit utile. D'habitude, en prog réseau, on a pas besoin de faire ce genre de chose. Il suffit d'augmenter la taille de la queue du bind. Il faut dire aussi que le http requière des réponses rapides si on ne veut pas décourager la personne qui va sur le site.

    Je viens de m'appercevoir que cela a encore un autre avantage : le fait que les traitements http soit réparti sur plusieurs processeurs dès le LISTEN, mais bon, c'est un détail.

Discussions similaires

  1. Pinguer plusieurs Ports en utilisant un fichier INI
    Par fthdz dans le forum Langage
    Réponses: 16
    Dernier message: 14/11/2007, 13h26
  2. Appli qui ecoute sur plusieurs ports
    Par metalcoyote dans le forum Langage
    Réponses: 10
    Dernier message: 25/10/2007, 18h19
  3. Réponses: 11
    Dernier message: 08/03/2007, 14h29
  4. lecture de plusieurs port en même temps
    Par manaboko dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 15h26
  5. [VB6]Commander plusieurs ports parallèle
    Par fab+ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/03/2004, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo