Net.TCP-portdelning
Windows Communication Foundation (WCF) tillhandahåller ett nytt TCP-baserat nätverksprotokoll (net.tcp://) för kommunikation med höga prestanda. WCF introducerar också en ny systemkomponent, Net.TCP-portdelningstjänsten som gör att net.tcp-portar kan delas mellan flera användarprocesser.
Bakgrund och motivation
När TCP/IP-protokollet först introducerades använde bara ett litet antal programprotokoll det. TCP/IP använde portnummer för att skilja mellan program genom att tilldela ett unikt 16-bitars portnummer till varje programprotokoll. Till exempel är HTTP-trafik idag standardiserad för att använda TCP-port 80, SMTP använder TCP-port 25 och FTP använder TCP-portarna 20 och 21. Andra program som använder TCP som transport kan välja ett annat tillgängligt portnummer, antingen enligt konvention eller genom formell standardisering.
Att använda portnummer för att skilja mellan program hade säkerhetsproblem. Brandväggar är vanligtvis konfigurerade för att blockera TCP-trafik på alla portar förutom några välkända startpunkter, så att distribuera ett program som använder en icke-standardport är ofta komplicerat eller till och med omöjligt på grund av förekomsten av företagsbrandväggar och personliga brandväggar. Program som kan kommunicera via vanliga, välkända portar som redan är tillåtna minskar den externa attackytan. Många nätverksprogram använder HTTP-protokollet eftersom de flesta brandväggar är konfigurerade som standard för att tillåta trafik på TCP-port 80.
Den HTTP.SYS modell där trafik för många olika HTTP-program multiplexeras till en enda TCP-port har blivit standard på Windows-plattformen. Detta ger en gemensam kontrollpunkt för brandväggsadministratörer samtidigt som programutvecklare kan minimera distributionskostnaden för att skapa nya program som kan använda nätverket.
Möjligheten att dela portar i flera HTTP-program har länge varit en funktion i IIS (Internet Information Services). Det var dock bara med introduktionen av HTTP.SYS (HTTP-protokolllyssnaren i kernelläge) med IIS 6.0 som infrastrukturen var helt generaliserad. I själva verket tillåter HTTP.SYS godtyckliga användarprocesser att dela de TCP-portar som är dedikerade till HTTP-trafik. Med den här funktionen kan många HTTP-program samexistera på samma fysiska dator i separata, isolerade processer samtidigt som nätverksinfrastrukturen som krävs för att skicka och ta emot trafik via TCP-port 80 delas. Portdelningstjänsten Net.TCP möjliggör samma typ av portdelning för net.tcp-program.
Arkitektur för portdelning
Portdelningsarkitekturen i WCF har tre huvudkomponenter:
En arbetsprocess: Alla processer som kommunicerar via net.tcp:// med delade portar.
WCF TCP-transport: Implementerar net.tcp://-protokollet.
Net.TCP-portdelningstjänsten: Tillåter att många arbetsprocesser delar samma TCP-port.
Net.TCP-portdelningstjänsten är en Windows-tjänst i användarläge som accepterar net.tcp://-anslutningar för de arbetsprocesser som ansluter via den. När en socketanslutning tas emot inspekterar portdelningstjänsten den inkommande meddelandeströmmen för att hämta måladressen. Baserat på den här adressen kan portdelningstjänsten dirigera dataströmmen till det program som slutligen bearbetar den.
När en WCF-tjänst som använder net.tcp://-portdelning öppnas öppnar inte WCF TCP-transportinfrastrukturen direkt en TCP-socket i programprocessen. I stället registrerar transportinfrastrukturen tjänstens basadress URI (Uniform Resource Identifier) med Net.TCP-portdelningstjänsten och väntar på att portdelningstjänsten ska lyssna efter meddelanden för dess räkning. Portdelningstjänsten skickar meddelanden som är adresserade till programtjänsten när de anländer.
Installera portdelning
Portdelningstjänsten Net.TCP är tillgänglig på alla operativsystem som stöder WinFX, men tjänsten är inte aktiverad som standard. Som en säkerhetsåtgärd måste administratören aktivera Net.TCP-portdelningstjänsten manuellt innan den första användningen. Net.TCP-portdelningstjänsten visar konfigurationsalternativ som gör att du kan ändra flera egenskaper för de nätverksuttag som ägs av portdelningstjänsten. Mer information finns i Så här aktiverar du Net.TCP-portdelningstjänsten.
Använda Net.tcp-portdelning i ett program
Det enklaste sättet att använda net.tcp://-portdelning i ditt WCF-program är att exponera en tjänst med hjälp av NetTcpBinding och sedan aktivera Net.TCP-portdelningstjänsten med hjälp av PortSharingEnabled egenskapen .
Mer information om hur du gör detta finns i Så här: Konfigurera en WCF-tjänst för att använda portdelning.
Säkerhetskonsekvenser av portdelning
Även om Net.TCP-portdelningstjänsten tillhandahåller ett lager av bearbetning mellan program och nätverket, bör program som använder portdelning fortfarande skyddas som om de lyssnade direkt i nätverket. Mer specifikt bör program som använder portdelning utvärdera processprivilegier under vilka de körs. Överväg att köra ditt program med det inbyggda nätverkstjänstkontot, som körs med den minimala uppsättning processprivilegier som krävs för nätverkskommunikation.