Порты TCP

Объяснение по материалам сайта CITForum

Порт – Часть сокета, указывающая логический канал ввода или вывода для процесса, имеющего дело с данными.
Сокет – Адрес, который особым образом включает в себя идентификатор порта. А именно, он включает связь Internet адреса с TCP портом.


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


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


Для организации надежной передачи данных предусматривается установление логического соединения между двумя прикладными процессами. В рамках соединения осуществляется обязательное подтверждение правильности приема для всех переданных сообщений, и при необходимости выполняется повторная передача. Соединение в TCP позволяет вести передачу данных одновременно в обе стороны, то есть полнодуплексную передачу.


Соединение в протоколе TCP идентифицируется парой полных адресов обоих взаимодействующих процессов (оконечных точек). Адрес каждой из оконечных точек включает IP-адрес (номер сети и номер компьютера) и номер порта. Одна оконечная точка может участвовать в нескольких соединениях.


Установление соединения выполняется в следующей последовательности:

  • При установлении соединения одна из сторон является инициатором. Она посылает запрос к протоколу TCP на открытие порта для передачи (active open).
  • После открытия порта протокол TCP на стороне процесса-инициатора посылает запрос процессу, с которым требуется установить соединение.
  • Протокол TCP на приемной стороне открывает порт для приема данных (passive open) и возвращает квитанцию, подтверждающую прием запроса.
  • Для того чтобы передача могла вестись в обе стороны, протокол на приемной стороне также открывает порт для передачи (active port) и также передает запрос к противоположной стороне.
  • Сторона-инициатор открывает порт для приема и возвращает квитанцию. Соединение считается установленным. Далее происходит обмен данными в рамках данного соединения.

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


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

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

Краткое пояснение

Когда пара компьютеров устанавливает связь друг с другом по протоколу TCP/IP они должны знать по какому каналу связи они будут передавать информацию. Как узнает компьютер, посылающий данные что они поступают к соответствующей программе на нужном компьютере? И как узнает второй компьютер, что данные которые он получил, пришли именно с первого компьютера и какой программе их передать для дальнейшей обработки?


Между двумя компьютерами, связывающимися по протоколу TCP, устанавливается Сессия Session связи. Обычно программы, использующие связь строятся по схеме сервер-клиент. Программа, обслуживающая другие компьютеры, называется серверной и настроена так, что ожидает запроса от клиентской программы ("слушает") на заранее оговоренном канале связи. Программа, получающая обслуживание от сервера, называется клиентом и настроена на отправку запросов к серверу по тому самому заранее оговоренному каналу. Этот канал связи называется Порт и для отличия одного от другого они нумеруются от 0 до 65535. Для системных и некоторых популярных программ выделены общепринятые порты с номерами от 0 до 1023, называемые привилегированными или зарезервированными The Well Known Ports. Например, почтовая программа Outlook Express, The Bat или другая программа для получения почты заранее настроена для обращения к серверу по порту номер 110, а порт 110 в свою очередь считается зарезервированным для всех программ, обращающихся к серверам за почтой. В случае если такая программа обратится за почтой не по зарезервированному для этого порту, а по какому-то другому, то ей просто никто не ответит. Таким же образом для просмотра простых интернет-страниц браузеры обучены связываться по порту 80, а FTP-клиенты для передачи файлов связываются через порты 20 и 21.
Порты с номерами 1024 – 49151 называются зарегистрированные порты.
Порты с номерами 49152 – 65535 называются динамические порты.
Список портов и работающих через них программ можно посмотреть


