Los servers corren en computadoras específicas y tienen normalmente un socket asociado a un port específico. El server espera “escuchando” al socket por un cliente que haga un pedido de conexión.
Del lado del cliente, que conoce el hostname de la máquina donde el servidor está corriendo y el número de puerto donde el server está “escuchando”, hace un pedido de conexión identificándose y la asocia a un puerto local asignado por el sistema durante la conexión.
Si la conexión es aceptada, el server asocia un nuevo socket al mismo puerto que también tiene sus endpoints remotos en la dirección y puerto del cliente; así poder seguir escuchando el original para otras conexiones.
Del lado del cliente, se crea un socket que el cliente usa para comunicarse con el server leyendo y escribiendo a través del los mismos.
Un socket es un endpoint en una comunicación bidireccional entre dos programas corriendo en una red. Un socket está asociado a un número de puerto tal que la capa TCP pueda identificar la aplicación a la que la información está destinada.
Un endpoint es una combinación de una dirección IP y un número de puerto. Cada conexión TCP puede ser unívocamente identificada por estos dos endpoints. De esta forma se pueden tener varias conexiones entre el host y el servidor.
A network socket is an internal endpoint for sending or receiving data within a node on a computer network. Concretely, it is a representation of this endpoint in networking software (protocol stack), such as an entry in a table (listing communication protocol, destination, status, etc.), and is a form of system resource.
El término es análogo a un conector físico hembra, una conexión entre dos nodos de una red a través de un canal visualizado como un cable con dos conectores machos que se conectan en los sockets.
De la misma manera el término puerto es usado para enpoints externos a un nodo mientras que el primero a nodos internos.