Socket d'Internet

De Viquipèdia
Dreceres ràpides: navegació, cerca

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).

Perquè dos programes puguin comunicar entre si és necessari 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 s'utilitza 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[modifica | modifica el codi]

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 massa importants, com per exemple, missatges per als refrescos (actualitzacions) d'un gràfic ..

Qüestions d'aplicació[modifica | modifica el codi]

Diagrama de flux d'un socket TCP.

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.:[1]

  • socket(): crea un nou socket d'un cert tipus, identificat per un número. És a on el sistema assignarà els recursos
  • bind(): s'utilitza 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(): s'utilitza en el costat del servidor, i les causes d'un salt del socket TCP per entrar en estat d'escolta.
  • connect(): s'utilitza 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(): s'utilitza 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(): s'utilitza per revisar una llista proporcionada de sockets, permet comprovar aquells que estan preparats per llegir, escriure o tenen errors
  • poll(): s'utilitza per comprovar l'estat d'un socket. El socket es pot testejar per veure si es pot escriure, llegir o té errors.

Orígens[modifica | modifica el codi]

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[modifica | modifica el codi]

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.

Vegeu també[modifica | modifica el codi]

Referències[modifica | modifica el codi]

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

Enllaços externs[modifica | modifica el codi]

Biblioteques de sockets 
S'enumeren algunes de les biblioteques de comunicacions existents, que utilitzen els protocols Transmission Control Protocol i UDP per a diferents sistemes operatius.
  • SolarSockets Biblioteca per C Multiplataforma i Mutithread, gratuïta per projectes lliures. Fàcil d'usar i amb diversos Exemples.
  • Indy.sockets Biblioteca de codi obert per Delphi Win32/Kilyx/Free Pascal/Delphi.NET/c #/VB.NET/Mono. Implementa més de 100 protocols (SMTP/POP3/IMAP/NNTP i un llarg etcètera).
  • NET Proporciona funcions i tipus de dada multiplataforma per a programar aplicacions que treballin amb xarxes.
  • C Sockets Library Aquesta és una biblioteca de classes en C sota llicència GPL que 'mapeja' el berkeley sockets C API, i funciona tant en alguns sistemes Unix com en win32.
  • GNU Common C Biblioteca de propòsit general que inclou funcions de xarxa.
  • [1] Biblioteca de comunicacions per crear jocs multiintèrpret.
  • DirectX - DirectPlay Simplifica l'accés de les aplicacions als serveis de comunicació.