Introdução ao Winsock, incluindo histórico e tecnologia
Introduction Winsock Including Background Technology
Esta postagem fala principalmente sobre a API Windows Sockets, que pode ser abreviada para WSA e Winsock. Depois de ler este post, você poderá conhecer sua definição, histórico, tecnologia, bem como implementações.
Nesta página :Definição para Winsock
O que é Winsock? Na computação, Winsock é uma especificação técnica usada para definir como o software de rede Windows deve acessar serviços de rede, especialmente TCP/IP. É chamado de Winsock porque é uma adaptação da interface de soquete Berkeley UNIX para Windows. Um soquete é um acordo especial usado para conectar e trocar dados entre dois processos de programa no mesmo computador ou rede.
Dica: Se quiser saber mais informações sobre outros protocolos de Internet, é recomendável acessar o site do MiniTool.
Winsock é a abreviatura de Windows Sockets API (WSA). Ele define a interface padrão entre aplicativos clientes TCP/IP do Windows (como clientes FTP ou navegadores da Web) e a pilha básica de protocolos TCP/IP.
Postagem relacionada: Use o comando Netsh Winsock Reset para corrigir problema de rede do Windows 10
Antecedentes do Winsock
A API Windows Sockets foi proposta por Martin Hall da JSB Software (mais tarde Stardust Technologies) na discussão BoF (Bird of a Feather) na rede CompuServe BBS em outubro de 1991.
A primeira versão da especificação foi escrita por Martin Hall, Mark Towfiq da Microdyne (mais tarde Sun Microsystems), Geoff Arnold da Sun Microsystems e Henry Sanders e J Allard da Microsoft com a ajuda de muitos outros.
Houve algumas discussões sobre a melhor forma de resolver questões de direitos autorais, propriedade intelectual e potenciais questões antitruste, e consideração de trabalho através da IETF ou do estabelecimento de fundações sem fins lucrativos. No final, foi decidido que a especificação deveria ser protegida por direitos autorais apenas de cinco autores (não afiliados).
Todos os desenvolvedores participantes se recusaram a abreviar o nome simplesmente para Winsock por um longo tempo porque havia muita confusão entre a API e o arquivo de biblioteca DLL (winsock.dll), que apenas expunha a interface geral do WSA ao aplicativo acima dela. Geralmente, acredita-se que apenas garantir que o arquivo DLL exista no sistema pode fornecer suporte completo ao protocolo TCP/IP.
Tecnologia de Winsock
A especificação da API do Windows Socket define duas interfaces: API usada por desenvolvedores de aplicativos e SPI que fornece um método para desenvolvedores de software de rede adicionarem novos módulos de protocolo ao sistema. Cada interface representa um contrato.
A API garante que os aplicativos em conformidade possam ser executados normalmente com a implementação de protocolo em conformidade de qualquer fornecedor de software de rede. O contrato SPI garante que módulos de protocolo em conformidade possam ser adicionados ao Windows para que possam ser usados por aplicativos compatíveis com API.
Embora esses contratos fossem importantes quando o Windows Sockets foi lançado pela primeira vez, eles só têm significado acadêmico agora porque o ambiente de rede requer suporte multiprotocolo. A API do Windows Sockets versão 2.0 inclui a função de utilização de IPX/SPX, embora este protocolo estivesse quase obsoleto quando o WSA 2.0 saiu de fábrica.
O código e o design dos Windows Sockets são baseados em soquetes BSD, mas recursos adicionais são fornecidos para permitir que a API esteja em conformidade com o modelo de programação convencional do Windows.
A API Windows Sockets cobriu quase todos os recursos da API de soquetes BSD, mas existem alguns obstáculos inevitáveis, que foram causados principalmente pelas diferenças fundamentais entre Windows e Unix (embora a diferença entre Windows Sockets e soquetes BSD fosse menor do que a diferença entre o último e FLUXOS).
No entanto, o objetivo do design dos soquetes do Windows era tornar relativamente fácil para os desenvolvedores portar aplicativos baseados em soquete do Unix para o Windows. Não foi suficiente criar APIs que fossem úteis apenas para programas Windows recém-escritos.
Portanto, o Windows Sockets continha muitos elementos projetados para facilitar a portabilidade. Por exemplo, aplicativos Unix poderiam usar a mesma variável errno para registrar erros de rede e erros detectados em funções padrão da biblioteca C.
Como não pode ser implementado no Windows, o Windows Sockets introduziu uma função especial, WSAGetLastError(), para recuperar informações de erro. Esse mecanismo foi muito útil, mas a portabilidade de aplicativos ainda era extremamente complicada.
Muitos aplicativos TCP/IP primitivos foram implementados usando recursos de sistema específicos do Unix (como pseudoterminais e chamadas de sistema fork), e era problemático reproduzir essa função no Windows. Em um tempo relativamente curto, a portabilidade deu lugar ao desenvolvimento de aplicativos Windows dedicados.
Implementações de Winsock
- A Microsoft não forneceu uma implementação do Winsock 1.0.
- A versão 1.1 do Winsock foi fornecida em um pacote complementar (chamado Wolverine) para Windows for Workgroups (codinome Snowball).
- O Winsock versão 2.1 foi fornecido em um pacote complementar para Windows 95.
- A versão mais recente do Winsock 2.x foi fornecida com a nova versão do Windows ou como parte de um service pack.
- O Winsock 2 pode ser estendido por meio de um mecanismo chamado Layered Service Provider (LSP).