Uso compartido de puertos Net.TCP
Windows Communication Foundation (WCF) proporciona un nuevo protocolo de red basado en TCP (net.tcp://) para ofrecer una comunicación de alto rendimiento. WCF también introduce un nuevo componente de sistema, el servicio de uso compartido de puertos Net.TCP que permite compartir puertos net.tcp en varios procesos de usuario.
Fondo y motivación
Cuando se introdujo el protocolo TCP/IP por primera vez, sólo 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 generar 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, sólo fue con la introducción de HTTP.SYS (el agente de escucha de 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 se comparte 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 del 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 la secuencia de datos a la aplicación que finalmente lo procesa.
Cuando un servicio de WCF que utiliza el uso compartido de puertos net.tcp:// se abre, 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 .NET Framework 3,0 admite, pero el servicio no está habilitado de forma predeterminada. Como precaución de seguridad, un administrador debe poder activar 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 obtener más información, consulte Cómo habilitar el 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, a continuación, activar el servicio de uso compartido de puertos Net.TCP, mediante la propiedad PortSharingEnabled.
Para obtener más información acerca de cómo hacerlo, consulte Cómo: Configurar un servicio de Windows Communication Foundation para utilizar puertos compartidos.
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
Tareas
Cómo: Configurar un servicio de Windows Communication Foundation para utilizar puertos compartidos
Cómo habilitar el servicio de uso compartido de puertos Net.TCP
Conceptos
Configuración del servicio de uso compartido de puertos Net.TCP