Presa di rete - Network socket

Un socket di rete è una struttura software all'interno di un nodo di rete di una rete di computer che funge da endpoint per l'invio e la ricezione di dati attraverso la rete. La struttura e le proprietà di un socket sono definite da un'interfaccia di programmazione dell'applicazione (API) per l'architettura di rete. I socket vengono creati solo durante la durata di un processo di un'applicazione in esecuzione nel nodo.

A causa della standardizzazione dei protocolli TCP/IP nello sviluppo di Internet , il termine socket di rete è più comunemente usato nel contesto della suite di protocolli Internet, ed è quindi spesso indicato anche come socket Internet . In questo contesto, un socket è identificato esternamente ad altri host dal suo indirizzo socket , che è la triade di protocollo di trasporto , indirizzo IP e numero di porta .

Il termine socket viene utilizzato anche per l'endpoint software della comunicazione tra processi interni al nodo (IPC), che spesso utilizza la stessa API di un socket di rete.

Utilizzo

L'uso del termine presa nel software è analogo alla funzione di un connettore elettrico femmina , un dispositivo hardware per la comunicazione tra nodi interconnessi con un cavo elettrico . Allo stesso modo, il termine porta viene utilizzato per gli endpoint fisici esterni su un nodo o un dispositivo.

L'interfaccia di programmazione dell'applicazione (API) per lo stack del protocollo di rete crea un handle per ogni socket creato da un'applicazione, comunemente indicato come descrittore di socket . Nei sistemi operativi simili a Unix , questo descrittore è un tipo di descrittore di file . Viene memorizzato dal processo dell'applicazione per essere utilizzato con ogni operazione di lettura e scrittura sul canale di comunicazione.

Al momento della creazione con l'API, un socket di rete è vincolato alla combinazione di un tipo di protocollo di rete da utilizzare per le trasmissioni, un indirizzo di rete dell'host e un numero di porta . Le porte sono risorse numerate che rappresentano un altro tipo di struttura software del nodo. Sono utilizzati come tipi di servizio e, una volta creati da un processo, fungono da componente di posizione indirizzabile esternamente (dalla rete), in modo che altri host possano stabilire connessioni.

I socket di rete possono essere dedicati a connessioni persistenti per la comunicazione tra due nodi, oppure possono partecipare a comunicazioni senza connessione e multicast .

In pratica, a causa della proliferazione dei protocolli TCP/IP in uso su Internet, il termine socket di rete si riferisce solitamente all'utilizzo con l' Internet Protocol (IP). Viene quindi spesso chiamato anche presa Internet .

Indirizzi socket

Un'applicazione può comunicare con un processo remoto scambiando dati con TCP/IP conoscendo la combinazione di tipo di protocollo, indirizzo IP e numero di porta. Questa combinazione è spesso nota come indirizzo socket . È l'handle di accesso rivolto alla rete al socket di rete. Il processo remoto stabilisce un socket di rete nella propria istanza dello stack di protocollo e utilizza l'API di rete per connettersi all'applicazione, presentando il proprio indirizzo socket per l'utilizzo da parte dell'applicazione.

Implementazione

Uno stack di protocolli , solitamente fornito dal sistema operativo (piuttosto che come libreria separata, per esempio), è un insieme di servizi che consentono ai processi di comunicare su una rete utilizzando i protocolli implementati dallo stack. Il sistema operativo inoltra il payload dei pacchetti IP in entrata all'applicazione corrispondente estraendo le informazioni sull'indirizzo del socket dall'IP e dalle intestazioni del protocollo di trasporto e rimuovendo le intestazioni dai dati dell'applicazione.

L' interfaccia di programmazione dell'applicazione (API) utilizzata dai programmi per comunicare con lo stack di protocollo, utilizzando i socket di rete, è chiamata API socket . Lo sviluppo di programmi applicativi che utilizzano questa API è chiamato programmazione socket o programmazione di rete . Le API dei socket Internet sono generalmente basate sullo standard dei socket Berkeley . Nello standard dei socket Berkeley, i socket sono una forma di descrittore di file , a causa della filosofia Unix secondo cui "tutto è un file" e delle analogie tra socket e file. Entrambi hanno funzioni per leggere, scrivere, aprire e chiudere. In pratica le differenze mettono a dura prova l'analogia e su un socket vengono utilizzate interfacce diverse (invio e ricezione). Nella comunicazione tra processi , ciascuna estremità ha generalmente il proprio socket.

Nei protocolli Internet standard TCP e UDP, un indirizzo socket è la combinazione di un indirizzo IP e un numero di porta , proprio come un'estremità di una connessione telefonica è la combinazione di un numero di telefono e un particolare interno . I socket non devono avere un indirizzo di origine, ad esempio, solo per inviare dati, ma se un programma associa un socket a un indirizzo di origine, il socket può essere utilizzato per ricevere i dati inviati a quell'indirizzo. Sulla base di questo indirizzo, i socket Internet consegnano i pacchetti di dati in entrata al processo applicativo appropriato .

