Socket on yksi perustekniikoista tietokoneverkkojen ohjelmointiin. Socketin avulla verkkoohjelmistosovellukset voivat kommunikoida käyttämällä verkkolaitteistoon ja käyttöjärjestelmiin sisäänrakennettuja vakiomekanismeja. Vaikka se kuulostaa toiselta Internet-ohjelmistokehityksen tunnusmerkiltä, socket-tekniikka oli olemassa ennen Webiä. Monet suositut verkkoohjelmistosovellukset käyttävät pistorasioita.
Mitä pistorasiatekniikka voi tehdä verkossasi
Socket edustaa yhtä yhteyttä täsmälleen kahden ohjelmiston välillä (point-to-point-yhteys). Useampi kuin kaksi ohjelmistoa voi kommunikoida asiakkaan/palvelimen tai hajautettujen järjestelmien kanssa useiden pistokkeiden avulla. Esimerkiksi monet verkkoselaimet voivat kommunikoida samanaikaisesti yhden web-palvelimen kanssa käyttämällä palvelimelle luotuja pistorasioita. Socket-pohjaiset ohjelmistot toimivat yleensä kahdella erillisellä verkossa olevalla tietokoneella, mutta pistokkeilla voidaan myös kommunikoida paikallisesti (interprocess) yhdellä tietokoneella. Pistorasiat ovat kaksisuuntaisia, mikä tarkoittaa, että yhteyden molemmat puolet voivat sekä lähettää että vastaanottaa dataa. Joskus viestinnän aloittavaa sovellusta kutsutaan asiakkaaksi ja toista sovellusta palvelimeksi, mutta tämä terminologia johtaa sekaannukseen vertaisverkoissa, ja sitä tulisi yleensä välttää.
Socket API:t ja kirjastot
Internetissä on useita kirjastoja, jotka toteuttavat standardisovellusohjelmointirajapintoja (API). Ensimmäinen valtavirran paketti, Berkeley Socket Library, on laajalti käytössä UNIX-järjestelmissä. Toinen yleisesti käytetty API on Windows Sockets (WinSock) -kirjasto Microsoft-käyttöjärjestelmille. Socket API:t ovat kypsiä muihin laskentatekniikoihin verrattuna. WinSock on ollut käytössä vuodesta 1993 ja Berkeley socketit vuodesta 1982. Socket API:t ovat suhteellisen pieniä ja yksinkertaisia. Monet toiminnot ovat samanlaisia kuin tiedostojen syöttö-/suoritusrutiineissa käytetyt, kuten lukea(), kirjoittaa() ja kiinni() . Varsinaiset käytettävät funktiokutsut riippuvat valitusta ohjelmointikielestä ja socket-kirjastosta.
Socket-liitäntätyypit
Socket-liitännät voidaan jakaa kolmeen luokkaan:
- Virtaliitännät: Tämä on yleisin tyyppi. Molemmat kommunikoivat osapuolet muodostavat ensin socket-yhteyden, jonka jälkeen kaikki tämän yhteyden kautta lähetetty data taataan saapuvan samassa järjestyksessä kuin se lähetettiin (käyttämällä yhteyslähtöistä ohjelmointimallia).
- Datagram-pistokkeet: Tarjoa yhteydetöntä semantiikkaa. Datagrammeilla yhteydet ovat implisiittisiä eivätkä eksplisiittisiä kuten virtojen kohdalla. Molemmat osapuolet lähettävät datagrammit tarpeen mukaan ja odottavat toisen vastausta. Viestit voivat kadota tai vastaanottaa epäkunnossa lähetyksen aikana; sovellus käsittelee nämä ongelmat, ei pistorasiat. Datagrammivastakkeiden käyttöönotto voi parantaa joidenkin sovellusten suorituskykyä ja lisää joustavuutta stream-vastakkeiden käyttöön verrattuna.
- Karkeat pistorasiat: Ohita kirjaston sisäänrakennettu tuki vakioprotokollille, kuten TCP ja UDP. Raw-socketteja käytetään matalan tason mukautettujen protokollien kehittämiseen.
Socket-tuki verkkoprotokollassa
Nykyaikaisia verkkoliitäntöjä käytetään yleensä Internet-protokollien IP, TCP ja UDP kanssa. Kirjastot, jotka toteuttavat Internet Protocol -socketteja, käyttävät TCP:tä streameille, UDP:tä datagrammeille ja IP:tä raakapistokkeille. Internetin kautta kommunikoidakseen IP-vastakekirjastot käyttävät IP-osoitetta tiettyjen tietokoneiden tunnistamiseen. Monet osat Internetiä käyttävät nimeämispalveluita, jotta käyttäjät ja pistorasiaohjelmoijat voivat työskennellä tietokoneiden kanssa nimen (esimerkiksi thiscomputer.wireless.lifewire.com) sijaan osoitteen (esimerkiksi 208.185.127.40) perusteella. Stream- ja datagrammiliitännät käyttävät myös IP-porttinumeroita useiden sovellusten erottamiseen toisistaan. Esimerkiksi Internet-selaimet osaavat käyttää porttia 80 oletuksena socket-viestinnässä verkkopalvelimien kanssa.