Широко известные порты - это стандартизированные номера, дающие возможность удаленным системам обращаться к сетевым службам через заранее известные порты. Такая возможность упрощает процесс подключения, поскольку и адресат и отправитель заранее знают, что данные, адресованные конкретному процессу, пройдут через определенный порт. Так, все системы, предоставляющие доступ по протоколу Telnet, используют для этой цели порт 23.
Не менее важен и второй тип номера порта, известный в качестве динамически выделяемого порта. Как следует из названия, динамически выделяемые порты не назначаются заранее: они назначаются процессам по мере необходимости. Механизм гарантирует, что двум различным процессам не будут назначены одинаковые номера портов и что выделяемые порты лежат вне диапазона широко известных номеров, то есть имеют номера, большие 1024.
Динамически выделяемые порты обеспечивают гибкость, необходимую для реализации многопользовательских систем. Если пользователю telnet назначается порт с номером 23 как для источника, так и для получателя, какие номера портов следует назначить второму пользователю, работающему с telnet в то же время? В целях однозначного определения каждого соединения в качестве номера исходного порта используется динамически выделенный номер, а в качестве номера целевого порта - широко известный номер службы.
В примере с программой telnet первому пользователю назначается случайный номер исходного порта и номер целевого порта 23 (telnet). Второму пользователю назначается другой случайный номер исходного порта и тот же номер для целевого порта. Именно пара номеров портов, исходного и целевого, однозначно определяет каждое сетевое соединение. Узлу-получателю известен номер исходного порта, поскольку информация о нем включается как в заголовки сегментов TCP, так и в заголовки пакетов UDP. Оба узла знают номер целевого порта, поскольку он является широко известным.
Обмен номерами портов при установлении связи TCP показан на рис. 2.6. Узел-источник случайным образом выбирает исходный порт, в данном примере - 3044, и посылает сегмент с указанием исходного порта 3044 и целевого порта 23. Узел-получатель принимает сегмент и отвечает номером исходного порта 23 и номером целевого порта 3044.
Сочетание IP-адреса и номера порта называется сокетом (socket). Сокет однозначно определяет любой сетевой процесс сети Интернет. Иногда термины «сокет» и «номер порта» используются в качестве взаимозаменяемых. Более того, широко известные службы часто называют «широко известными сокетами». В контексте нашего разговора «сокет» - это сочетание адреса IP и номера порта. Пара сокетов - сокет узла-получателя и сокет узла-источника - определяет соединение для протоколов, ориентированных на работу с соединениями, таких как TCP.
111
Разовьем пример динамически назначаемых портов и широко известных портов. Предположим, что пользователь узла 172.16.12.2 использует Telnet для подключения к узлу 192.168.16.2. Узел 172.16.12.2 является источником. Пользователю динамически назначается уникальный номер порта 3382. Выполняется подключение к службе telnet удаленного узла, которому, в соответствии со стандартом, назначен широко известный порт 23. Сокетом источника соединения будет 172.16.12.2.3382 (IP-адрес 172.16.12.2 плюс номер порта 3382). Сокетом другого конца соединения - 192.168.16.2.23 (адрес 192.168.16.2, порт 23). Порт целевого сокета известен обеим системам, поскольку является широко известным. Порт исходного сокета известен обеим системам, поскольку узелисточник сообщил второй стороне сокет источника, запрашивая соединение. Таким образом, пара сокетов известна и той, и другой машине. Сочетание двух сокетов однозначным образом определяет установленное соединение; никакое другое соединение в сети Интернет не будет иметь совпадающей пары сокетов.