Soquete de rede - Network socket

Um soquete de rede é uma estrutura de software dentro de um de rede de uma rede de computadores que serve como um ponto final para enviar e receber dados pela rede. A estrutura e as propriedades de um soquete são definidas por uma interface de programação de aplicativo (API) para a arquitetura de rede. Os soquetes são criados apenas durante o tempo de vida de um processo de um aplicativo em execução no nó.

Devido à padronização dos protocolos TCP / IP no desenvolvimento da Internet , o termo soquete de rede é mais comumente usado no contexto do conjunto de protocolos da Internet e, portanto, também é conhecido como soquete da Internet . Nesse contexto, um soquete é identificado externamente a outros hosts por seu endereço de soquete , que é a tríade de protocolo de transporte , endereço IP e número de porta .

O termo soquete também é usado para o terminal de software de comunicação entre processos internos do nó (IPC), que geralmente usa a mesma API como um soquete de rede.

Usar

O uso do termo soquete em software é análogo à função de um conector elétrico fêmea , um dispositivo em hardware para comunicação entre nós interligados por um cabo elétrico . Da mesma forma, o termo porta é usado para terminais físicos externos em um nó ou dispositivo.

A interface de programação de aplicativo (API) para a pilha de protocolo de rede cria um identificador para cada soquete criado por um aplicativo, comumente referido como um descritor de soquete . Em sistemas operacionais semelhantes ao Unix , este descritor é um tipo de descritor de arquivo . Ele é armazenado pelo processo de aplicação para uso com todas as operações de leitura e gravação no canal de comunicação.

No momento da criação com a API, um soquete de rede é vinculado à combinação de um tipo de protocolo de rede a ser usado para transmissões, um endereço de rede do host e um número de porta . As portas são recursos numerados que representam outro tipo de estrutura de software do nó. Eles são usados ​​como tipos de serviço e, uma vez criados por um processo, servem como um componente de localização endereçável externamente (da rede), para que outros hosts possam estabelecer conexões.

Os soquetes de rede podem ser dedicados a conexões persistentes para comunicação entre dois nós ou podem participar de comunicações sem conexão e multicast .

Na prática, devido à proliferação dos protocolos TCP / IP em uso na Internet, o termo soquete de rede geralmente se refere ao uso com o protocolo da Internet (IP). Por isso, também é chamado de soquete de Internet .

Endereços de soquete

Um aplicativo pode se comunicar com um processo remoto trocando dados com TCP / IP por meio do conhecimento da combinação do tipo de protocolo, endereço IP e número da porta. Essa combinação geralmente é conhecida como endereço de soquete . É o identificador de acesso voltado para a rede ao soquete da rede. O processo remoto estabelece um soquete de rede em sua própria instância da pilha de protocolo e usa a API de rede para se conectar ao aplicativo, apresentando seu próprio endereço de soquete para uso pelo aplicativo.

Implementação

Uma pilha de protocolo , geralmente fornecida pelo sistema operacional (em vez de uma biblioteca separada, por exemplo), é um conjunto de serviços que permite que os processos se comuniquem em uma rede usando os protocolos que a pilha implementa. O sistema operacional encaminha a carga de pacotes IP de entrada para o aplicativo correspondente, extraindo as informações de endereço de soquete dos cabeçalhos de protocolo de transporte e IP e removendo os cabeçalhos dos dados do aplicativo.

A interface de programação de aplicativo (API) que os programas usam para se comunicar com a pilha de protocolo, usando soquetes de rede, é chamada de API de soquete . O desenvolvimento de programas aplicativos que utilizam essa API é chamado de programação de soquete ou programação de rede . As APIs de soquete da Internet geralmente são baseadas no padrão de soquetes de Berkeley . No padrão de sockets de Berkeley, sockets são uma forma de descritor de arquivo , devido à filosofia Unix de que "tudo é um arquivo", e as analogias entre sockets e arquivos. Ambos têm funções para ler, escrever, abrir e fechar. Na prática, as diferenças afetam a analogia, e diferentes interfaces (enviar e receber) são usadas em um soquete. Na comunicação entre processos , cada extremidade geralmente tem seu próprio soquete.

Nos protocolos padrão da Internet TCP e UDP, um endereço de soquete é a combinação de um endereço IP e um número de porta , assim como uma extremidade de uma conexão telefônica é a combinação de um número de telefone e um ramal específico . Os soquetes não precisam ter um endereço de origem, por exemplo, para apenas enviar dados, mas se um programa vincular um soquete a um endereço de origem, o soquete pode ser usado para receber dados enviados para aquele endereço. Com base nesse endereço, os soquetes da Internet entregam pacotes de dados de entrada para o processo de aplicação apropriado .

