Ci sono grandi differenze quando parliamo di "programmazione socket" rispetto a "programmazione di rete"?
Ci sono argomenti che riguardano "programmazione di rete" ma non "programmazione di socket"?
Ci sono grandi differenze quando parliamo di "programmazione socket" rispetto a "programmazione di rete"?
Ci sono argomenti che riguardano "programmazione di rete" ma non "programmazione di socket"?
La programmazione dei socket (almeno come il termine è normalmente usato) è la programmazione per una specifica API di rete. I socket supportano i protocolli basati su IP (principalmente TCP e UDP) 1 .
La programmazione di rete può essere eseguita utilizzando varie altre API. Windows ha un numero di API indipendenti dal protocollo, come le funzioni WNet * e Net *. Le versioni precedenti di Windows utilizzavano anche NetBIOS / NetBEUI (NetBIOS End User Interface) e la maggior parte supportata (e probabilmente lo fa ancora) IPX / SPX (un vecchio protocollo Netware).
La maggior parte della programmazione di rete corrente, tuttavia, viene eseguita usando i socket direttamente o usando vari altri livelli sopra i socket (ad esempio, molto viene fatto su HTTP, che è normalmente implementato con TCP su socket). TCP / IP e UDP / IP (così come una serie di altri protocolli basati su IP) sono fatti principalmente tramite l'interfaccia socket. In teoria, potrebbero essere utilizzate altre interfacce di programmazione, ma in pratica le prese sembrano essere sufficienti, quindi non c'è molto interesse a sostituirlo. Dovrei, tuttavia, ricordare che Windows Sockets (WinSock) ha alcune estensioni che sono più o meno uniche per Windows. Suppongo che sia aperto a qualche argomento se il codice che usa queste estensioni si qualifica realmente come codice "socket" o meno - sono estensioni basate sugli stessi concetti, ma il codice che le usa non è normalmente trasferibile su altri sistemi. Immagino che la qualifica come "socket" o no dipenda principalmente dal fatto che tu pensi che le prese siano più un concetto, o un insieme molto specifico di funzioni, parametri, ecc.
Modifica (in risposta al commento):
È un po 'difficile dire se "conoscere gli zoccoli" implica conoscere "tutto" su TCP e UDP. Consideriamo solo una piccola parte: un tipico programma dimostrativo per i socket sta creando un programma di chat client / server. Il client si connette al server e quando l'utente su un client digita qualcosa, viene inoltrato agli altri client connessi allo stesso server. Ogni client visualizza ciò che arriva dal server e consente all'utente di digitare i messaggi da inviare agli altri client.
Allo stesso tempo, considera ciò che implica un programma di chat "reale" come AIM, Windows Messenger, iChat, ecc. Per gestire non solo il testo, ma anche voce, video, trasferimenti di file, gruppi, elenchi, ecc., Un tipico programma implica probabilmente una dozzina di standard diversi, inclusi SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS, ecc. .
IMO, qualcuno che "sa socket" dovrebbe essere in grado di programmare il primo (demo-level, solo testo) programma di chat in poche ore senza spendere molto tempo in file di aiuto (e simili) facendo ricerche. A meno che non abbiano affermato almeno una precedente esperienza di lavoro su un "vero" programma di chat, non mi aspetterei che sappiano anche quali RFC / standard si applicano a queste cose però.
Lo stesso vale in generale: dato il numero di RFC (e vari altri standard) che si applicano a tutte le diverse cose che le persone fanno sulle reti, è irragionevole aspettarsi che qualcuno le abbia memorizzate tutte. Tuttavia, se hai una serie di requisiti per qualcosa che ti aspetteresti che le persone siano in grado di gestire facilmente in un programma "locale", aggiungere semplicemente "sulla rete" come requisito non dovrebbe normalmente aggiungere un'enorme quantità di difficoltà (anche se si tratta di problemi come la latenza della rete potrebbe).
1 Gli zoccoli su Unix supportano anche i socket della famiglia Unix, ma questi sono (almeno normalmente) usati per l'IPC intra-macchina, non per il networking. Esistono anche dozzine di altri protocolli per cose come la gestione dei router che i socket non supportano realmente (oltre ai socket raw che consentono di creare e inviare pacchetti arbitrari).
"programmazione di rete" richiederà alcune tecnologie di rete, ad esempio RPC. Gli zoccoli (molto probabilmente si intendono le prese BSD) sono un esempio di tale tecnologia. Quindi "programmazione socket" è un sottoinsieme di "programmazione di rete".
Sì, è vero che la programmazione di rete richiede la tecnologia di rete, mentre d'altra parte la programmazione dei socket è un sottoinsieme della programmazione di rete. La maggior parte della programmazione di rete corrente viene eseguita utilizzando direttamente i socket o utilizzando vari altri layer sopra i socket.
Leggi altre domande sui tag networking sockets