Partilhar via


Compartilhamento de porta Net.TCP

O Windows Communication Foundation (WCF) fornece um novo protocolo de rede baseado em TCP (net.tcp://) para comunicação de alto desempenho. O WCF também introduz um novo componente do sistema, o Serviço de Compartilhamento de Porta Net.TCP que permite que as portas net.tcp sejam compartilhadas entre vários processos de usuário.

Antecedentes e Motivação

Quando o protocolo TCP/IP foi introduzido pela primeira vez, apenas um pequeno número de protocolos de aplicação fez uso dele. O TCP/IP usava números de porta para diferenciar entre aplicativos atribuindo um número de porta exclusivo de 16 bits a cada protocolo de aplicativo. Por exemplo, o tráfego HTTP hoje é padronizado para usar a porta TCP 80, o SMTP usa a porta TCP 25 e o FTP usa as portas TCP 20 e 21. Outros aplicativos que usam TCP como transporte podem escolher outro número de porta disponível, seja por convenção ou por meio de padronização formal.

O uso de números de porta para distinguir entre aplicativos teve problemas de segurança. Os firewalls geralmente são configurados para bloquear o tráfego TCP em todas as portas, exceto em alguns pontos de entrada bem conhecidos, portanto, implantar um aplicativo que usa uma porta não padrão é muitas vezes complicado ou até mesmo impossível devido à presença de firewalls corporativos e pessoais. Aplicativos que podem se comunicar por portas padrão e conhecidas que já são permitidas reduzem a superfície de ataque externo. Muitos aplicativos de rede usam o protocolo HTTP porque a maioria dos firewalls são configurados por padrão para permitir o tráfego na porta TCP 80.

O modelo HTTP.SYS em que o tráfego para muitos aplicativos HTTP diferentes é multiplexado em uma única porta TCP tornou-se padrão na plataforma Windows. Isso fornece um ponto comum de controle para administradores de firewall, permitindo que os desenvolvedores de aplicativos minimizem o custo de implantação da criação de novos aplicativos que podem fazer uso da rede.

A capacidade de compartilhar portas entre vários aplicativos HTTP tem sido um recurso do IIS (Serviços de Informações da Internet). No entanto, foi apenas com a introdução do HTTP.SYS (o ouvinte do protocolo HTTP de modo kernel) com o IIS 6.0 que essa infraestrutura foi totalmente generalizada. Com efeito, HTTP.SYS permite que processos de usuário arbitrários compartilhem as portas TCP dedicadas ao tráfego HTTP. Esse recurso permite que muitos aplicativos HTTP coexistam na mesma máquina física em processos separados e isolados enquanto compartilham a infraestrutura de rede necessária para enviar e receber tráfego pela porta TCP 80. O Serviço de Compartilhamento de Porta Net.TCP permite o mesmo tipo de compartilhamento de porta para aplicativos net.tcp.

Arquitetura de compartilhamento de portas

A arquitetura Port Sharing no WCF tem três componentes principais:

  • Um processo de trabalho: qualquer processo que se comunica através de net.tcp:// usando portas compartilhadas.

  • O transporte TCP do WCF: implementa o protocolo net.tcp://.

  • O Serviço de Compartilhamento de Porta Net.TCP: Permite que muitos processos de trabalho compartilhem a mesma porta TCP.

O Serviço de Compartilhamento de Porta Net.TCP é um serviço do Windows de modo de usuário que aceita conexões net.tcp:// em nome dos processos de trabalho que se conectam por meio dele. Quando uma conexão de soquete chega, o serviço de compartilhamento de porta inspeciona o fluxo de mensagens de entrada para obter seu endereço de destino. Com base nesse endereço, o serviço de compartilhamento de porta pode rotear o fluxo de dados para o aplicativo que o processa.

Quando um serviço WCF que usa o compartilhamento de porta net.tcp:// é aberto, a infraestrutura de transporte TCP do WCF não abre diretamente um soquete TCP no processo de aplicativo. Em vez disso, a infraestrutura de transporte registra o endereço base do serviço Uniform Resource Identifier (URI) com o Serviço de Compartilhamento de Porta Net.TCP e aguarda que o serviço de compartilhamento de porta ouça mensagens em seu nome. O serviço de compartilhamento de porta envia mensagens endereçadas ao serviço de aplicativo à medida que chegam.

Instalando o compartilhamento de portas

O Serviço de Partilha de Portas Net.TCP está disponível em todos os sistemas operativos que suportam WinFX, mas o serviço não está ativado por predefinição. Como precaução de segurança, um administrador deve habilitar manualmente o Serviço de Compartilhamento de Porta Net.TCP antes do primeiro uso. O Serviço de Compartilhamento de Porta Net.TCP expõe opções de configuração que permitem manipular várias características dos soquetes de rede pertencentes ao serviço de compartilhamento de portas. Para obter mais informações, consulte Como habilitar o serviço de compartilhamento de porta Net.TCP.

Usando o compartilhamento de porta Net.tcp em um aplicativo

A maneira mais fácil de usar o compartilhamento de porta net.tcp:// em seu aplicativo WCF é expor um serviço usando o e, em seguida, habilitar o NetTcpBinding Serviço de Compartilhamento de Porta Net.TCP usando a PortSharingEnabled propriedade.

Para obter mais informações sobre como fazer isso, consulte Como configurar um serviço WCF para usar o compartilhamento de portas.

Implicações de segurança do compartilhamento de portas

Embora o Serviço de Compartilhamento de Porta Net.TCP forneça uma camada de processamento entre aplicativos e a rede, os aplicativos que usam o compartilhamento de porta ainda devem ser protegidos como se estivessem escutando diretamente na rede. Especificamente, os aplicativos que usam o compartilhamento de porta devem avaliar os privilégios de processo sob os quais são executados. Considere executar seu aplicativo usando a conta interna do Serviço de Rede, que é executada com o conjunto mínimo de privilégios de processo necessários para a comunicação de rede.

Consulte também