Condividi tramite


Condivisione delle porte Net.TCP

Windows Communication Foundation (WCF) fornisce un nuovo protocollo di rete basato su TCP (net.tcp://) per la comunicazione a prestazioni elevate. WCF introduce anche un nuovo componente di sistema, il servizio di condivisione delle porte Net.TCP che consente la condivisione delle porte net.tcp tra più processi utente.

Background e motivazione

Quando è stato introdotto per la prima volta il protocollo TCP/IP, viene usato solo un numero ridotto di protocolli dell'applicazione. TCP/IP usa numeri di porta per distinguere le applicazioni assegnando un numero di porta univoco a 16 bit a ogni protocollo dell'applicazione. Ad esempio, il traffico HTTP è attualmente standardizzato per usare la porta TCP 80, SMTP usa la porta TCP 25 e FTP usa le porte TCP 20 e 21. Altre applicazioni che usano TCP come trasporto possono scegliere un altro numero di porta disponibile, per convenzione o tramite la standardizzazione formale.

L'uso dei numeri di porta per distinguere le applicazioni presentava problemi di sicurezza. I firewall sono in genere configurati per bloccare il traffico TCP su tutte le porte ad eccezione di alcuni punti di ingresso noti, quindi la distribuzione di un'applicazione che usa una porta non standard è spesso complicata o persino impossibile a causa della presenza di firewall aziendali e personali. Le applicazioni che possono comunicare su porte standard, note già consentite, riducono la superficie di attacco esterna. Molte applicazioni di rete usano il protocollo HTTP perché la maggior parte dei firewall è configurata per impostazione predefinita per consentire il traffico sulla porta TCP 80.

Il modello HTTP.SYS in cui il traffico per molte applicazioni HTTP diverse viene sottoposto a multiplexing su una singola porta TCP è diventato standard nella piattaforma Windows. Questo offre un punto comune di controllo per gli amministratori del firewall, consentendo agli sviluppatori di applicazioni di ridurre al minimo il costo di distribuzione della creazione di nuove applicazioni che possono usare la rete.

La possibilità di condividere le porte tra più applicazioni HTTP è stata da molto tempo una funzionalità di Internet Information Services (IIS). Tuttavia, è stato solo con l'introduzione di HTTP.SYS (listener del protocollo HTTP in modalità kernel) con IIS 6.0 che questa infrastruttura è stata completamente generalizzata. In effetti, HTTP.SYS consente ai processi utente arbitrari di condividere le porte TCP dedicate al traffico HTTP. Questa funzionalità consente a molte applicazioni HTTP di coesistere nello stesso computer fisico in processi separati isolati, condividendo l'infrastruttura di rete necessaria per inviare e ricevere traffico sulla porta TCP 80. Il servizio di condivisione delle porte Net.TCP abilita lo stesso tipo di condivisione delle porte per le applicazioni net.tcp.

Architettura di condivisione delle porte

L'architettura di condivisione delle porte in WCF include tre componenti principali:

  • Processo di lavoro: qualsiasi processo che comunica tramite net.tcp:// tramite porte condivise.

  • Trasporto TCP WCF: implementa il protocollo net.tcp://.

  • Servizio di condivisione porte Net.TCP: consente a molti processi di lavoro di condividere la stessa porta TCP.

Net.TCP Port Sharing Service è un servizio Windows in modalità utente che accetta connessioni net.tcp:// per conto dei processi di lavoro che si connettono tramite esso. Quando arriva una connessione socket, il servizio di condivisione delle porte controlla il flusso di messaggi in ingresso per ottenere l'indirizzo di destinazione. In base a questo indirizzo, il servizio di condivisione delle porte può instradare il flusso di dati all'applicazione che lo elabora in definitiva.

Quando si apre un servizio WCF che utilizza la condivisione di porte net.tcp://, l'infrastruttura di trasporto TCP WCF non apre direttamente un socket TCP nel processo dell'applicazione. L'infrastruttura di trasporto registra invece l'URI (Uniform Resource Identifier) dell'indirizzo di base del servizio con il servizio di condivisione delle porte Net.TCP e attende che il servizio di condivisione delle porte ascolti i messaggi per suo conto. Il servizio di condivisione delle porte invia messaggi indirizzati al servizio dell'applicazione man mano che arrivano.

Installazione della condivisione delle porte

Il servizio Net.TCP Port Sharing è disponibile in tutti i sistemi operativi che supportano WinFX, ma il servizio non è abilitato per impostazione predefinita. Come precauzione di sicurezza, un amministratore deve abilitare manualmente il servizio di condivisione delle porte Net.TCP prima del primo utilizzo. Il servizio di condivisione delle porte Net.TCP espone le opzioni di configurazione che consentono di modificare diverse caratteristiche dei socket di rete di proprietà del servizio di condivisione delle porte. Per altre informazioni, vedere Procedura: Abilitare il servizio di condivisione delle porte Net.TCP.

Uso della condivisione delle porte Net.tcp in un'applicazione

Il modo più semplice per usare la condivisione delle porte net.tcp:// nell'applicazione WCF consiste nell'esporre un servizio usando NetTcpBinding e quindi abilitare il servizio di condivisione delle porte Net.TCP usando la PortSharingEnabled proprietà .

Per altre informazioni su come eseguire questa operazione, vedere Procedura: Configurare un servizio WCF per l'uso della condivisione delle porte.

Implicazioni per la sicurezza della condivisione delle porte

Anche se il servizio di condivisione delle porte Net.TCP fornisce un livello di elaborazione tra le applicazioni e la rete, le applicazioni che usano la condivisione delle porte devono comunque essere protette come se fossero direttamente in ascolto sulla rete. In particolare, le applicazioni che usano la condivisione delle porte devono valutare i privilegi di processo con cui vengono eseguiti. Considerare l'esecuzione dell'applicazione usando l'account Network Service integrato, che viene eseguito con il set minimo di privilegi di processo necessari per la comunicazione di rete.

Vedere anche