Współużytkowanie portów w składniku Net.TCP

Program Windows Communication Foundation (WCF) udostępnia nowy protokół sieciowy oparty na protokole TCP (net.tcp://) na potrzeby komunikacji o wysokiej wydajności. WCF wprowadza również nowy składnik systemu, usługę udostępniania portów Net.TCP, która umożliwia współużytkowanie portów net.tcp w wielu procesach użytkownika.

Tło i motywacja

Po pierwszym wprowadzeniu protokołu TCP/IP użyto tylko niewielkiej liczby protokołów aplikacji. Protokół TCP/IP używał numerów portów do rozróżniania aplikacji przez przypisanie unikatowego 16-bitowego numeru portu do każdego protokołu aplikacji. Na przykład ruch HTTP jest obecnie ustandaryzowany do korzystania z portu TCP 80, SMTP używa portu TCP 25, a FTP używa portów TCP 20 i 21. Inne aplikacje korzystające z protokołu TCP jako transportu mogą wybrać inny dostępny numer portu, zgodnie z konwencją lub przez formalną standaryzację.

Używanie numerów portów do rozróżnienia między aplikacjami miało problemy z zabezpieczeniami. Zapory są zwykle skonfigurowane do blokowania ruchu TCP na wszystkich portach z wyjątkiem kilku dobrze znanych punktów wejścia, dlatego wdrożenie aplikacji korzystającej z niestandardowego portu jest często skomplikowane lub nawet niemożliwe z powodu obecności zapór firmowych i osobistych. Aplikacje, które mogą komunikować się za pośrednictwem standardowych, dobrze znanych portów, które są już dozwolone, zmniejszają zewnętrzną powierzchnię ataków. Wiele aplikacji sieciowych korzysta z protokołu HTTP, ponieważ większość zapór jest domyślnie skonfigurowana tak, aby zezwalać na ruch na porcie TCP 80.

Model HTTP.SYS, w którym ruch dla wielu różnych aplikacji HTTP jest multipleksowany na jednym porcie TCP, stał się standardowy na platformie Windows. Zapewnia to wspólny punkt kontroli dla administratorów zapory, umożliwiając deweloperom aplikacji zminimalizowanie kosztów wdrażania tworzenia nowych aplikacji, które mogą korzystać z sieci.

Możliwość współużytkowania portów w wielu aplikacjach HTTP od dawna jest funkcją usług Internet Information Services (IIS). Jednak dopiero po wprowadzeniu HTTP.SYS (odbiornik protokołu HTTP w trybie jądra) z usługami IIS 6.0 ta infrastruktura została w pełni uogólniona. W efekcie HTTP.SYS umożliwia dowolnym procesom użytkownika współużytkowania portów TCP przeznaczonych dla ruchu HTTP. Ta funkcja umożliwia wielu aplikacjom HTTP współistnienie na tej samej maszynie fizycznej w osobnych, izolowanych procesach przy jednoczesnym udostępnianiu infrastruktury sieciowej wymaganej do wysyłania i odbierania ruchu przez port TCP 80. Usługa udostępniania portów Net.TCP umożliwia udostępnianie portów tego samego typu dla aplikacji net.tcp.

Architektura udostępniania portów

Architektura udostępniania portów w programie WCF ma trzy główne składniki:

  • Proces roboczy: dowolny proces komunikujący się za pośrednictwem protokołu net.tcp:// przy użyciu portów udostępnionych.

  • Transport TCP programu WCF: implementuje protokół net.tcp://.

  • Usługa udostępniania portów Net.TCP: umożliwia wielu procesom roboczym współużytkowanie tego samego portu TCP.

Usługa udostępniania portów Net.TCP to usługa systemu Windows w trybie użytkownika, która akceptuje połączenia net.tcp:// w imieniu procesów roboczych łączących się za jego pośrednictwem. Po nadejściu połączenia gniazda usługa udostępniania portów sprawdza strumień komunikatów przychodzących w celu uzyskania adresu docelowego. Na podstawie tego adresu usługa udostępniania portów może kierować strumień danych do aplikacji, która ostatecznie go przetwarza.

Po otwarciu usługi WCF korzystającej z udostępniania portów net.tcp:// infrastruktura transportowa protokołu WCF nie otwiera bezpośrednio gniazda TCP w procesie aplikacji. Zamiast tego infrastruktura transportowa rejestruje podstawowy adres usługi Uniform Resource Identifier (URI) za pomocą usługi udostępniania portów Net.TCP i czeka na usługę udostępniania portów w celu nasłuchiwania komunikatów w jego imieniu. Usługa udostępniania portów wysyła komunikaty adresowane do usługi aplikacji w miarę ich nadejścia.

Instalowanie udostępniania portów

Usługa udostępniania portów Net.TCP jest dostępna we wszystkich systemach operacyjnych obsługujących system WinFX, ale usługa nie jest domyślnie włączona. W ramach środków ostrożności administrator musi ręcznie włączyć usługę udostępniania portów Net.TCP przed pierwszym użyciem. Usługa udostępniania portów Net.TCP udostępnia opcje konfiguracji, które umożliwiają manipulowanie kilkoma cechami gniazd sieciowych należących do usługi udostępniania portów. Aby uzyskać więcej informacji, zobacz Instrukcje: włączanie usługi udostępniania portów Net.TCP.

Korzystanie z udostępniania portów Net.tcp w aplikacji

Najprostszym sposobem korzystania z udostępniania portów net.tcp:// w aplikacji WCF jest uwidocznienie usługi przy użyciu NetTcpBinding elementu , a następnie włączenie usługi udostępniania portów Net.TCP przy użyciu PortSharingEnabled właściwości .

Aby uzyskać więcej informacji o tym, jak to zrobić, zobacz How to: Configure a WCF Service to Use Port Sharing (Jak skonfigurować usługę WCF do korzystania z udostępniania portów).

Implikacje dotyczące zabezpieczeń udostępniania portów

Mimo że usługa udostępniania portów Net.TCP zapewnia warstwę przetwarzania między aplikacjami i siecią, aplikacje korzystające z udostępniania portów powinny być nadal zabezpieczone tak, jakby bezpośrednio nasłuchiwały w sieci. W szczególności aplikacje korzystające z udostępniania portów powinny oceniać uprawnienia procesu, w ramach których są uruchamiane. Rozważ uruchomienie aplikacji przy użyciu wbudowanego konta usługi sieciowej, które działa z minimalnym zestawem uprawnień procesu wymaganych do komunikacji sieciowej.

Zobacz też