Socket si riferisce spesso in modo specifico a un socket Internet oa un socket TCP. Una presa Internet è minimamente caratterizzata da quanto segue:

  • indirizzo del socket locale, costituito dall'indirizzo IP locale e (per TCP e UDP, ma non IP) un numero di porta
  • protocollo: un protocollo di trasporto, ad es. TCP, UDP, IP non elaborato. Ciò significa che gli endpoint (locali o remoti) con la porta TCP 53 e la porta UDP 53 sono socket distinti, mentre IP non ha porte.
  • Un socket che è stato connesso a un altro socket, ad esempio durante l'instaurazione di una connessione TCP, ha anche un indirizzo di socket remoto.

Definizione

Le distinzioni tra socket (rappresentazione interna), descrittore di socket (identificatore astratto) e indirizzo di socket (indirizzo pubblico) sono sottili, e questi non sono sempre distinti nell'uso quotidiano. Inoltre, le definizioni specifiche di un socket differiscono tra gli autori. In IETF Request for Comments , Internet Standards , in molti libri di testo e in questo articolo, il termine socket si riferisce a un'entità identificata in modo univoco dal numero di socket. In altri libri di testo, il termine socket si riferisce a un indirizzo socket locale, ovvero una "combinazione di un indirizzo IP e di un numero di porta". Nella definizione originale di socket data in RFC 147, poiché era correlata alla rete ARPA nel 1971, "il socket è specificato come un numero a 32 bit con socket pari che identificano i socket di ricezione e socket dispari che identificano i socket di invio". Oggi, tuttavia, le comunicazioni socket sono bidirezionali.

All'interno del sistema operativo e dell'applicazione che ha creato un socket, un socket è indicato da un valore intero univoco chiamato descrittore di socket .

Utensili

Su sistemi operativi simili a Unix e Microsoft Windows , gli strumenti della riga di comando netstat o ss vengono utilizzati per elencare i socket stabiliti e le informazioni correlate.

Esempio

Questo esempio, modellato secondo l'interfaccia del socket Berkeley, invia la stringa "Hello, world!" via TCP alla porta 80 dell'host con indirizzo 1.2.3.4. Illustra la creazione di un socket (getSocket), la connessione all'host remoto, l'invio della stringa e infine la chiusura del socket:

Socket mysocket = getSocket(type = "TCP")
connect(mysocket, address = "1.2.3.4", port = "80")
send(mysocket, "Hello, world!")
close(mysocket)

tipi

Sono disponibili diversi tipi di presa Internet:

Prese Datagram
Socket senza connessione , che utilizzano il protocollo UDP ( User Datagram Protocol ). Ogni pacchetto inviato o ricevuto su un socket datagramma è indirizzato e instradato individualmente. L'ordine e l'affidabilità non sono garantiti con i socket datagram, quindi più pacchetti inviati da una macchina o un processo a un altro possono arrivare in qualsiasi ordine o potrebbero non arrivare affatto. Potrebbe essere necessaria una configurazione speciale per inviare trasmissioni su un socket datagramma. Per ricevere pacchetti di trasmissione, un socket di datagramma non dovrebbe essere associato a un indirizzo specifico, sebbene in alcune implementazioni, i pacchetti di trasmissione possano essere ricevuti anche quando un socket di datagramma è associato a un indirizzo specifico.
Prese di streaming
Socket orientati alla connessione, che utilizzano TCP ( Transmission Control Protocol ), SCTP ( Stream Control Transmission Protocol ) o DCCP ( Datagram Congestion Control Protocol ). Uno stream socket fornisce un flusso sequenziale e unico di dati privi di errori senza limiti di record, con meccanismi ben definiti per creare e distruggere connessioni e segnalare errori. Un socket di flusso trasmette i dati in modo affidabile , in ordine e con capacità fuori banda . Su Internet, gli stream socket vengono generalmente implementati utilizzando TCP in modo che le applicazioni possano essere eseguite su qualsiasi rete utilizzando il protocollo TCP/IP.
Prese grezze
Consenti l'invio e la ricezione diretti di pacchetti IP senza alcuna formattazione del livello di trasporto specifica del protocollo. Con altri tipi di socket, il payload viene automaticamente incapsulato in base al protocollo del livello di trasporto scelto (ad es. TCP, UDP) e l'utente del socket non è a conoscenza dell'esistenza di intestazioni di protocollo che vengono trasmesse con il payload. Quando si legge da un socket non elaborato, le intestazioni sono generalmente incluse. Quando si trasmettono pacchetti da un socket raw, l'aggiunta automatica di un'intestazione è facoltativa.
La maggior parte delle interfacce di programmazione delle applicazioni (API) socket , ad esempio quelle basate sui socket Berkeley , supportano i socket non elaborati. Windows XP è stato rilasciato nel 2001 con il supporto raw socket implementato nell'interfaccia Winsock , ma tre anni dopo Microsoft ha limitato il supporto raw socket di Winsock a causa di problemi di sicurezza.
I socket grezzi vengono utilizzati in applicazioni relative alla sicurezza come Nmap . Un caso d'uso per i socket non elaborati è l'implementazione di nuovi protocolli a livello di trasporto nello spazio utente . I socket grezzi sono in genere disponibili nelle apparecchiature di rete e utilizzati per protocolli di routing come Internet Group Management Protocol (IGMP) e Open Shortest Path First (OSPF) e nell'Internet Control Message Protocol (ICMP) utilizzato, tra le altre cose, da l' utilità di ping .