Socket geralmente se refere especificamente a um soquete de internet ou soquete TCP. Uma tomada de Internet é minimamente caracterizada pelo seguinte:

  • endereço de soquete local, que consiste no endereço IP local e (para TCP e UDP, mas não IP) um número de porta
  • protocolo: Um protocolo de transporte, por exemplo, TCP, UDP, IP bruto. Isso significa que os pontos de extremidade (locais ou remotos) com porta TCP 53 e porta UDP 53 são soquetes distintos, enquanto o IP não tem portas.
  • Um soquete que foi conectado a outro soquete, por exemplo, durante o estabelecimento de uma conexão TCP, também possui um endereço de soquete remoto.

Definição

As distinções entre um soquete (representação interna), descritor de soquete (identificador abstrato) e endereço de soquete (endereço público) são sutis e nem sempre são distinguidos no uso diário. Além disso, as definições específicas de um soquete diferem entre os autores. Na Solicitação de Comentários da IETF , Padrões da Internet , em muitos livros didáticos, bem como neste artigo, o termo soquete se refere a uma entidade que é identificada exclusivamente pelo número do soquete. Em outros livros didáticos, o termo soquete se refere a um endereço de soquete local, ou seja, uma "combinação de um endereço IP e um número de porta". Na definição original de soquete dada na RFC 147, conforme relacionado à rede ARPA em 1971, "o soquete é especificado como um número de 32 bits com soquetes pares identificando os soquetes de recebimento e os soquetes ímpares identificando os soquetes de envio". Hoje, no entanto, as comunicações de soquete são bidirecionais.

Dentro do sistema operacional e do aplicativo que criou um soquete, um soquete é referido por um valor inteiro exclusivo denominado descritor de soquete .

Ferramentas

Em sistemas operacionais semelhantes ao Unix e Microsoft Windows , as ferramentas de linha de comando netstat ou ss são usadas para listar soquetes estabelecidos e informações relacionadas.

Exemplo

Este exemplo, modelado de acordo com a interface de soquete de Berkeley, envia a string "Hello, world!" via TCP para a porta 80 do host com o endereço 1.2.3.4. Ele ilustra a criação de um soquete (getSocket), conectando-o ao host remoto, enviando a string e, finalmente, fechando o soquete:

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

Tipos

Vários tipos de soquete de Internet estão disponíveis:

Soquetes de datagrama
Soquetes sem conexão , que usam o protocolo UDP ( User Datagram Protocol ). Cada pacote enviado ou recebido em um soquete de datagrama é endereçado e roteado individualmente. A ordem e a confiabilidade não são garantidas com os soquetes de datagrama, portanto, vários pacotes enviados de uma máquina ou processo para outra podem chegar em qualquer ordem ou nem chegar. Pode ser necessária uma configuração especial para enviar broadcasts em um soquete de datagrama. Para receber pacotes de difusão, um soquete de datagrama não deve ser vinculado a um endereço específico, embora em algumas implementações, os pacotes de difusão também possam ser recebidos quando um soquete de datagrama está vinculado a um endereço específico.
Tomadas de fluxo
Sockets orientados a conexão , que usam o protocolo de controle de transmissão (TCP), o protocolo de transmissão de controle de fluxo (SCTP) ou o protocolo de controle de congestionamento de datagrama (DCCP). Um soquete de fluxo fornece um fluxo sequenciado e exclusivo de dados sem erros, sem limites de registro, com mecanismos bem definidos para criar e destruir conexões e relatar erros. Um soquete de fluxo transmite dados de maneira confiável , em ordem e com recursos fora de banda . Na Internet, os soquetes de fluxo são normalmente implementados usando TCP para que os aplicativos possam ser executados em qualquer rede usando o protocolo TCP / IP.
Soquetes brutos
Permite o envio e recebimento direto de pacotes IP sem nenhuma formatação de camada de transporte específica de protocolo. Com outros tipos de soquetes, a carga útil é automaticamente encapsulada de acordo com o protocolo da camada de transporte escolhido (por exemplo, TCP, UDP), e o usuário do soquete não tem conhecimento da existência de cabeçalhos de protocolo que são transmitidos com a carga útil. Ao ler de um soquete bruto, os cabeçalhos geralmente são incluídos. Ao transmitir pacotes de um soquete bruto, a adição automática de um cabeçalho é opcional.
A maioria das interfaces de programação de aplicativos (APIs) de soquete , por exemplo, aquelas baseadas em soquetes Berkeley , suportam soquetes brutos. O Windows XP foi lançado em 2001 com suporte a soquete bruto implementado na interface do Winsock , mas três anos depois, a Microsoft limitou o suporte a soquete bruto do Winsock devido a questões de segurança.
Soquetes brutos são usados ​​em aplicativos relacionados à segurança como o Nmap . Um caso de uso para sockets brutos é a implementação de novos protocolos de camada de transporte no espaço do usuário . Os soquetes brutos estão normalmente disponíveis em equipamentos de rede e são usados ​​para protocolos de roteamento , como o Internet Group Management Protocol (IGMP) e o Open Shortest Path First (OSPF), e no Internet Control Message Protocol (ICMP) usado, entre outras coisas, por o utilitário ping .

