Freigeben über


Net.TCP-Anschlussfreigabe

Windows Communication Foundation (WCF) bietet ein neues TCP-basiertes Netzwerkprotokoll (net.tcp://) für eine leistungsfähige Kommunikation. WCF führt außerdem eine neue Systemkomponente ein, den Net.TCP-Portfreigabedienst, der es ermöglicht, net.tcp-Ports über mehrere Benutzerprozesse hinweg gemeinsam zu nutzen.

Hintergrund und Motivation

Als das TCP/IP-Protokoll zum ersten Mal eingeführt wurde, wurden nur wenige Anwendungsprotokolle verwendet. TCP/IP verwendete Portnummern, um zwischen Anwendungen zu unterscheiden, indem sie jedem Anwendungsprotokoll eine eindeutige Portnummer der 16-Bit-Version zuweisen. Beispielsweise ist der HEUTIGE HTTP-Datenverkehr für die Verwendung von TCP-Port 80 standardisiert, SMTP verwendet TCP-Port 25, und FTP verwendet TCP-Ports 20 und 21. Andere Anwendungen, die TCP als Transport verwenden, können entweder nach Konvention oder durch formale Standardisierung eine andere verfügbare Portnummer auswählen.

Die Verwendung von Portnummern zum Unterscheiden zwischen Anwendungen hatte Sicherheitsprobleme. Firewalls sind in der Regel so konfiguriert, dass TCP-Datenverkehr auf allen Ports blockiert wird, mit Ausnahme einiger bekannter Einstiegspunkte. Daher ist die Bereitstellung einer Anwendung, die einen nicht standardmäßigen Port verwendet, häufig kompliziert oder sogar unmöglich, da Unternehmens- und persönliche Firewalls vorhanden sind. Anwendungen, die über standardmäßige, bekannte Ports kommunizieren können, die bereits zulässig sind, reduzieren die externe Angriffsfläche. Viele Netzwerkanwendungen verwenden das HTTP-Protokoll, da die meisten Firewalls standardmäßig so konfiguriert sind, dass Datenverkehr auf TCP-Port 80 zulässig ist.

Das HTTP.SYS-Modell, bei dem Datenverkehr für viele verschiedene HTTP-Anwendungen auf der Windows-Plattform über einen einzelnen TCP-Port multiplexiert wird, ist zum Standard geworden. Dies bietet einen allgemeinen Kontrollpunkt für Firewalladministratoren, während Anwendungsentwickler die Bereitstellungskosten für die Erstellung neuer Anwendungen minimieren können, die das Netzwerk nutzen können.

Die Möglichkeit, Ports über mehrere HTTP-Anwendungen hinweg zu teilen, ist seit langem ein Feature von Internetinformationsdienste (Internet Information Services, IIS). Allerdings war es nur mit der Einführung von HTTP.SYS (dem Kernelmodus-HTTP-Protokolllistener) mit IIS 6.0, dass diese Infrastruktur vollständig generalisiert wurde. Tatsächlich ermöglicht HTTP.SYS beliebigen Benutzerprozessen die Freigabe der TCP-Ports, die http-Datenverkehr zugeordnet sind. Mit dieser Funktion können viele HTTP-Anwendungen auf demselben physischen Computer in separaten, isolierten Prozessen koexistieren und gleichzeitig die Netzwerkinfrastruktur freigeben, die zum Senden und Empfangen von Datenverkehr über TCP-Port 80 erforderlich ist. Der Net.TCP-Portfreigabedienst ermöglicht den gleichen Portfreigabetyp für net.tcp-Anwendungen.

Architektur der Anschlussfreigabe

Die Portfreigabearchitektur in WCF verfügt über drei Hauptkomponenten:

  • Ein Worker-Prozess: Jeder beliebige Prozess, der über net.tcp:// kommuniziert und gemeinsame Ports verwendet.

  • Der WCF-TCP-Transport: Implementiert das Net.tcp://-Protokoll.

  • Der Net.TCP-Portfreigabedienst: Ermöglicht es vielen Arbeitsprozessen, denselben TCP-Port gemeinsam zu nutzen.

Der Net.TCP-Portfreigabedienst ist ein Windows-Dienst im Benutzermodus, der net.tcp://-Verbindungen im Auftrag der Arbeitsprozesse akzeptiert, die eine Verbindung damit herstellen. Wenn eine Socketverbindung hergestellt wird, überprüft der Dienst zur Portfreigabe den eingehenden Nachrichtenstrom, um die Zieladresse zu ermitteln. Basierend auf dieser Adresse kann der Portfreigabedienst den Datenstrom an die Anwendung weiterleiten, die ihn letztendlich verarbeitet.

Wenn ein WCF-Dienst, der die net.tcp://-Portfreigabe nutzt, geöffnet wird, öffnet die WCF-TCP-Transportinfrastruktur keinen TCP-Socket direkt im Anwendungsprozess. Stattdessen registriert die Transportinfrastruktur den Basisadressen-URI (Uniform Resource Identifier) des Diensts mit dem Net.TCP-Portfreigabedienst und wartet darauf, dass der Portfreigabedienst nachrichten in seinem Auftrag abhört. Der Portfreigabedienst leitet eingehende Nachrichten, die an den Anwendungsdienst adressiert sind, sofort weiter.

Installieren der Anschlussfreigabe

Der Net.TCP-Portfreigabedienst ist auf allen Betriebssystemen verfügbar, die WinFX unterstützen, der Dienst ist jedoch nicht standardmäßig aktiviert. Als Sicherheitsvorkehrung muss ein Administrator den Net.TCP-Portfreigabedienst vor der ersten Verwendung manuell aktivieren. Der Net.TCP-Portfreigabedienst macht Konfigurationsoptionen verfügbar, mit denen Sie mehrere Merkmale der Netzwerksockets ändern können, die sich im Besitz des Portfreigabediensts befinden. Weitere Informationen finden Sie unter How to: Enable the Net.TCP Port Sharing Service.

Verwenden der Net.tcp-Anschlussfreigabe in einer Anwendung

Die einfachste Möglichkeit, die Net.tcp://-Portfreigabe in Ihrer WCF-Anwendung zu verwenden, besteht darin, einen Dienst über NetTcpBinding bereitzustellen und dann den Net.TCP-Portfreigedienst über die PortSharingEnabled-Eigenschaft zu aktivieren.

Weitere Informationen darüber, wie dies zu tun ist, finden Sie unter Anleitung: Konfigurieren eines WCF-Dienstes zur Verwendung von Port-Sharing.

Auswirkungen auf die Sicherheit durch die gemeinsame Nutzung von Ports

Obwohl der Net.TCP-Portfreigabedienst eine Ebene der Verarbeitung zwischen Anwendungen und dem Netzwerk bietet, sollten Anwendungen, die die Portfreigabe verwenden, weiterhin gesichert werden, als ob sie direkt auf das Netzwerk lauschen würden. Insbesondere sollten Anwendungen, die die Portfreigabe verwenden, die Prozessberechtigungen auswerten, unter denen sie ausgeführt werden. Erwägen Sie die Ausführung Ihrer Anwendung mithilfe des integrierten Netzwerkdienstkontos, das mit den minimalen Prozessberechtigungen ausgeführt wird, die für die Netzwerkkommunikation erforderlich sind.

Siehe auch