Altri tipi di socket sono implementati su altri protocolli di trasporto, come Systems Network Architecture e socket di dominio Unix per la comunicazione interna tra processi.

Stati socket nel modello client-server

I processi del computer che forniscono servizi applicativi sono detti server e creano socket all'avvio che sono in stato di ascolto . Questi socket sono in attesa di iniziative dai programmi client .

Un server TCP può servire più client contemporaneamente creando un socket dedicato univoco per ogni connessione client in un nuovo processo figlio o thread di elaborazione per ogni client. Questi sono nello stato stabilito quando una connessione virtuale socket-to-socket o circuito virtuale (VC), noto anche come sessione TCP , viene stabilita con il socket remoto, fornendo un flusso di byte duplex .

Un server può creare diversi socket TCP stabiliti contemporaneamente con lo stesso numero di porta locale e indirizzo IP locale, ciascuno mappato al proprio processo figlio del server, che serve il proprio processo client. Sono trattati come socket diversi dal sistema operativo poiché l'indirizzo del socket remoto (l'indirizzo IP del client o il numero di porta) è diverso; cioè poiché hanno diverse tuple di coppie di socket .

I socket UDP non hanno uno stato stabilito , perché il protocollo è senza connessione . Un processo server UDP gestisce i datagrammi in entrata da tutti i client remoti in modo sequenziale attraverso lo stesso socket. I socket UDP non sono identificati dall'indirizzo remoto, ma solo dall'indirizzo locale, sebbene ogni messaggio abbia un indirizzo remoto associato che può essere recuperato da ogni datagramma con l'interfaccia di programmazione dell'applicazione di rete (API).

Coppie di prese

I socket di comunicazione locali e remoti sono chiamati coppie di socket . Ciascuna coppia di socket è descritta da un'unica tupla composta da indirizzi IP di origine e destinazione e numeri di porta, ovvero indirizzi di socket locali e remoti. Come discusso in precedenza, nel caso TCP, una coppia di socket è associata a ciascuna estremità della connessione con una 4-tupla univoca.

Storia

Il termine socket risale alla pubblicazione di RFC 147 nel 1971, quando fu utilizzato in ARPANET. La maggior parte delle moderne implementazioni dei socket si basa sui socket Berkeley (1983) e su altri stack come Winsock (1991). L'API dei socket Berkeley nella Berkeley Software Distribution (BSD), è nata con il sistema operativo Unix 4.2BSD come API. Solo nel 1989, tuttavia, l' UC Berkeley ha potuto rilasciare versioni del suo sistema operativo e della libreria di rete libere dai vincoli di licenza di Unix protetto da copyright di AT&T .

In c. 1987 AT & T illustra la FLUSSI -based Transport Layer Interface (TLI) in UNIX System V Release 3 (srv3). e continuato nella versione 4 (SVR4).

Altre prime implementazioni sono state scritte per TOPS-20 , MVS , VM , IBM-DOS (PCIP).

Prese nelle apparecchiature di rete

Il socket è principalmente un concetto utilizzato nel livello di trasporto della suite di protocolli Internet o nel livello di sessione del modello OSI . Le apparecchiature di rete come i router , che operano a livello di Internet e gli switch , che operano a livello di collegamento , non richiedono implementazioni del livello di trasporto. Tuttavia, firewall di rete stateful , traduttori di indirizzi di rete e server proxy tengono traccia delle coppie di socket attive. Negli switch multistrato e nel supporto della qualità del servizio (QoS) nei router, i flussi di pacchetti possono essere identificati estraendo informazioni sulle coppie di socket.

I socket grezzi sono in genere disponibili nelle apparecchiature di rete e vengono utilizzati per protocolli di routing come IGRP e OSPF e per Internet Control Message Protocol (ICMP).

Guarda anche

Riferimenti

Ulteriori letture

  • Jones, Antonio; Ohlund, Jim (2002). Programmazione di rete per Microsoft Windows . ISBN 0-7356-1579-9.

link esterno