Delen via


Net.TCP-poort delen

Windows Communication Foundation (WCF) biedt een nieuw TCP-netwerkprotocol (net.tcp://) voor communicatie met hoge prestaties. WCF introduceert ook een nieuw systeemonderdeel, de Net.TCP Port Sharing-service waarmee net.tcp-poorten kunnen worden gedeeld via meerdere gebruikersprocessen.

Achtergrond en motivatie

Toen het TCP/IP-protocol voor het eerst werd geïntroduceerd, werd er slechts een klein aantal toepassingsprotocollen gebruikt. TCP/IP gebruikte poortnummers om onderscheid te maken tussen toepassingen door een uniek 16-bits poortnummer toe te wijzen aan elk toepassingsprotocol. HTTP-verkeer is momenteel bijvoorbeeld gestandaardiseerd voor het gebruik van TCP-poort 80, SMTP maakt gebruik van TCP-poort 25 en FTP maakt gebruik van TCP-poorten 20 en 21. Andere toepassingen die TCP als transport gebruiken, kunnen een ander beschikbaar poortnummer kiezen, hetzij volgens conventie of via formele standaardisatie.

Het gebruik van poortnummers om onderscheid te maken tussen toepassingen had beveiligingsproblemen. Firewalls zijn over het algemeen geconfigureerd om TCP-verkeer op alle poorten te blokkeren, met uitzondering van enkele bekende toegangspunten, dus het implementeren van een toepassing die gebruikmaakt van een niet-standaardpoort is vaak ingewikkeld of zelfs onmogelijk vanwege de aanwezigheid van bedrijfs- en persoonlijke firewalls. Toepassingen die kunnen communiceren via standaardpoorten die al zijn toegestaan, verminderen het externe aanvalsoppervlak. Veel netwerktoepassingen maken gebruik van het HTTP-protocol omdat de meeste firewalls standaard zijn geconfigureerd om verkeer op TCP-poort 80 toe te staan.

Het HTTP.SYS model waarin verkeer voor veel verschillende HTTP-toepassingen wordt ge multiplexeerd op één TCP-poort, is standaard geworden op het Windows-platform. Dit biedt een algemeen beheerpunt voor firewallbeheerders, terwijl toepassingsontwikkelaars de implementatiekosten voor het bouwen van nieuwe toepassingen die gebruik kunnen maken van het netwerk, kunnen minimaliseren.

De mogelijkheid om poorten te delen in meerdere HTTP-toepassingen is al lang een functie van Internet Information Services (IIS). Het was echter alleen met de introductie van HTTP.SYS (de kernelmodus HTTP-protocollistener) met IIS 6.0 dat deze infrastructuur volledig gegeneraliseerd was. In feite kunnen HTTP.SYS willekeurige gebruikersprocessen de TCP-poorten delen die zijn toegewezen aan HTTP-verkeer. Met deze mogelijkheid kunnen veel HTTP-toepassingen naast elkaar bestaan op dezelfde fysieke machine in afzonderlijke, geïsoleerde processen terwijl de netwerkinfrastructuur wordt gedeeld die nodig is voor het verzenden en ontvangen van verkeer via TCP-poort 80. De Net.TCP Port Sharing-service maakt hetzelfde type poortdeling mogelijk voor net.tcp-toepassingen.

Architectuur voor delen van poorten

De architectuur voor het delen van poorten in WCF heeft drie hoofdonderdelen:

  • Een werkproces: elk proces dat via net.tcp:// communiceert met behulp van gedeelde poorten.

  • Het WCF TCP-transport: implementeert het net.tcp://-protocol.

  • De Net.TCP-service voor het delen van poorten: hiermee kunnen veel werkprocessen dezelfde TCP-poort delen.

Net.TCP Port Sharing Service is een Windows-service in de gebruikersmodus die net.tcp://-verbindingen accepteert namens de werkprocessen die er verbinding mee maken. Wanneer een socketverbinding binnenkomt, inspecteert de poortdelingsservice de binnenkomende berichtstroom om het doeladres te verkrijgen. Op basis van dit adres kan de service voor het delen van poorten de gegevensstroom doorsturen naar de toepassing die deze uiteindelijk verwerkt.

Wanneer een WCF-service die gebruikmaakt van net.tcp://-poort delen wordt geopend, opent de WCF TCP-transportinfrastructuur geen TCP-socket rechtstreeks in het toepassingsproces. In plaats daarvan registreert de transportinfrastructuur de URI (Base Address Uniform Resource Identifier) van de service met de Net.TCP Port Sharing Service en wacht tot de service voor het delen van poorten namens de service naar berichten luistert. De port sharing-service verzendt berichten die zijn geadresseerd aan de toepassingsservice wanneer ze binnenkomen.

Poort delen installeren

De Net.TCP Port Sharing Service is beschikbaar op alle besturingssystemen die WinFX ondersteunen, maar de service is niet standaard ingeschakeld. Als voorzorgsmaatregel moet een beheerder de Net.TCP Port Sharing-service handmatig inschakelen voordat deze voor het eerst wordt gebruikt. De Net.TCP Port Sharing Service biedt configuratieopties waarmee u verschillende kenmerken kunt bewerken van de netwerksockets die eigendom zijn van de service voor het delen van poorten. Zie Procedure voor meer informatie: De Net.TCP-poort delen-service inschakelen.

Net.tcp-poort delen gebruiken in een toepassing

De eenvoudigste manier om net.tcp://-poort delen in uw WCF-toepassing te gebruiken, is door een service beschikbaar te maken met behulp van de NetTcpBinding service en vervolgens Net.TCP Port Sharing Service in te schakelen met behulp van de PortSharingEnabled eigenschap.

Zie How to: Configure a WCF Service to Use Port Sharing (Een WCF-service configureren voor het gebruik van poort delen) voor meer informatie over hoe u dit doet.

Beveiligingsproblemen van het delen van poorten

Hoewel de Net.TCP Port Sharing Service een laag van verwerking biedt tussen toepassingen en het netwerk, moeten toepassingen die gebruikmaken van poort delen nog steeds worden beveiligd alsof ze rechtstreeks op het netwerk luisteren. Toepassingen die gebruikmaken van poortdeling moeten met name de procesbevoegdheden evalueren waaronder ze worden uitgevoerd. Overweeg om uw toepassing uit te voeren met behulp van het ingebouwde netwerkserviceaccount, dat wordt uitgevoerd met de minimale set procesbevoegdheden die vereist zijn voor netwerkcommunicatie.

Zie ook