Net.TCP-AnschlussfreigabeNet.TCP Port Sharing

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) bietet ein neues, TCP-basiertes Netzwerkprotokoll (net.tcp://) für Hochleistungskommunikation. provides a new TCP-based network protocol (net.tcp://) for high-performance communication. WCFWCF führt außerdem eine neue Systemkomponente ein, den TCP-Portfreigabedienst, mit dem net.tcp-Ports für mehrfache Benutzervorgänge freigegeben werden können. also introduces a new system component, the Net.TCP Port Sharing Service that enables net.tcp ports to be shared across multiple user processes.

Hintergrund und MotivationBackground and Motivation

Als das TCP/IP-Protokoll erstmals eingeführt wurde, wurde es nur von einer geringen Anzahl von Anwendungsprotokollen verwendet.When the TCP/IP protocol was first introduced, only a small number of application protocols made use of it. TCP/IP verwendete Anschlussnummern, um zwischen Anwendungen zu unterscheiden, indem es jedem Anwendungsprotokoll eine eindeutige 16-bit-Anschlussnummer zuwies.TCP/IP used port numbers to differentiate between applications by assigning a unique 16-bit port number to each application protocol. HTTP-Verkehr verwendet heute beispielsweise standardmäßig den TCP-Anschluss 80, SMTP verwendet den TCP-Anschluss 25, und FTP verwendet die TCP-Anschlüsse 20 und 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. Andere Anwendungen, die TCP als Transport verwenden, können eine weitere verfügbare Anschlussnummer wählen, entweder durch Konventionen oder durch formale Standardisierung.Other applications using TCP as a transport can choose another available port number, either by convention or through formal standardization.

Die Verwendung von Anschlussnummern zur Unterscheidung zwischen Anwendungen barg Sicherheitsprobleme.Using port numbers to distinguish between applications had security problems. Firewalls sind in der Regel so konfiguriert, dass Sie TCP-Verkehr an allen Anschlüssen außer den wenigen wohlbekannten Eingangspunkten blockieren, sodass die Bereitstellung einer Anwendung, die einen Nicht-Standardanschluss verwendet, durch das Vorhandensein firmenspezifischer oder persönlicher Firewalls oft kompliziert oder sogar unmöglich ist.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. Anwendungen, die über bekannten, bereits zugelassene Standardanschlüsse kommunizieren können, verringern die Angriffsfläche für externe Angriffe.Applications that can communicate over standard, well-known ports that are already permitted, reduce the external attack surface. Viele Netzwerkanwendungen verwenden das HTTP-Protokoll, da die meisten Firewalls standardmäßig so konfiguriert sind, dass sie Verkehr am TCP-Anschluss 80 zulassen.Many network applications make use of the HTTP protocol because most firewalls are configured by default to allow traffic on TCP port 80.

Das HTTP.SYS-Modell, in dem der Verkehr für viele verschiedene HTTP-Anwendungen als Multiplex über einen einzelnen TCP-Anschluss geleitet wird, ist heute Standard auf der Windows-Plattform.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. Dies bietet Firewalladministratoren einen gemeinsamen Steuerungspunkt, und bietet zugleich Anwendungsentwicklern die Möglichkeit, die Bereitstellungskosten beim Erstellen neuer Anwendungen, die das Netzwerk verwenden können, zu minimieren.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.

Die Möglichkeit, Anschlüsse für mehrere HTTP-Anwendungen freizugeben ist schon lange eine Funktion von Internetinformationsdiensten (Internet Information Services, IIS).The ability to share ports across multiple HTTP applications has long been a feature of Internet Information Services (IIS). Jedoch wurde diese Infrastruktur erst mit der Einführung von HTTP.SYS (dem Kernelmoduslistener des HTTP-Protokolls) durch IIS 6.0IIS 6.0 vollständig generalisiert.However, it was only with the introduction of HTTP.SYS (the kernel-mode HTTP protocol listener) with IIS 6.0IIS 6.0 that this infrastructure was fully generalized. Tatsächlich ermöglicht HTTP.SYS es beliebigen Benutzerprozessen, die für HTTP-Verkehr vorgesehen TCP-Anschlüsse gemeinsam zu verwenden.In effect, HTTP.SYS allows arbitrary user processes to share the TCP ports dedicated to HTTP traffic. Durch diese Fähigkeit können zahlreiche HTTP-Anwendungen auf dem selben physischen Gerät in getrennten, isolierten Prozessen koexistieren und dabei die zum Senden und Empfangen von Verkehr über den TCP-Anschluss 80 erforderliche Netzwerkinfrastruktur gemeinsam verwenden.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. Der Net.TCP-Portfreigabedienst ermöglicht die gleiche Art der Anschlussfreigabe für net.tcp-Anwendungen.The Net.TCP Port Sharing Service enables the same type of port sharing for net.tcp applications.

Architektur der AnschlussfreigabePort Sharing Architecture

Die Anschlussfreigabearchitektur in WCFWCF besteht aus drei Hauptkomponenten:The Port Sharing architecture in WCFWCF has three main components:

  • Ein Arbeitsprozess: Ein beliebiger Prozess, der mithilfe freigegebener Anschlüsse über net.tcp:// kommuniziert.A Worker Process: Any process communicating over net.tcp:// using shared ports.

  • Der WCFWCF TCP-Transport: Implementiert das net.tcp://-Protokoll.The WCFWCF TCP transport: Implements the net.tcp:// protocol.

  • Der Net.TCP-Portfreigabedienst: Ermöglicht mehreren Arbeitsprozessen, den gleichen TCP-Anschluss zu verwenden.The Net.TCP Port Sharing Service: Allows many worker processes to share the same TCP port.

Der Net.TCP-Portfreigabedienst ist ein Windows-Dienst im Benutzermodus, der net.tcp://-Verbindungen im Namen von Arbeitsprozessen akzeptiert, die sich über ihn verbinden.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. Wenn eine Socketverbindung ankommt, untersucht der Portfreigabedienst den eingehenden Nachrichtenstrom, um dessen Zieladresse zu erhalten.When a socket connection arrives, the port sharing service inspects the incoming message stream to obtain its destination address. Basierend auf dieser Adresse kann der Portfreigabedienst den Datenstrom zu der Anwendung weiterleiten, die ihn letztendlich verarbeitet.Based on this address, the port sharing service can route the data stream to the application that ultimately processes it.

Wenn ein WCFWCF-Dienst, der net.tcp://-Anschlussfreigabe verwendet, geöffnet wird, öffnet die WCFWCF TCP-Transportinfrastruktur nicht direkt einen TCP-Socket im Anwendungsprozess.When a WCFWCF service that uses net.tcp:// port sharing opens, the WCFWCF TCP transport infrastructure does not directly open a TCP socket in the application process. Stattdessen registriert die Transportinfrastruktur den Basisadressen-URI (Uniform Resource Identifier) des Dienstes mit dem Net.TCP-Portfreigabedienst und wartet darauf, dass der Portfreigabedienst in ihrem Namen den Eingang von Nachrichten abhört.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. Der Portfreigabedienst leitet an den Anwendungsdienst adressierte Nachrichten bei Eingang weiter.The port sharing service dispatches messages addressed to the application service as they arrive.

Installieren der AnschlussfreigabeInstalling Port Sharing

Der Net.TCP-Portfreigabedienst steht auf allen Betriebssystemen, die WinFXWinFX unterstützen zur Verfügung, aber der Dienst ist nicht standardmäßig aktiviert.The Net.TCP Port Sharing Service is available on all operating systems that support WinFXWinFX, but the service is not enabled by default. Als Sicherheitsmaßnahme muss der Net.TCP-Portfreigabedienst vor der ersten Verwendung manuell von einem Administrator aktiviert werden.As a security precaution, an administrator must manually enable the Net.TCP Port Sharing Service prior to first use. Der Net.TCP-Portfreigabedienst stellt Konfigurationsoptionen zur Verfügung, mit denen Sie einige Merkmale der dem Portfreigabedienst gehörenden Netzwerksockets ändern können.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. Weitere Informationen finden Sie unterFor more information, seeVorgehensweise: Aktivieren der Net.TCP-Portfreigabedienst. How to: Enable the Net.TCP Port Sharing Service.

Verwenden der Net.tcp-Anschlussfreigabe in einer AnwendungUsing Net.tcp Port Sharing in an Application

Der einfachste Weg, um die net.tcp://-Anschlussfreigabe in Ihrer WCFWCF-Anwendung zu verwenden, besteht darin, einen Dienst mit der NetTcpBinding verfügbar zu machen, und dann den Net.TCP-Portfreigabedienst mithilfe der PortSharingEnabled-Eigenschaft zu aktivieren.The easiest way to use net.tcp:// port sharing in your WCFWCF application is to expose a service using the NetTcpBinding and then to enable Net.TCP Port Sharing Service using the PortSharingEnabled property.

Weitere Informationen finden Sie unterFor more information aboutVorgehensweise hierzu finden Sie unter Vorgehensweise: Konfigurieren eines WCF-Diensts, um die Portfreigabe verwenden. how to do this, see How to: Configure a WCF Service to Use Port Sharing.

Sicherheitsauswirkungen der AnschlussfreigabeSecurity Implications of Port Sharing

Obwohl der Net.TCP-Portfreigabedienst eine Verarbeitungsschicht zwischen Anwendungen und dem Netzwerk bereitstellt, sollten Anwendungen, die die Anschlussfreigabe nutzen, zusätzlich so gesichert werden, als würden sie das Netzwerk direkt überwachen.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. Insbesondere sollten Anwendungen, die die Anschlussfreigabe nutzen, die Prozessprivilegien auswerten, unter denen sie ausgeführt werden.Specifically, applications that use port sharing should evaluate the process privileges under which they run. Ziehen Sie in Betracht, die Anwendung unter dem integrierten Netzwerkdienstkonto auszuführen, das mit der minimalen Gruppe der zur Netzwerkkommunikation erforderlichen Privilegien ausgeführt wird.Consider running your application using the built-in Network Service account, which runs with the minimal set of process privileges required for network communication.

Siehe auchSee Also

Konfigurieren des Net.TCP-PortfreigabedienstsConfiguring the Net.TCP Port Sharing Service
HostingHosting
Vorgehensweise: Konfigurieren eines WCF-Diensts für die PortfreigabeHow to: Configure a WCF Service to Use Port Sharing
Vorgehensweise: Aktivieren des Net.TCP-PortfreigabedienstsHow to: Enable the Net.TCP Port Sharing Service