Differenza tra programmazione di rete e programmazione socket


16

Ci sono differenze importanti quando parliamo di "programmazione socket" rispetto a "programmazione di rete"?

Ci sono alcuni argomenti che riguardano la "programmazione di rete" ma non la "programmazione socket"?

Risposte:


26

La programmazione socket (almeno come viene normalmente utilizzato il termine) sta programmando su una specifica API di rete. I socket supportano protocolli basati su IP (principalmente TCP e UDP) 1 .

La programmazione della 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 attuale, tuttavia, viene eseguita utilizzando direttamente i socket o utilizzando vari altri livelli sopra i socket (ad esempio, molto viene fatto su HTTP, che viene normalmente implementato con TCP su socket). TCP / IP e UDP / IP (nonché una serie di altri protocolli basati su IP) vengono eseguiti principalmente tramite l'interfaccia socket. In teoria, potrebbero essere utilizzate altre interfacce di programmazione, ma in pratica i socket sembrano essere sufficienti, quindi non c'è molto interesse a sostituirlo. Dovrei, tuttavia, menzionare che i socket di Windows (WinSock) hanno alcune estensioni che sono più o meno uniche per Windows. Suppongo sia aperto a qualche argomento se il codice che utilizza queste estensioni si qualifichi davvero come codice "socket" o no - sono estensioni basate sugli stessi concetti, ma il codice che le usa non è ' normalmente trasportabile su altri sistemi. Immagino che si qualifichi come "socket" o no dipende principalmente dal fatto che tu pensi ai socket più come un concetto, o un insieme molto specifico di funzioni, parametri, ecc.

Modifica (in risposta al commento):

È un po 'difficile dire se "conoscere i socket" implica conoscere "tutto" su TCP e UDP. Consideriamo solo un piccolo aspetto: un tipico programma demo per socket è la creazione di 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 cosa comporta un programma di chat "reale" come AIM, Windows Messenger, iChat, ecc. Per gestire non solo testo, ma voce, video, trasferimenti di file, gruppi, elenchi, ecc., Un programma tipico implica probabilmente una dozzina di standard diversi, tra cui SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS, ecc. .

IMO, qualcuno che "conosce i socket" dovrebbe essere in grado di codificare il primo programma di chat (di livello demo, solo testo) in poche ore senza spendere molto tempo in file di aiuto (e simili) nella ricerca. A meno che non abbiano rivendicato almeno qualche esperienza precedente lavorando su un "vero" programma di chat, non mi aspetterei che sapessero nemmeno quali RFC / standard si applicavano a tali cose.

Lo stesso vale in generale: dato il numero di RFC (e vari altri standard) che vengono applicati 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", basta aggiungere "sulla rete" poiché un requisito normalmente non dovrebbe aggiungere una tremenda difficoltà (anche se potrebbe occuparsi di problemi come la latenza della rete).


1 I socket su Unix supportano anche i socket della famiglia Unix, ma questi sono (almeno normalmente) utilizzati per l'IPC intra-macchina, non per il networking. Ci sono anche letteralmente dozzine di altri protocolli per cose come la gestione del router che i socket non supportano realmente (oltre ai socket grezzi che consentono di creare e inviare pacchetti arbitrari).


Grazie, ora questa è una risposta degna di essere votata. :-) Quindi, posso concludere che quando dico di conoscere la programmazione socket, significa trattare " tutto " solo con TCP / UDP? Devo sapere tutto su TCP / UDP?
Aquarius_Girl

@AnishaKaul: vedi la risposta modificata.
Jerry Coffin,

@JerryCoffin: forse vale la pena notare che anche i socket sono un sottoinsieme di protocolli basati su IP. Ci sono cose come ICMP / IP che non sono coperte nemmeno dai socket.
Matthew Scharley,

6

la "programmazione di rete" richiederà alcune tecnologie di rete, ad esempio RPC. I socket (molto probabilmente intendi i socket BSD) sono un esempio di tale tecnologia. Quindi "programmazione socket" è un sottoinsieme di "programmazione di rete".


@Anisha Kaul: Okay, la programmazione RPC è la programmazione di rete (un suo sottoinsieme) e un importante concetto di RPC è un cosiddetto binding di stringhe - vedi msdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspx Non è necessario eseguire questa operazione durante la programmazione dei socket BSD.
sharptooth,

@Anisha Kaul: No, "tutte le possibilità" è un elenco enorme. Ne nominerei alcuni ampiamente usati: Java RMI e .NET Remoting sono buoni esempi.
sharptooth,

-3

Sì, è vero che la programmazione di rete richiede la tecnologia di rete, mentre invece la programmazione 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 livelli sopra i socket.


3
questo non sembra aggiungere nulla di sostanziale rispetto a quello che era già stato pubblicato nelle risposte precedenti
moscerino del
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.