Специальная публикация NIST 800-10

       

Структура портов TCP и UDP


Сервисы TCP и UDP используются с помощью схемы клиент-сервер. Например, процесс сервера TELNET вначале находится в состоянии ожидания запроса установления соединения. В какой-нибудь момент времени пользователь запускает процесс клиента TELNET, который инициирует соединение с сервером TELNET. Клиент посылает данные серверу, тот читает их, и посылает обратно клиенту ответ. Клиент читает ответ и сообщает о нем пользователю. Поэтому, соединение является двунаправленным и может быть использовано как для чтения, так и для записи.

Как много одновременных соединений TELNET может быть установлено между системами? Соединение TCP или UDP уникальным образом идентифицируется с помощью четырех полей, присутствующих в каждом соединении:

  • IP-адрес источника -
  • адрес системы, которая послала пакет
  • IP-адрес получателя
  • - адрес системы, которая принимает пакет
  • порт отправителя -
  • порт соединения в системе-отправителе
  • порт получателя
  • - порт соединения в системе-получателе

Порт - это программное понятие, которое используется клиентом или сервером для посылки или приема сообщений; порт идентифицируется 16-битвым числом. Серверные процессы обычно ассоциируются с фиксированным числом, например числом 25 для SMTP или 6000 для X Windows; номер порта является известным, так как он требуется, помимо IP-адреса получателя, при установлении соединения с конкретным хостом и сервисом. Клиентские процессы, с другой стороны, запрашивают номер порта у операционной системы в начале работы; и номер порта является случайным, хотя в некоторых случаях он является следующим в списке свободных номеров портов.

Для иллюстрации того, как используются порты для посылки и приема сообщений, рассмотрим протокол TELNET. Сервер TELNET слушает приходящие сообщения на порту 23, и сам посылает сообщения на порт 23. Клиент TELNET, на той же или другой системе, сначала запрашивает неиспользуемый номер порта у ОС, а затем использует его при посылке и приеме сообщений. Он должен указывать это номер порта, например 3097, в пакетах, предназначенных для сервера TELNET, чтобы этот сервер при ответе на сообщение клиента мог поместить это номер в посылаемые им TCP-пакеты. Хост клиента по приему сообщения должен посмотреть номер порта в сообщении и решить, какой из клиентов TELNET должен принять это сообщение. Этот процесс показан на рисунке 1.2


Рисунок 1.2 Взаимодействие при TELNET

Существует достаточно распространенное правило, согласно которому тольуо привилегированные процессы сервера, то есть те процессы, которые работают с привилегиями суперпользователя UNIX, могут использовать порты с номерами меньше, чем 1024( так называемые привилегированные порты). Сервера в-основном используют порты с номерами меньше, чем 1024, а клиенты как правило должны запрашивать непривилегированные порты у ОС. Хотя это правило и не является обязательным для исполнения и не требуется спецификацией протоколов TCP/IP, системы на основе BSD соблюдают его.

В результате всего этого брандмауэры могут блокировать или фильтровать доступ к службам на основе проверки номеров портов в TCP- и UDP-пакетах и последующего пропускания через себя или удаления пакета на основе политики, указывающей доступ к каким службам разрешен или запрещен. (более детально это описано в главе 2).

Не все серверы и клиенты TCP и UDP используют порты таким простым способом, как TELNET, но в целом, процедура, описанная здесь, полезна в контексте брандмауэра. Например, многие ОС персональных компьютеров не используют понятия суперпользователя UNIX, но все-таки используют порты описанным выше способом( хотя нет стандарта, требующего это).

| |


Содержание раздела