Совместное использование портов Net.TCP
Windows Communication Foundation (WCF) предоставляет новый сетевой протокол на базе TCP (net.tcp://) для высокопроизводительного обмена данными. Кроме того, в WCF введен новый компонент системы — служба совместного использования портов Net.TCP, которая позволяет нескольким пользовательским процессам совместно использовать порты net.tcp.
История и причины создания
Когда протокол TCP/IP появился впервые, он использовался лишь в небольшим числе протоколов приложений. В TCP/IP для разграничения приложений использовались номера портов: каждому протоколу приложения присваивался уникальный 16-разрядный номер порта. Например, для HTTP-трафика сегодня стандартным считается TCP-порт 80, для SMTP используется TCP-порт 25, а для FTP — TCP-порты 20 и 21. Другие приложения, использующие в качестве транспорта протокол TCP, могут выбирать другие доступные номера портов — по традиции либо в соответствии с формальными стандартами.
Использование для различения приложений номеров портов влекло за собой проблемы с безопасностью. Брандмауэры обычно настраиваются на блокирование TCP-трафика на всех портах, за исключением нескольких широко известных точек входа, поэтому развертывание приложения, использующего нестандартный порт, зачастую сопряжено с трудностями или вообще невозможно в связи с присутствием корпоративных и персональных брандмауэров. Приложения, которые способны обмениваться данными через стандартные, широко известные уже разрешенные порты, уменьшают внешнюю площадь атаки. Многие сетевые приложения используют протокол HTTP, поскольку большинство брандмауэров по умолчанию пропускают трафик на TCP-порту 80.
Модель HTTP.SYS, в которой трафик для множества различных HTTP-приложений мультиплексируется в один TCP-порт, стала стандартной на платформе Windows. Это обеспечивает общую контрольную точку для администраторов брандмауэров и в то же время позволяет разработчикам приложений минимизировать стоимость развертывания при построении новых приложений, работа которых предусматривает использование сети.
Возможность совместного использования портов несколькими HTTP-приложениями в течение долгого времени была характерна для служб Internet Information Services (IIS). Однако полностью эта инфраструктура была введена в употребление только с появлением HTTP.SYS (прослушивателя протокола HTTP режима ядра) в IIS 6,0. По сути HTTP.SYS позволяет произвольным пользовательским процессам совместно использовать TCP-порты, выделенные под HTTP-трафик. Эта возможность позволяет нескольким HTTP-приложениям сосуществовать на одном физическом компьютере в отдельных изолированных процессах и в то же время совместно использовать сетевую инфраструктуру, необходимую для отправки и получения трафика через TCP-порт 80. Служба совместного использования портов Net.TCP делает возможным такое же совместное использование портов для приложений net.tcp.
Архитектура совместного использования портов
Архитектура совместного использования портов в WCF включает три основных компонента.
Рабочий процесс: любой процесс, обменивающийся данными по протоколу net.tcp:// через совместно используемые порты.
Транспорт TCP WCF: реализует протокол net.tcp://.
Служба совместного использования портов Net.TCP: позволяет множеству рабочих процессов использовать один и тот же TCP-порт.
Служба совместного использования портов Net.TCP представляет собой службу Windows пользовательского режима, принимающую подключения по net.tcp:// от имени рабочих процессов, которые соединяются через нее. При поступлении подключения через сокет служба совместного использования портов анализирует входящий поток сообщения, чтобы получить его адрес назначения. Располагая этим адресом, служба совместного использования портов может направить поток данных приложению, которое в конечном итоге его обрабатывает.
При открытии службы WCF, работающей через совместное использование портов net.tcp://, инфраструктура TCP транспорта WCF не открывает непосредственно TCP-сокет в процессе приложения. Вместо этого транспортная инфраструктура регистрирует универсальный код ресурса (URI) базового адреса службы в службе совместного использования портов Net.TCP и ожидает, чтобы служба совместного использования портов прослушивала сообщения от ее имени. Служба совместного использования портов отправляет сообщения, адресованные службе приложения, по мере их поступления.
Установка совместного использования портов
Служба совместного использования портов Net.TCP доступна во всех операционных системах, поддерживающих Платформа .NET Framework 3.0, однако эта служба не включена по умолчанию. Из соображений безопасности администратор должен вручную включить службу совместного использования Net.TCP перед первым использованием. Служба совместного использования портов Net.TCP предоставляет параметры конфигурации, которые позволяют манипулировать некоторыми характеристиками сетевых сокетов, принадлежащих службе совместного использования портов. Дополнительные сведения см. в разделе Как включить службу совместного использования портов Net.TCP.
Включение совместного использования портов Net.TCP в приложении
Самый простой способ совместно использовать порты net.tcp:// в приложении WCF — предоставить службу с помощью привязки NetTcpBinding и затем включить службу совместного использования портов Net.TCP с помощью свойства PortSharingEnabled.
Дополнительные сведения том, как это сделать, см. в разделе Как настраивать службы Windows Communication Foundation на совместное использование портов.
Проблемы безопасности, связанные с совместным использованием портов
Хотя служба совместного использования портов Net.TCP предусматривает уровень обработки между приложениями и сетью, приложения, совместно использующие порты, все равно необходимо защищать так, как если бы они непосредственно прослушивали сеть. В частности, в приложениях, совместно использующих порты, необходимо оценивать привилегии процессов, в которых они выполняются. Имеет смысл рассмотреть возможность выполнения приложения от имени встроенной учетной записи Network Service, которая выполняется с минимально необходимым для обмена данными по сети набором привилегий.
См. также
Задачи
Как настраивать службы Windows Communication Foundation на совместное использование портов
Как включить службу совместного использования портов Net.TCP
Основные понятия
Настройка службы совместного использования портов Net.TCP