Compartilhamento de porta Net.TCPNet.TCP Port Sharing

O Windows Communication Foundation (WCF) fornece um novo protocolo de rede baseado em TCP (net. TCP://) para comunicação de alto desempenho.Windows Communication Foundation (WCF) provides a new TCP-based network protocol (net.tcp://) for high-performance communication. O WCF também apresenta 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.WCF also introduces a new system component, the Net.TCP Port Sharing Service that enables net.tcp ports to be shared across multiple user processes.

Motivação e Segundo PlanoBackground and Motivation

Quando o protocolo TCP/IP foi introduzido pela primeira vez, apenas um pequeno número de protocolos de aplicativo fez uso dele.When the TCP/IP protocol was first introduced, only a small number of application protocols made use of it. Os números de porta usados pelo TCP/IP para diferenciar os aplicativos atribuindo um número de porta de 16 bits exclusivo a cada protocolo de aplicativo.TCP/IP used port numbers to differentiate between applications by assigning a unique 16-bit port number to each application protocol. 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.For example, HTTP traffic today is standardized to use TCP port 80, SMTP uses TCP port 25, and FTP uses TCP ports 20 and 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.Other applications using TCP as a transport can choose another available port number, either by convention or through formal standardization.

O uso de números de porta para distinguir entre aplicativos apresentou problemas de segurança.Using port numbers to distinguish between applications had security problems. Os firewalls geralmente são configurados para bloquear o tráfego TCP em todas as portas, exceto por alguns pontos de entrada conhecidos, de modo que a implantação de um aplicativo que usa uma porta não padrão é geralmente complicada ou até mesmo impossível devido à presença de firewalls corporativos e pessoais.Firewalls are generally configured to block TCP traffic on all ports except for a few well-known entry points, so deploying an application that uses a non-standard port is often complicated or even impossible due to the presence of corporate and personal firewalls. Aplicativos que podem se comunicar por portas padrão e conhecidas que já são permitidas, reduzir a superfície de ataque externa.Applications that can communicate over standard, well-known ports that are already permitted, reduce the external attack surface. 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.Many network applications make use of the HTTP protocol because most firewalls are configured by default to allow traffic on TCP port 80.

O modelo de HTTP.SYS no qual o tráfego para muitos aplicativos HTTP diferentes é multiplexado em uma única porta TCP se tornou padrão na plataforma Windows.The HTTP.SYS model in which traffic for many different HTTP applications is multiplexed onto a single TCP port has become standard on the Windows platform. 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.This provides a common point of control for firewall administrators while allowing application developers to minimize the deployment cost of building new applications that can make use of the network.

A capacidade de compartilhar portas em vários aplicativos HTTP tem sido um recurso do Serviços de Informações da Internet (IIS).The ability to share ports across multiple HTTP applications has long been a feature of Internet Information Services (IIS). No entanto, apenas com a introdução do HTTP.SYS (o ouvinte do protocolo HTTP no modo kernel) com o IIS 6,0 que essa infraestrutura estava totalmente generalizada.However, it was only with the introduction of HTTP.SYS (the kernel-mode HTTP protocol listener) with IIS 6.0 that this infrastructure was fully generalized. Na verdade, HTTP.SYS permite que processos de usuário arbitrários compartilhem as portas TCP dedicadas ao tráfego HTTP.In effect, HTTP.SYS allows arbitrary user processes to share the TCP ports dedicated to HTTP traffic. Esse recurso permite que muitos aplicativos HTTP coexistam na mesma máquina física em processos isolados e separados enquanto compartilham a infraestrutura de rede necessária para enviar e receber tráfego pela porta TCP 80.This capability allows many HTTP applications to coexist on the same physical machine in separate, isolated processes while sharing the network infrastructure required to send and receive traffic over TCP port 80. O serviço de compartilhamento de porta Net. TCP permite o mesmo tipo de compartilhamento de porta para aplicativos net. TCP.The Net.TCP Port Sharing Service enables the same type of port sharing for net.tcp applications.

Arquitetura de compartilhamento de portaPort Sharing Architecture

A arquitetura de compartilhamento de porta no WCF tem três componentes principais:The Port Sharing architecture in WCF has three main components:

  • Um processo de trabalho: qualquer processo de comunicação via net. TCP://usando portas compartilhadas.A Worker Process: Any process communicating over net.tcp:// using shared ports.

  • O transporte TCP do WCF: implementa o protocolo net. TCP://.The WCF TCP transport: Implements the net.tcp:// protocol.

  • O serviço de compartilhamento de porta Net. TCP: permite que muitos processos de trabalho compartilhem a mesma porta TCP.The Net.TCP Port Sharing Service: Allows many worker processes to share the same TCP port.

O serviço de compartilhamento de porta Net. TCP é um serviço do Windows no modo de usuário que aceita net. TCP://Connections em nome dos processos de trabalho que se conectam através dele.The Net.TCP Port Sharing Service is a user-mode Windows service that accepts net.tcp:// connections on behalf of the worker processes that connect through it. Quando chega uma conexão de soquete, o serviço de compartilhamento de porta inspeciona o fluxo de mensagens de entrada para obter seu endereço de destino.When a socket connection arrives, the port sharing service inspects the incoming message stream to obtain its destination address. Com base nesse endereço, o serviço de compartilhamento de porta pode rotear o fluxo de dados para o aplicativo que, por fim, o processa.Based on this address, the port sharing service can route the data stream to the application that ultimately processes it.

Quando um serviço WCF que usa net. TCP://compartilhamento de porta é aberto, a infraestrutura de transporte TCP do WCF não abre diretamente um soquete TCP no processo do aplicativo.When a WCF service that uses net.tcp:// port sharing opens, the WCF TCP transport infrastructure does not directly open a TCP socket in the application process. Em vez disso, a infraestrutura de transporte registra o endereço base Uniform Resource Identifier (URI) do serviço com o serviço de compartilhamento de porta Net. TCP e aguarda o serviço de compartilhamento de porta escutar mensagens em seu nome.Instead, the transport infrastructure registers the service’s base address Uniform Resource Identifier (URI) with the Net.TCP Port Sharing Service and waits for the port sharing service to listen for messages on its behalf. O serviço de compartilhamento de porta distribui mensagens endereçadas ao serviço de aplicativo à medida que elas chegam.The port sharing service dispatches messages addressed to the application service as they arrive.

Instalando o compartilhamento de portaInstalling Port Sharing

O serviço de compartilhamento de porta Net. TCP está disponível em todos os sistemas operacionais que dão suporte ao WinFX, mas o serviço não está habilitado por padrão.The Net.TCP Port Sharing Service is available on all operating systems that support WinFX, but the service is not enabled by default. Como uma precaução de segurança, um administrador deve habilitar manualmente o serviço de compartilhamento de porta Net. TCP antes de ser usado pela primeira vez.As a security precaution, an administrator must manually enable the Net.TCP Port Sharing Service prior to first use. 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 porta.The Net.TCP Port Sharing Service exposes configuration options that allow you to manipulate several characteristics of the network sockets owned by the port sharing service. Para obter mais informações, consulte como habilitar o serviço de compartilhamento de porta Net. TCP.For more information, see How to: Enable the Net.TCP Port Sharing Service.

Usando o compartilhamento de porta Net. TCP em um aplicativoUsing Net.tcp Port Sharing in an Application

A maneira mais fácil de usar net. TCP://compartilhamento de porta em seu aplicativo WCF é expor um serviço usando o NetTcpBinding e, em seguida, habilitar o serviço de compartilhamento de porta Net. TCP usando a PortSharingEnabled propriedade.The easiest way to use net.tcp:// port sharing in your WCF application is to expose a service using the NetTcpBinding and then to enable Net.TCP Port Sharing Service using the PortSharingEnabled property.

Para obter mais informações sobre como fazer isso, consulte como: configurar um serviço WCF para usar o compartilhamento de porta.For more information about how to do this, see How to: Configure a WCF Service to Use Port Sharing.

Implicações de segurança do compartilhamento de portaSecurity Implications of Port Sharing

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 ouvindo diretamente na rede.Although the Net.TCP Port Sharing Service provides a layer of processing between applications and the network, applications that use port sharing should still be secured as if they were directly listening on the network. Especificamente, os aplicativos que usam o compartilhamento de porta devem avaliar os privilégios de processo sob os quais eles são executados.Specifically, applications that use port sharing should evaluate the process privileges under which they run. Considere executar seu aplicativo usando a conta de serviço de rede interna, que é executada com o conjunto mínimo de privilégios de processo necessários para a comunicação de rede.Consider running your application using the built-in Network Service account, which runs with the minimal set of process privileges required for network communication.

Veja tambémSee also