Compartir a través de


Uso compartido de puertos Net.TCP

Windows Communication Foundation (WCF) proporciona un nuevo protocolo de red basado en TCP (net.tcp://) para la comunicación de alto rendimiento. WCF también presenta un nuevo componente del sistema: el servicio de uso compartido de puertos Net.TCP que permite compartir puertos de net.tcp entre varios procesos de usuario.

Contexto y motivación

Cuando se introdujo el protocolo TCP/IP por primera vez, solo un número pequeño de protocolos de aplicación lo emplearon. TCP/IP utilizaba números de puertos para diferenciar entre aplicaciones asignando un número de puerto de 16 bits único para cada protocolo de aplicación. Por ejemplo, el tráfico de HTTP hoy está normalizado para que utilice el puerto TCP 80, SMTP utiliza el puerto TCP 25 y el FTP utiliza los puertos TCP 20 y 21. Otras aplicaciones que utilicen TCP como transporte pueden elegir otro número de puerto disponible, por convención o a través de estandarización formal.

El uso de números de puerto para distinguir entre aplicaciones provocaba problemas de seguridad. Los firewalls generalmente se configuran para bloquear el tráfico TCP en todos los puertos salvo unos puntos de entrada conocidos, así que implementar una aplicación que utiliza un puerto no estándar es, a menudo, complicado o imposible, debido a la presencia de firewalls personales y corporativos. Las aplicaciones que pueden comunicarse sobre puertos estándar bien conocidos que ya están permitidos, reducen la superficie de ataque externo. Muchas aplicaciones de red utilizan el protocolo HTTP porque la mayoría de los firewalls se configuran de forma predeterminada para permitir el tráfico en el puerto TCP 80.

El modelo HTTP.SYS en el que el tráfico de muchas aplicaciones HTTP diferentes se multiplexa hacia un único puerto TCP se ha vuelto un estándar en la plataforma de Windows. Esto proporciona un punto común de control para los administradores del firewall, al tiempo que permite a los desarrolladores de aplicaciones minimizar el costo de implementación de crear nuevas aplicaciones que pueden utilizar la red.

La capacidad de compartir puertos en varias aplicaciones HTTP ha sido durante mucho tiempo una característica de Internet Information Services (IIS). Sin embargo, fue solo con la introducción de HTTP.SYS (el cliente de escucha del protocolo HTTP de modo kernel) con IIS 6.0 que se generalizó por completo esta infraestructura. En efecto, HTTP.SYS permite a procesos de usuario arbitrarios compartir los puertos TCP dedicados al tráfico de HTTP. Esta función permite que muchas aplicaciones HTTP coexistan en el mismo equipo físico en procesos aislados y separados mientras comparten la infraestructura de red requerida para enviar y recibir tráfico a través del puerto TCP 80. El servicio de uso compartido de puertos Net.TCP permite el mismo tipo de uso compartido de puertos para las aplicaciones de net.tcp.

Arquitectura de uso compartido de puertos

La arquitectura de uso compartido de puertos en WCF tiene tres componentes principales:

  • Un proceso de trabajo: cualquier proceso que se comunica sobre net.tcp:// utilizando los puertos compartidos.

  • El transporte TCP de WCF: implementa el protocolo net.tcp://.

  • El servicio de uso compartido de puertos Net.TCP: permite que varios procesos de trabajo compartan el mismo puerto TCP.

El servicio de uso compartido de puertos Net.TCP es un servicio de Windows de modo de usuario que acepta conexiones net.tcp:// en nombre de los procesos de trabajo que se conectan a través de él. Cuando una conexión de socket llega, el servicio de uso compartido de puertos inspecciona la secuencia del mensaje entrante para obtener su dirección de destino. Basándose en esta dirección, el servicio de uso compartido de puertos puede enrutar el flujo de datos a la aplicación que finalmente lo procesa.

Cuando se abre un servicio WCF que emplea el uso compartido de puertos net.tcp://, la infraestructura de transporte TCP de WCF no abre directamente un socket TCP en el proceso de la aplicación. En su lugar, la infraestructura de transporte registra el Identificador uniforme de recursos (URI) de la dirección base del servicio con el servicio de uso compartido de puertos Net.TCP y espera a que el servicio de uso compartido de puertos escuche mensajes en su nombre. El servicio de uso compartido de puertos entrega mensajes direccionados al servicio de la aplicación según van llegando.

Instalación del uso compartido de puertos

El servicio de uso compartido de puertos Net.TCP está disponible en todos los sistemas operativos que admite WinFX, pero el servicio no está habilitado de forma predeterminada. Como precaución de seguridad, un administrador debe poder habilitar manualmente el servicio de uso compartido de puertos Net.TCP antes de utilizarlo por primera vez. El servicio de uso compartido de puertos Net.TCP expone opciones de configuración que permiten manipular varias características de los sockets de red que posee el servicio de uso compartido de puertos. Para más información, consulte Habilitación del servicio de uso compartido de puertos Net.TCP.

Uso del uso compartido de puertos Net.tcp en una aplicación

La manera más fácil de utilizar el uso compartido de puertos net.tcp:// en su aplicación de WCF, es exponer un servicio mediante NetTcpBinding y, luego, habilitar el servicio de uso compartido de puertos Net.TCP mediante la propiedad PortSharingEnabled.

Para más información sobre cómo hacerlo, consulte Configuración de un servicio WCF para utilizar el uso compartido de puertos.

Implicaciones de seguridad del uso compartido de puertos

Aunque el servicio de uso compartido de puertos Net.TCP proporciona una capa de procesamiento entre las aplicaciones y la red, las aplicaciones que utilizan el uso compartido de puertos todavía deberían seguir estando protegidas como si estuvieran realizando escuchas directamente en la red. En concreto, las aplicaciones que utilizan el uso compartido de puertos deberían evaluar los privilegios de procesos bajo los que se ejecutan. Considere ejecutar su aplicación utilizando la cuenta de servicio de red integrada, que se ejecuta con el conjunto mínimo de privilegios de procesos requeridos para la comunicación por red.

Consulte también