Далее рассмотрим как взаимодействуют клиент и сервер на примере браузера в простейшем случае. При просмотре страницы ваш браузер обращается на какую-либо страницу по адресу www.gde-to.com и этот запрос доходит до сервера. Теперь сервер должен вернуть браузеру ответ, но он должен точно знать кому и куда его вернуть. Ведь вполне возможно, что вы запустили сразу пару браузеров, или еще с десяток программ, которые тоже с кем-то связаны и куда-то отправляют и получают данные. Поэтому происходит незаметный нам процесс формирования и обработки отправляемых и получаемых данных. Прежде всего, данные делятся на пакеты и каждый пакет отправляется серверу или получается клиентом со строго заданными параметрами, которые указаны в служебной части пакета, называемой заголовком. В заголовке отправляемого пакета с запросом вместе с другими данными присутствуют точный обратный адрес отправителя и его порт. Ваш браузер – клиентская программа – может запросить сервер по любому свободному порту, который выделит ему ваша операционная система. Это может быть, например, порт 1080 и он считается локальным портом до того как будет отправлен по вашему каналу связи ( модему или сетевой карточке ), т.е. открыт только на вашем компьютере. При этом операционная система обработает запрос о странице к серверу таким образом, что к серверу этот запрос уйдет по порту 80, потому что именно этот порт прослушивается HTTP-сервером. А для того, чтобы получить ответ, в заголовок пакета будет вставлена информация о том, что вернуть ответ надо не только на указанный адрес, но и на порт, по которому вышел запрос, в данном случае 1080. Получив такой запрос сервер обработает и отправит ответ в соответствии с запросом, т.е. на указанный адрес и на указанный порт, который в свою очередь, прослушивается вашим браузером-клиентом.


Обычно серверы настроены так, что они прослушивают в основном зарезервированные порты. Со стороны же клиента ( вашего компьютера ) это могут быть различные незарезервированные локальные порты с номерами выше 1024. Несмотря на то, что количество портов исчисляется десятками тысяч, большинство их тоже уже неофициально заняты какими-либо программами. Например, очень популярная программа eMule по умолчанию настроена на порты 4661 и 4662, которые можно поменять в настройках. А другая известная программа Pc Anywhere настроена на порты 5631 и 5632 и поменять их весьма непросто. На некоторых серверных программах тоже иногда меняют порт, который они прослушивают, например, можно указать серверу прослушивать порт 8800 вместо 80, но тогда вы должны и браузеру указать, чтобы он связывался именно по этому порту, т.е. в адресную строку браузера внести дополнительно данные о порте и тогда она будет выглядеть примерно так : http://www.gde-to.com:8800. После того, как компьютеры связались, между ними устанавливается сессия и компьютеры создают между ними сокет socket. Это связь между двумя компьютерами, первый с IP-адресом и портом источника и второй с IP-адресом и портом получателя.


Существуют программы, которые запускаются на компьютере или нескольких компьютерах и предназначены для сканирования открытых портов. Что такое "открытый порт" ? Это порт, который "прослушивается" какой-либо программой, готовой к установлению сессии и ответу на запрос. Для чего надо знать есть ли и какие именно порты открыты на компьютере? Для того чтобы с большой степенью точности сказать какие программы установлены на компьютере и возможно, использовать дыры в безопасности, чтобы проникнуть на компьютер-жертву. А проникнув, можно похитить данные или вообще сильно повредить компьютеру.


Однако, мы не собираемся проделывать такие трюки и причинять кому-либо вред, но с помощью этих знаний мы сможем защитить свой компьютер от вредительских атак. Например, мы просканировали свой компьютер и неожиданно обнаружили, что на нем есть открытый порт номер 54320. Заглянув в вышеуказанный список портов, видим, что этот порт используется зловредной программой типа троянский конь по имени Back Orifice 2000. Иными словами, когда кто-то попробует связаться с вашим компьютером по порту 54320, ему ответит тот самый троянский конь и кто знает, что с вашим компьютером может случиться после этого. Для сканирования ваших портов не обязательно устанавливать на компьютер программы-сканеры. Можно сделать сканирование в онлайне на сайте www.auditmypc.com.


Для защиты от проникновения в ваш компьютер извне, а также для предотвращения утечки данных из него применяются программы называемые Файрволлами Firewall. Эти программы предназначены для контроля за портами открываемыми различными программами на вашем компьютере. Важность защиты портов компьютера была подчеркнута введением в операционную систему Windows XP встроенного простейшего файрволла и дальнейшим его развитием и улучшением в Service Pack 2. Специалисты по безопасности убедительно рекомендуют всегда использовать какой-либо файрвол при подключении персонального компьютера к Интернету.


