Aller au contenu principal

Appels système et commandes de contrôle

Nous esquissons ici les mécanismes d'établissement, de commutation et de rupture d'une connexion. Comme indiqué plus haut, le NCP interagit avec les processus utilisateurs par l'intermédiaire d'appels système et avec les autres NCP par l'intermédiaire de commandes de contrôle. Nous commençons donc par une description partielle des appels système et des commandes de contrôle.

Les appels système varient d'un système d'exploitation à l'autre, de sorte que la description suivante n'est qu'indicative. Nous supposons ici qu'un processus dispose de plusieurs voies d'entrée-sortie que nous appellerons ports. Chaque port peut être connecté à un périphérique d'I/O séquentiel et, tant qu'il est connecté, transmet des informations dans une seule direction. Nous supposons en outre que le processus est bloqué (suspendu, endormi) pendant que la transmission se déroule. Voici la liste des appels système :

Init      <port>, <AEN 1>, <AEN 2>, <foreign socket>
where <port> is part of the process issuing the Init
_
<AEN 1> |
and +- are 8-bit AEN's (see Figure 2)
<AEN 2> |
_|

Le premier AEN sert à établir la connexion ; le second est utilisé tant que la connexion existe.

<foreign socket> est le nom de socket de 40 bits de l'extrémité distante de la connexion.

Les bits de poids faible de <AEN 1> et <AEN 2> doivent concorder, et ceux-ci doivent être le complément du bit de poids faible de <foreign socket>.

Le NCP concatène <AEN 1> et <AEN 2> chacun avec le numéro d'utilisateur du processus et le numéro de HOST pour former des sockets de 40 bits. Il envoie ensuite une commande de contrôle Request for Connection (RFC) au NCP distant. Lorsque le NCP distant répond positivement, la connexion est établie et le processus est débloqué. Si le NCP distant répond négativement, le NCP local débloque le processus demandeur, mais l'informe que l'appel système a échoué.

Listen <port>, <AEN 1>

où <port> et <AEN 1> sont tels que ci-dessus. Le NCP conserve les ports et <AEN 1> et bloque le processus. Lorsqu'une commande de contrôle RFC arrive en nommant la socket locale, le processus est débloqué et averti qu'un processus étranger appelle.

Accept <AEN 2>

Une fois qu'un Listen a été satisfait, le processus peut soit refuser l'appel, soit l'accepter et le commuter vers une autre socket. Pour accepter l'appel, le processus émet l'appel système Accept. Le NCP renvoie alors une commande de contrôle RFC.

Close <port>

Après avoir établi une connexion, un processus émet un Close pour rompre la connexion. Le Close est également émis après un Listen pour refuser un appel.

Transmit <port>, <addr>

Si <port> est attachée à une socket d'émission, <addr> pointe vers un message à envoyer. Ce message est précédé de sa longueur en bits.

Si <port> est attachée à une socket de réception, un message est stocké à <addr>. La longueur du message est stockée en premier.

Commandes de contrôle​

Un vocabulaire de commandes de contrôle a été défini pour la communication entre programmes de contrôle du réseau. Chaque commande de contrôle se compose d'un code d'opération de 8 bits indiquant sa fonction, suivi de quelques paramètres. Le nombre et le format des paramètres sont fixes pour chaque code d'opération. Une séquence de commandes de contrôle destinée à un hôte particulier peut être regroupée dans un seul message de contrôle.

RFC   <my socket 1>, <my socket 2>.
<your socket>, (<link>)

Cette commande est envoyée parce qu'un processus a exécuté soit un appel système Init, soit un appel système Accept. Une liaison est attribuée par le récepteur potentiel, elle est donc omise si <my socket 1> est une socket d'émission.

Il y a un avantage certain à utiliser les mêmes commandes à la fois pour établir une connexion (Init) et pour accepter un appel (Accept). Si la commande de réponse différait de la commande d'initiation, deux processus pourraient s'appeler mutuellement et se retrouver bloqués en attendant que l'autre réponde. Avec ce schéma, aucun interblocage ne se produit et il offre un moyen plus compact de connecter un ensemble de processus.

CLS      <my socket>, <your socket>

La connexion spécifiée est terminée

CEASE    <link>

Lorsque le processus récepteur ne consomme pas son entrée aussi vite qu'elle arrive, l'espace tampon de l'hôte récepteur sert à mettre en file d'attente les messages en attente. Comme l'espace disponible est généralement limité, l'hôte récepteur peut avoir besoin d'empêcher l'hôte émetteur d'envoyer d'autres messages sur la connexion en cause. Lorsque l'hôte émetteur reçoit cette commande, il peut bloquer le processus qui génère les messages.

RESUME   <link>

Cette commande est également envoyée de l'hôte récepteur à l'hôte émetteur et annule un CEASE précédent.