# Socket d'Internet

Socket designa un concepte abstracte pel qual dos programes (possiblement situats a ordinadors diferents) poden intercanviar qualsevol flux de dades, generalment de manera fiable i ordenada. Tot socket està definit per una adreça de socket. L'adreça de socket és una combinació de tres elements: una adreça IP, un protocol de transport i un número de port (per exemple: 84.88.125.15, TCP, 2300).

## Comunicació i recursos

Perquè dos programes puguin comunicar-se entre si cal que es compleixin certs requisits:
* Que un programa sigui capaç de localitzar l'altre.
* Que ambdós programes siguin capaços d'intercanviar qualsevol seqüència de bytes, és a dir, dades rellevants a la seva finalitat.
Per això són necessaris els tres recursos que originen el concepte de socket:
* Un protocol de comunicacions, que permet l'intercanvi de bytes.
* Una adreça del protocol de xarxa (adreça IP, si es fa servir el Protocol TCP/IP), que identifica un ordinador.
* Un nombre de port, que identifica un programa dins d'un ordinador.
Els sockets permeten implementar una arquitectura client-servidor. La comunicació ha de ser iniciada per un dels programes que s'anomena programa client. El segon programa espera que un altre iniciï la comunicació, per aquest motiu s'anomena programa servidor.
Un socket és un fitxer informàtic existent a la màquina client i en la màquina servidora, que serveix en última instància perquè el programa servidor i el client llegeixin i escriguin la informació. Aquesta informació serà la transmesa per les diferents capes de xarxa.

## Propietats inherents als sòcols

Les propietats d'un socket depenen de les característiques del protocol en què s'implementen. El protocol més utilitzat és Transmission Control Protocol, encara que també és possible utilitzar UDP o IPX.
Gràcies al protocol TCP, els sockets tenen les següents propietats:
* Orientat a connexió.
* Es garanteix la transmissió de tots els bytes sense errors ni omissions.
* Es garanteix que tot octet arribarà al seu destí en el mateix ordre en què s'ha transmès.
Aquestes propietats són molt importants per a garantir la correcció dels programes que tracten la informació.
El protocol UDP és un protocol no orientat a la connexió. Només es garanteix que si un missatge arriba, arribi bé. En cap cas es garanteix que arribi o que arribin tots els missatges en el mateix ordre que es van enviar. Això ho fa adequat per a l'enviament de missatges freqüents però no gaire importants, com per exemple, missatges per als refrescos (actualitzacions) d'un gràfic ..

## Qüestions d'aplicació

Els sockets són usualment implementat per una API, com ara la biblioteca de Berkeley sockets, per primera vegada el 1983. La majoria de les implementacions es basen en sockets de Berkeley, per exemple Winsock que es va introduir el 1991.
A continuació, es mostren alguns exemples de funcions o mètodes utilitzats proporcionats per la biblioteca API.:
* socket: crea un nou socket d'un cert tipus, identificat per un número. És a on el sistema assignarà els recursos
* bind: es fa servir normalment en el costat del servidor, i associa un socket amb una estructura de direcció del port, és a dir, un determinat nombre de port i l'adreça IP.
* listen: es fa servir en el costat del servidor, i les causes d'un salt del socket TCP per entrar en estat d'escolta.
* connect: es fa servir en el costat del client, i assigna un nombre lliure de port a un socket. En el cas d'un socket TCP, fa un intent d'establir una nova connexió TCP.
* accept: es fa servir en el servidor. Accepta un intent per crear una connexió TCP des del client, i crea un nou socket associat a aquesta connexió
* send i recv, o write i read, o recvfrom i sendto: s'utilitzen per enviar i rebre dades a través dels sockets.
* close: fa que el sistema alliberi els recursos assignats a un socket. En el cas d'una connexió TCP, la connexió s'acaba.
* gethostbyname i gethostbyaddr: s'utilitzen per obtenir els noms de host i les adreces.
* select: es fa servir per revisar una llista proporcionada de sockets, permet comprovar aquells que estan preparats per llegir, escriure o tenen errors
* poll: es fa servir per comprovar l'estat d'un socket. El socket es pot testejar per veure si es pot escriure, llegir o té errors.

## Orígens

En els orígens d'Internet, les primeres computadores a implementar els seus protocols van ser aquelles de la universitat de Berkeley. Aquesta implementació va tenir lloc amb un sabor del sistema operatiu Unix coneguda com a BSD Unix. Aviat es va fer evident que els programadors necessitarien un mitjà senzill i eficaç per escriure programes capaços d'intercomunicar entre si. Aquesta necessitat va donar origen a la primera especificació i implementació de sockets, també en Unix. Avui dia, els sockets estan implementats com biblioteques de programació per a multitud de sistemes operatius, simplificant la tasca dels programadors.

## Variants

Hi ha una variant dels sockets anomenada Unix domain sockets, o bé, Interprocess communication sockets (IPC sockets). Aquests es troben especificats en la norma POSIX i tenen com a propòsit la intercomunicació entre programes dins de la mateixa ordinador, facilitant així l'optimització de recursos per aquest cas en concret.

## Referències

* ↑ Stevens, Richard. UNIX Network Programming, Volume 1, Second Edition: Networking APIs: Sockets. ISBN 0-13-490012-X.

## Vegeu també

* Sòcol de CPU
* Layered Service Provider

## Enllaços externs

* Tutorial simple de sockets