Итак, протокол IP передал поступившие данные транспортному протоколу. Транспортный протокол, в свою очередь, передает данные соответствующему прикладному процессу. Прикладные процессы (известные также в качестве сетевых служб) определяются 16-битными номерами портов. Номер порта источника (определяет процесс, отправивший данные) и номер порта получателя (определяет процесс, которому данные предназначены) содержатся в первом слове заголовка каждого сегмента TCP и пакета UDP.
Номера портов до 1024 зарезервированы под широко известные службы (такие как FTP и Telnet) и назначаются организацией IANA. Широко известные номера портов считаются «привилегированными» и не должны ассоциироваться с пользовательскими процессами. Порты с номерами с 1024 по 49151 - «зарегистрированные». IANA по мере возможности ведет реестр служб, использующих порты указанного интервала, но данный список не имеет руководящей силы. Номера портов с 49152 по 65 535 считаются «частными». Частные номера портов могут использоваться в любых целях.
Номера портов не уникальны для всего диапазона протоколов транспортного уровня, хотя уникальны для каждого протокола в отдельности. Иными словами, протоколы TCP и UDP могут использовать - и используют - одинаковые номера портов. Именно сочетание номеров порта и протокола точно определяет конкретный процесс, которому предназначены данные. Номера портов для Unix-систем определяются в файле /etc/services. Сетевых приложений существует гораздо больше, чем протоколов транспортного уровня, как можно видеть из размеров таблицы /etc/services. Ниже приводится фрагмент файла /etc/services рабочей станции под управлением Solaris 8:
111
Формат данного файла схож с форматом файла /etc/protocols. Каждая однострочная запись начинается с формального имени службы, отделяемого пробельными символами от пары номер порта/протокол. Номера портов дополняются именами транспортных протоколов потому, что с одинаковыми номерами портов могут работать различные транспортные протоколы. Необязательный список псевдонимов формального имени службы может присутствовать после пары номер/протокол.
Пара файлов /etc/protocols и /etc/services предоставляет всю информацию, необходимую для доставки данных соответствующему приложению. Дейтаграмма передается получателю на основе адреса, указанного в пятом слове заголовка дейтаграммы. Используя номер протокола из третьего слова заголовка дейтаграммы, протокол IP выполняет доставку данных надлежащему протоколу транспортного уровня. Первое слово данных, полученных транспортным протоколом, содержит номер порта получателя, который позволяет передать данные уровнем выше, конкретному приложению. Процесс доставки отражен на рисисуеке.
111
Несмотря на внушительные размеры, файл /etc/services содержит номера портов далеко не всех важных сетевых служб. Так, в нем отсутствуют номера порто в дл я служб RP C (Remot e Procedur e Call , удаленный вызов процедур), перечисленных в файле services. Компания Sun разработала свой метод резервирования портов для служб RPC, не связанный с получением широко известного номера от IANA. Службы RPC обычно используют зарегистрированные номера портов, не требующие официальных процедур для присвоения. Когда запускается служба RPC, она регистрирует свой номер порта при помощи программы portmapper. portmapper отслеживает номера портов, занятых службами RPC. Когда клиент обращается к службе RPC, он посылает запрос демону portmapper, работающему на сервере, с целью получения номера порта, назначенного службе. Клиент может легко обнаружить службу portmapper, поскольку ей назначен широко известный порт с номером 111. portmapper делает возможной установку широко применяемых служб без необходимости получать широко известный номер официальным путем.