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 que los puertos net.tcp se compartan entre varios procesos de usuario.

Fondo y motivación

Cuando se introdujo por primera vez el protocolo TCP/IP, solo un pequeño número de protocolos de aplicación lo usaron. Los números de puerto usados por TCP/IP para diferenciar entre las aplicaciones asignando un número de puerto de 16 bits único a cada protocolo de aplicación. Por ejemplo, el tráfico HTTP en la actualidad está estandarizado para usar el puerto TCP 80, SMTP usa el puerto TCP 25 y FTP usa puertos TCP 20 y 21. Otras aplicaciones que usan TCP como transporte pueden elegir otro número de puerto disponible, ya sea por convención o a través de la normalización formal.

El uso de números de puerto para distinguir entre las aplicaciones tenía problemas de seguridad. Por lo general, los firewalls están configurados para bloquear el tráfico TCP en todos los puertos, excepto para algunos puntos de entrada conocidos, por lo que la implementación de una aplicación que usa un puerto no estándar suele ser complicada o incluso imposible debido a la presencia de firewalls corporativos y personales. Las aplicaciones que pueden comunicarse a través de puertos estándar y conocidos que ya están permitidos, reducen la superficie expuesta a ataques externos. Muchas aplicaciones de red usan el protocolo HTTP porque la mayoría de los firewalls están configurados de forma predeterminada para permitir el tráfico en el puerto TCP 80.

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

La capacidad de compartir puertos entre varias aplicaciones HTTP ha sido una característica de Internet Information Services (IIS). Sin embargo, solo fue con la introducción de HTTP.SYS (el agente de escucha del protocolo HTTP en modo kernel) con IIS 6.0 que esta infraestructura estaba totalmente generalizada. En efecto, HTTP.SYS permite que los procesos de usuario arbitrarios compartan los puertos TCP dedicados al tráfico HTTP. Esta funcionalidad permite que muchas aplicaciones HTTP coexistan en la misma máquina física en procesos aislados independientes, al tiempo que comparten la infraestructura de red necesaria para enviar y recibir tráfico a través del puerto TCP 80. El servicio de uso compartido de puertos Net.TCP habilita el mismo tipo de uso compartido de puertos para aplicaciones 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 comunique a través de net.tcp:// mediante puertos compartidos.

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

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

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

Cuando se abre un servicio WCF que usa el uso compartido de puertos net.tcp://, la infraestructura de transporte TCP de WCF no abre directamente un socket TCP en el proceso de 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 envía mensajes dirigidos al servicio de aplicación a medida que llegan.

Instalación del uso compartido de puertos

El servicio de uso compartido de puertos Net.TCP está disponible en todos los sistemas operativos que admiten WinFX, pero el servicio no está habilitado de forma predeterminada. Como precaución de seguridad, un administrador debe habilitar manualmente el servicio de uso compartido de puertos Net.TCP antes de su primer uso. 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 propiedad del servicio de uso compartido de puertos. Para obtener más información, vea Cómo: Habilitar el servicio de uso compartido de puertos Net.TCP.

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

La manera más fácil de usar el uso compartido de puertos net.tcp:// en la aplicación WCF es exponer un servicio mediante NetTcpBinding y, a continuación, habilitar net.TCP Port Sharing Service mediante la PortSharingEnabled propiedad .

Para obtener más información sobre cómo hacerlo, vea Cómo: Configurar un servicio WCF para usar 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 aplicaciones y la red, las aplicaciones que usan el uso compartido de puertos deben protegerse como si estuvieran escuchando directamente en la red. En concreto, las aplicaciones que usan el uso compartido de puertos deben evaluar los privilegios de proceso en los que se ejecutan. Considere la posibilidad de ejecutar la aplicación mediante la cuenta de servicio de red integrada, que se ejecuta con el conjunto mínimo de privilegios de proceso necesarios para la comunicación de red.

Consulte también