Liaison d'adresses à des sockets
La liaison d'adresses à des sockets dans le domaine Internet nécessite un certain nombre de considérations. Les numéros de port sont alloués à partir d'espaces distincts, un pour chaque système et un pour chaque domaine sur ce système.
L'adressage générique est fourni pour faciliter la liaison d'adresse locale dans le domaine Internet. Lorsqu'une adresse est spécifiée comme INADDR_ANY (constante définie dans le fichier netinet/in.h ), le système l'interprète comme une adresse valide.
Les sockets avec des adresses locales génériques peuvent recevoir des messages dirigés vers le numéro de port spécifié et envoyés à l'une des adresses possibles affectées à un hôte. Si un processus serveur souhaite connecter uniquement des hôtes sur un réseau donné, il lie l'adresse des hôtes sur le réseau approprié.
Un port local peut être spécifié ou laissé non spécifié (désigné par 0), auquel cas le système sélectionne un numéro de port approprié pour ce port.
- Le nom du système à partir duquel l'utilisateur se connecte se trouve dans le fichier /etc/hosts.equiv sur le système auquel l'utilisateur tente de se connecter (ou le nom du système et le nom de l'utilisateur se trouvent dans le fichier .rhosts de l'utilisateur dans le répertoire de base de l'utilisateur).
- Le processus de connexion de l'utilisateur provient d'un port privilégié sur la machine à partir de laquelle l'utilisateur se connecte.
Le numéro de port et l'adresse réseau de la machine à partir de laquelle l'utilisateur se connecte peuvent être déterminés par le résultat du paramètre De de la sous-routine accept ou par la sous-routine getpeername .
Dans certains cas, l'algorithme utilisé par le système pour sélectionner les numéros de port ne convient pas à un programme d'application. En effet, les associations sont créées dans un processus en deux étapes. Par exemple, le protocole FTP (Internet File Transfer Protocol) indique que les connexions de données doivent toujours provenir du même port local. Toutefois, les associations en double sont évitées en se connectant à différents ports externes. Dans ce cas, le système n'autorise pas la liaison de la même adresse locale et du même numéro de port à un socket si un socket de connexion de données précédent existe toujours. Pour remplacer l'algorithme de sélection de port par défaut, une sous-routine setsockopt doit être exécutée avant la liaison d'adresse.
La sous-routine socket crée un socket sans association à des adresses locales ou de destination. Pour les protocoles Internet, cela signifie qu'aucun numéro de port de protocole local n'a été affecté. Dans de nombreux cas, les programmes d'application ne se soucient pas de l'adresse locale qu'ils utilisent et sont prêts à autoriser le logiciel de protocole à en choisir une pour eux. Toutefois, les processus serveur qui fonctionnent sur un port identifié doivent pouvoir spécifier ce port sur le système. Une fois qu'un socket a été créé, un serveur utilise la sous-routine bind pour établir une adresse locale pour ce socket.
Toutes les liaisons possibles ne sont pas valides. Par exemple, l'appelant peut demander un port de protocole local déjà utilisé par un autre programme ou une adresse Internet locale non valide. Dans de tels cas, la sous-routine bind échoue et renvoie un message d'erreur.