II. Ambiente
Assumiamo che l’host disponga di un sistema operativo a condivisione di tempo in cui la CPU è condivisa dai processi.
Immaginiamo che ogni processo sia contrassegnato da un numero utente. Possono esistere più processi con lo stesso numero utente; in tal caso, dovrebbero tutti cooperare riguardo all’uso della rete.
Immaginiamo che ogni processo contenga un insieme di porte uniche per quel processo. Queste porte sono usate per l’input verso il processo o l’output dal processo, da o verso file, dispositivi o altri processi.
Immaginiamo inoltre che un processo non venga messo in attesa (cioè bloccato o sospeso) quando tenta una LISTEN o una CONNECT. Viene invece informato quando un’azione è stata completata. Naturalmente un processo può sospendersi da sé in modo da risvegliarsi solo al verificarsi di qualche evento esterno.
Per svolgere attività di rete, un processo collega un socket locale a una delle sue porte. I socket sono identificati da numero utente, host e AEN; un socket è locale a un processo se i numeri utente dei due coincidono e si trovano sullo stesso host. Pertanto, un processo deve specificare solo un AEN quando si riferisce a un socket locale.
Ogni porta ha uno stato che viene modificato dalle chiamate di sistema e da eventi concorrenti esterni al processo (ad esempio un comando di ‘chiusura della connessione’ da un host remoto). Il processo può esaminare lo stato di una porta in qualsiasi momento (tramite la chiamata di sistema STATUS).
Assumiamo una corrispondenza biunivoca tra porte e socket.