Outros tipos de soquete são implementados em outros protocolos de transporte, como Arquitetura de Rede de Sistemas e soquetes de domínio Unix para comunicação interna entre processos.

Estados de soquete no modelo cliente-servidor

Os processos de computador que fornecem serviços de aplicativo são chamados de servidores e criam soquetes na inicialização que estão no estado de escuta . Esses soquetes estão esperando por iniciativas de programas clientes .

Um servidor TCP pode servir vários clientes simultaneamente, criando um soquete dedicado exclusivo para cada conexão de cliente em um novo processo filho ou thread de processamento para cada cliente. Eles estão no estado estabelecido quando uma conexão virtual de soquete a soquete ou circuito virtual (VC), também conhecido como sessão TCP , é estabelecida com o soquete remoto, fornecendo um fluxo de bytes duplex .

Um servidor pode criar vários soquetes TCP estabelecidos simultaneamente com o mesmo número de porta local e endereço IP local, cada um mapeado para seu próprio processo servidor-filho, atendendo ao seu próprio processo cliente. Eles são tratados como soquetes diferentes pelo sistema operacional, pois o endereço do soquete remoto (o endereço IP do cliente ou número da porta) é diferente; ou seja, uma vez que eles têm diferentes tuplas de pares de soquetes .

Os soquetes UDP não têm um estado estabelecido , porque o protocolo não tem conexão . Um processo de servidor UDP lida com datagramas de entrada de todos os clientes remotos sequencialmente por meio do mesmo soquete. Os soquetes UDP não são identificados pelo endereço remoto, mas apenas pelo endereço local, embora cada mensagem tenha um endereço remoto associado que pode ser recuperado de cada datagrama com a interface de programação de aplicativo de rede (API).

Pares de soquete

Os soquetes locais e remotos que se comunicam são chamados de pares de soquetes . Cada par de soquetes é descrito por uma única 4 tupla que consiste em endereços IP de origem e destino e números de portas, ou seja, endereços de soquetes locais e remotos. Conforme discutido acima, no caso do TCP, um par de soquetes é associado em cada extremidade da conexão com uma única 4 tupla.

História

O termo soquete data da publicação da RFC 147 em 1971, quando era usado na ARPANET. A maioria das implementações modernas de sockets são baseadas em sockets de Berkeley (1983), e outras pilhas como Winsock (1991). O Berkeley sockets API no Berkeley Software Distribution (BSD), originado com o sistema operacional 4.2BSD Unix como uma API. Apenas em 1989, entretanto, a UC Berkeley poderia lançar versões de seu sistema operacional e biblioteca de rede livre das restrições de licenciamento do Unix protegido por direitos autorais da AT&T .

Em c. 1987, a AT & T introduziu as STREAMS baseados Transport Layer Interface de (TLI) em UNIX System V Release 3 (SRV3). e continuou na versão 4 (SVR4).

Outras implementações iniciais foram escritas para TOPS-20 , MVS , VM , IBM-DOS (PCIP).

Soquetes em equipamentos de rede

O soquete é principalmente um conceito usado na camada de transporte do conjunto de protocolos da Internet ou camada de sessão do modelo OSI . Equipamentos de rede, como roteadores , que operam na camada da Internet , e switches , que operam na camada de enlace , não requerem implementações da camada de transporte. No entanto, firewalls de rede com estado , tradutores de endereço de rede e servidores proxy controlam os pares de soquetes ativos. Em switches multicamadas e suporte de qualidade de serviço (QoS) em roteadores, os fluxos de pacotes podem ser identificados pela extração de informações sobre os pares de soquetes.

Os soquetes brutos estão normalmente disponíveis em equipamentos de rede e são usados ​​para protocolos de roteamento , como IGRP e OSPF , e para Internet Control Message Protocol (ICMP).

Veja também

Referências

Leitura adicional

  • Jones, Anthony; Ohlund, Jim (2002). Programação de rede para Microsoft Windows . ISBN 0-7356-1579-9.

links externos