Diferença entre programação de rede e programação de soquete


16

Existem grandes diferenças quando falamos de "programação de soquete" em comparação com "programação de rede"?

Existem alguns tópicos que cobrem "programação de rede", mas não "programação de soquete"?

Respostas:


26

A programação de soquete (pelo menos como o termo é normalmente usado) está programando para uma API de rede específica. Os soquetes suportam protocolos baseados em IP (principalmente TCP e UDP) 1 .

A programação de rede pode ser feita usando várias outras APIs. O Windows possui várias APIs independentes de protocolo, como as funções WNet * e Net *. As versões mais antigas do Windows também usavam o NetBIOS / NetBEUI (interface de usuário final do NetBIOS) e o IPX / SPX (o protocolo Netware antigo), mais suportado (e provavelmente ainda o faz).

A maioria da programação de rede atual, no entanto, é feita usando soquetes diretamente ou usando várias outras camadas em cima de soquetes (por exemplo, muito é feito por HTTP, que normalmente é implementado com TCP por soquetes). TCP / IP e UDP / IP (assim como vários outros protocolos baseados em IP) são feitos principalmente via interface de soquetes. Em teoria, outras interfaces de programação poderiam ser usadas, mas, na prática, os soquetes parecem suficientes, portanto, não há muito interesse em substituí-lo. No entanto, devo mencionar que os soquetes do Windows (WinSock) possuem algumas extensões que são mais ou menos exclusivas do Windows. Suponho que esteja aberto a algum argumento se o código que usa essas extensões realmente se qualifica como código "sockets" ou não - são extensões baseadas nos mesmos conceitos, mas o código que as usa não é ' t normalmente portátil para outros sistemas. Eu acho que se ele se qualifica como "soquetes" ou não depende principalmente de você pensar em soquetes mais como um conceito ou um conjunto muito específico de funções, parâmetros, etc.

Editar (em resposta ao comentário):

É um pouco difícil dizer se "soquetes de conhecimento" implica saber "tudo" sobre TCP e UDP. Vamos considerar apenas um pequeno trecho: um programa de demonstração típico para sockets é criar um programa de bate-papo cliente / servidor. O cliente se conecta ao servidor e, quando o usuário de um cliente digita alguma coisa, é encaminhado para os outros clientes conectados ao mesmo servidor. Cada cliente exibe o que vem do servidor e permite que o usuário digite as mensagens a serem enviadas aos outros clientes.

Ao mesmo tempo, considere o que envolve um programa de bate-papo "real", como o AIM, o Windows Messenger, o iChat etc. Para lidar não apenas com texto, mas com voz, vídeo, transferências de arquivos, grupos, listas etc., um programa típico provavelmente envolve uma dúzia de padrões diferentes, incluindo SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS, etc. .

Na IMO, alguém que "conhece soquetes" deve ser capaz de codificar o primeiro programa de bate-papo (em nível de demonstração, somente em texto) em poucas horas, sem gastar muito tempo nos arquivos de ajuda (e tal) pesquisando. A menos que eles reivindiquem pelo menos alguma experiência anterior trabalhando em um programa de bate-papo "real", eu não esperaria que eles soubessem quais RFCs / padrões se aplicavam a essas coisas.

O mesmo se aplica em geral: dado o número de RFCs (e vários outros padrões) que são aplicados a todas as coisas diferentes que as pessoas fazem nas redes, não é razoável esperar que alguém tenha memorizado todas elas. No entanto, se você possui um conjunto de requisitos para algo que espera que as pessoas possam manipular facilmente em um programa "local", basta adicionar "pela rede" como um requisito que normalmente não deve adicionar uma tremenda quantidade de dificuldade (embora possa lidar com problemas como a latência da rede).


1 Soquetes no Unix também suportam soquetes da família Unix, mas eles são (pelo menos normalmente) usados ​​para IPC intra-máquina, não para rede. Também existem literalmente dezenas de outros protocolos para coisas como gerenciamento de roteadores que os soquetes realmente não suportam (além dos soquetes brutos, permitindo criar e enviar pacotes arbitrários).


Obrigado, agora esta é uma resposta que vale a pena votar. :-) Então, posso concluir que, quando digo que conheço programação em soquete, significa lidar " tudo " apenas com TCP / UDP? Preciso saber tudo sobre TCP / UDP?
Aquarius_Girl

@ AnishaKaul: Ver resposta editada.
Jerry Coffin

@ JerryCoffin: Possivelmente vale a pena notar que os soquetes também são um subconjunto de protocolos baseados em IP. Existem coisas como ICMP / IP que também não são cobertas por soquetes.
Matthew Scharley

6

"programação de rede" exigirá alguma tecnologia de rede - por exemplo, RPC. Soquetes (provavelmente você quer dizer soquetes BSD) são um exemplo dessa tecnologia. Portanto, "programação de soquete" é um subconjunto de "programação de rede".


@ Anisha Kaul: Ok, a programação RPC é uma programação de rede (um subconjunto dela) e um conceito importante de RPC é a chamada ligação de string - consulte msdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspx Você não precisa disso ao programar soquetes BSD.
Sharptooth 20/09/11

@ Anisha Kaul: Não, "todas as possibilidades" é uma lista enorme. Eu citaria alguns amplamente usados ​​- Java RMI e .NET Remoting são bons exemplos.
Sharptooth 20/09/11

-3

Sim, é verdade que a programação em rede requer tecnologia de rede, enquanto a programação em soquete é um subconjunto da programação em rede. A programação de rede mais atual é feita usando soquetes diretamente ou usando várias outras camadas em cima dos soquetes.


3
isso não parece acrescentar nada substancial sobre o que já foi publicado em respostas anteriores #
306
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.