Еще одно очень простое объяснение о портах можно прочесть на форуме Netlab

Проверка открытых портов

Проверить открытые порты можно консольной командой netstat. Для получения списка открытых портов (находящихся в режиме прослушивания – listening) надо выполнить в командной строке (Start/Пуск – Run/Выполнить) команду


netstat -an |find /i "listening"


Аналогично, с помощью этой же команды можно просмотреть список портов, по которым установлено соединение в данный момент. Для этого надо выполнить команду


netstat -an |find /i "established"


Дополнительные ключи команды :
netstat -a – выводит полный список открытых, закрытых, соединенных и других используемых портов.
netstat -o – (для систем XP и 2003) выводит список портов с идентификатором использующего порт процесса PID).
netstat -ao – выведет суммарную информацию ключей -a и -o.


Ещё один инструмент позволяющий проверить доступность порта – Microsoft Telnet. Подробнее описано в статье как проверить доступность TCP-порта с помощью Microsoft Telnet?. В Windows старше 7 надо предварительно включить Клиент Microsoft Telnet


Для получения более наглядной и полной информации о портах можно воспользоваться :

  • утилитой Sysinternals TCPView. Программа отобразит полную информацию о портах а также о процессах, их использующих. Кроме того, программа позволяет :
    • Получить дополнительную информацию о процессе, использующем порт;
    • Прервать нежелательный процесс выбором соответствующего пункта в контекстном меню;
    • Разорвать нежелательное соединение.
  • утилитой NirSoft CurrPorts с аналогичными возможностями и позволяющей экспортировать в HTML/XML/Text файлы.
  • утилитой Portcheck обладающей большими возможностями работы с портами TCP. Так выглядит запущенной без параметров.

Нажмите "Пуск" - Выполнить - cmd - OK и введите команду


Проверку открытых портов внешними сканерами можно произвести на сайтах :

Список портов для работы Windows сетей


Цитата из статьи Объединение в сеть домашних компьютеров, работающих под управлением разных версий Windows


Убедитесь, что брандмауэр предоставляет общий доступ к файлам и принтерам
Если используется брандмауэр Windows, этот раздел можно пропустить, поскольку брандмауэр Windows автоматически открывает порты, необходимые для предоставления общего доступа к файлам и принтерам при использовании совместного доступа или после включения обнаружения сети. (Дополнительные сведения об обнаружении сети см. в разделе Что такое обнаружение сети?) При использовании другого брандмауэра эти порты необходимо открыть самостоятельно, чтобы компьютер смог найти другие компьютеры и устройства с файлами и принтерами для общего доступа.

Для обнаружения компьютеров под управлением Windows Vista или Windows 7 откройте следующие порты:

UDP 3702
UDP 5355
TCP 5357
TCP 5358

Для обнаружения компьютеров под управлением более ранних версий Windows и использования общего доступа к файлам и принтерам с любой версией Windows откройте следующие порты:

UDP 137
UDP 138
TCP 139
TCP 445
UDP 5355

Для обнаружения сетевых устройств откройте следующие порты:

UDP 1900
TCP 2869
UDP 3702
UDP 5355
TCP 5357
TCP 5358

Чтобы домашняя группа правильно функционировала между компьютерами под управлением Windows 7, откройте следующие порты:

UDP 137
UDP 138
TCP 139
TCP 445
UDP 1900
TCP 2869
UDP 3540
TCP 3587
UDP 3702
UDP 5355
TCP 5357
TCP 5358


Дополнительные линки по теме :
Что такое компьютерные порты?
11 УТИЛИТ для поиска активных портов
Что означают понятия закрытый порт, невидимый порт?
Windows Worm Doors Cleaner – утилита для закрытия опасных портов.
Службы и сетевые порты в серверных системах Microsoft Windows
Настройка брандмауэра Windows XP SP2
Открытие портов на раутерах англ.


Обсуждение на форуме – в теме Порты TCP
Abram4 /09.12.2004 02:25/

Прочитано 7.977 раз

Общая оценка документа [показать форму]

страница еще не оценена