Home

Page 9
Page 9
background image

зарезервированных портов должно, по крайне мере, превысить сотню, хотя и более ста браузеров 
тоже можно запустить одновременно. Самое печальное состоит в том, что не только для браузеров 
необходимо  отвести  большое  количество  портов – для  множества  клиентских  приложений 
возможна  ситуация,  когда  запускается  одновременно  множество  клиентов,  а  в  свете  этого 
возможное количество портов (65536) уже не кажется большим. Однако данная проблема решается 
очень просто, теперь, когда нам ясно, что для распределения клиентских портов не годится такой 
же  метод,  который  применяется  для  распределения  серверных  портов,  рассмотрим  концепцию 
динамических портов.  

А  необходимо  ли  клиентской  программе  пользоваться  некоторыми  хорошо  известными 

номерами  портов?  Зачем  серверным  приложениям  хорошо  известные  порты?  Для  того  чтобы 
клиентское приложение могло обратиться к приложению на сервере – ведь именно клиент начинает 
взаимодействие и поэтому клиент должен знать номер серверного порта ДО начала взаимодействия 
и ДЛЯ начала взаимодействия. А так как взаимодействие начинает клиент, серверу НЕ нужно знать 
номер порта клиента ДО начала взаимодействия – он может узнать номер этого порта, получив от 
клиента  первый  пакет,  в  котором  есть  поле Source Port, иными  словами  клиент  может  начинать 
взаимодействие с сервером используя в качестве порта отправителя ЛЮБОЙ порт – сервер узнает 
номер  этого  порта,  получив  от  клиента  первый  пакет.  Итак,  клиент  может  использовать  любой 
номер порта, свободный в его системе и больший 1023 для обращения к хорошо известному порту 
сервера,  такой  порт  клиента  и  называется  динамическим.  Сервер,  получая  на  хорошо  известный 
порт  первый  пакет  данных,  анализирует IP адрес  отправителя  для  выяснения  того,  какому  узлу 
послать пакет с ответом, и порт отправителя, для выяснения того, какому приложению на этом узле 
послать  пакет.  Можно  провести  некоторую  аналогию  между  портами  и IP адресами:  адрес  того 
узла, которому нужно послать пакет вводит пользователь (только он знает, с каким узлом он хочет 
осуществить взаимодействие), порт получателя используется «хорошо известный», когда же сервер 
генерирует  ответ,  то  и IP адрес  и  порт,  которым  отправляется  ответ,  выясняются  сервером  из 
пакета-запроса.  

Проанализируем преимущества техники динамических портов:  

•  Отсутствие необходимости назначения портов клиентским приложениям 

•  Гибкость,  связанная  с  количеством  одновременно  запущенных  приложений  определенного 

типа:  фактически  можно  запустить  около 64 тысяч  одинаковых  клиентов,  по  сути 
ограничение  на  количество  одновременно  запущенных  клиентов  определенного  типа  или 
разных типов ограничено только общим количеством возможных портов (около 64 тысяч). 
Заметим,  что  клиентские  приложения,  запускаемые  на  узле  обычно  получают  номера 

динамических  портов  начиная  с 1024, при  этом  каждое  новое  взаимодействие  обычно 
сопровождается  присвоением  клиентской  программе  увеличенного  на  единицу  номера  порта. 
Поясним, для чего это делается: положим, приложение клиент послало серверу некоторый запрос 
или данные, на которые должен прийти ответ. Положим такой пакет потерялся, во всяком случае 
клиент  не  получил  на  него  ожидаемого  ответа.  В  таком  случае  клиент  может  принять  решение  о 
повторной передаче ТОГО ЖЕ САМОГО запроса. Можно ли отправить повторный пакет (по сути, 
копию предыдущего) с того же самого динамического порта? Да, так как независимо от того, какой 
из  двух  (или  большего  числа)  запросов  все  же  дойдет  до  сервера,  его  ответ  будет  идентичным, 
следовательно, для клиента абсолютно приемлемо получить ответ на любой из своих запросов на 
один  порт.  Предположим  другую  ситуацию – клиент  послал  некоторый  запрос,  ожидает  ответа  и 
должен послать ДРУГОЙ запрос. Очевидно, в общем случае имеет смысл использовать  для этого 
ДРУГОЙ  порт,  для  того,  чтобы  клиент  не  перепутал  ответы  на  первый  и  второй  запросы, 
поступающие на один и тот же порт. Возможны такие прикладные протоколы, специфика которых 
не позволит клиенту перепутать ответы на различные запросы, однако в общем случае, если клиент 
не станет посылать новые запросы с нового динамического порта, возможна ситуация, когда клиент 
окажется в тупике, пытаясь понять, НА КАКОЙ именно запрос поступил ответ в том случае, если 
несколько  различных  запросов  посылать  с  одного  динамического  порта.  Фактически 
необходимость  изменения  номера  порта  для  каждого  нового  запроса,  выполняемого  в  рамках 
прикладного  протокола,  использующего UDP обусловлена  необходимостью  отделить  данное 
взаимодействие  от  возможно  еще  не  завершившихся  предыдущих  взаимодействий.  Такая  же 
стратегия изменения номеров клиентских портов используется и протоколом TCP. 

Отметим,  что  возможны  исключения:  мы  встретимся  с  некоторыми  прикладными 

протоколами,  в  которых  предполагается  использование  клиентами  хорошо  известных  портов,  в 


Copyright © 2021 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.