В чем разница и взаимосвязь между идентификатором процесса и номером порта?

4587
user570593

Процесс - это программа в исполнении. Например, Firefox. Я не понимаю взаимосвязи и различий между терминами «процесс» и «порты».

Когда я запускаю netstat -no -p -TCPcmd, я вижу несколько номеров портов, связанных с каждым процессом, как показано ниже. Однако связь между портами и процессами мне неясна.

screenshot: cmd output of "netstat -no -p -TCP"

4
Так же, как разница между идентификационным номером сотрудника и номером офиса. chrylis 6 лет назад 8
в ответ MaQleod в соответствии с https://en.wikipedia.org/wiki/Network_socket сокет характеризуется как минимум локальным сокетом и портом. barlop 6 лет назад 0
Кстати, текст в вашем окне CMD выглядит сжатым. Я вижу это на многих компьютерах, которые обновились до Windows 10 с 7 или 8. Вы можете исправить это, изменив размер шрифта, сохранив, а затем вернув его обратно. wjandrea 6 лет назад 0
@wjandrea Я замечаю, что при выборе растра он становится раздавленным, а с помощью растра вы получаете несколько забавных параметров размеров, которые можно даже предварительно просмотреть и выглядеть забавно. Но если вы выберете новый курьер, то у вас не будет смешных вариантов размеров, и, возможно, с небольшим переворотом вы сможете убедиться, что настройка верна. barlop 6 лет назад 0

5 ответов на вопрос

32
Andrew Leach

Чтобы ответить прямо на вопрос: нет никакой связи между идентификатором процесса и номером порта. Они перечисляют совершенно разные вещи.

PID идентифицирует процесс (например, сеанс Firefox: каждая вкладка может выполняться как отдельный процесс), а номер порта определяет, какой порт используется этим процессом для связи. Определенные номера портов действительно используются: 80 обычно используется для HTTP и 443 для HTTPS. Но процесс может получить любой номер PID, в зависимости от того, когда он запущен.

Как видите, номера локальных портов используются последовательно и не связаны ни с номером порта назначения, ни с PID процесса, использующего их.

Метафорически, если не буквально, они являются * индексами * в разных массивах. Pieter Geerkens 6 лет назад 8
Технически говоря, init теперь зарезервирован PID 1 в эти дни. Но помимо этого не должно быть способа узнать, какой PID получит процесс. Kat 6 лет назад 0
Я бы сказал, что последнее предложение таково: «Ваши номера портов _source_ используются последовательно». Похоже, что это рабочая станция, которая не прослушивает какие-либо порты, но для тех, кто ищет ответ, кто может говорить о серверах, это важное различие. Monty Harder 6 лет назад 0
«* номера вашего локального порта используются последовательно *» - для меня это не выглядит особенно последовательным, есть несколько пробелов, и мы также не знаем, когда были открыты соединения. Они просто перечислены в порядке возрастания на этом конкретном скриншоте. Bergi 6 лет назад 0
И для полноты следует отметить, что многие процессы вообще не будут использовать ** любые ** порты (хотя по определению они не будут перечислены командой `netstat`). TripeHound 6 лет назад 0
@ Берги Я думаю, пробелы указывают на соединения, которые * были * активны в какой-то момент, но больше не были. Andrew Leach 6 лет назад 0
Там нет ничего последовательного о номерах портов. Процесс может открыть любой порт, который он хочет. Например, у меня есть программа, которая открывает порт 11000. Ему все равно, доступны ли порты с меньшим номером, и я даже не буду пытаться открыть их. Carey Gregory 6 лет назад 0
12
Mokubai

PID отображается только для того, чтобы вы могли идентифицировать конкретный процесс, выполняющий связь, и не связан с номером порта.

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

Если вы хотите уничтожить определенное соединение, но не все копии программы, вам нужно знать PID, а не имя программы.

если вы определяете процесс просто как «копию программы», это не является четким определением. Существует большая разница между программой, скопированной в две разные директории, или программным файлом, скопированным в другое место или под другим именем. Или экземпляром программы в ОЗУ. barlop 6 лет назад 0
9
TOOGAM

Процесс

Что такое процесс?

Процесс - это, в основном, копия программы. Таким образом, если вы запускаете такую ​​программу, как «Блокнот», несколько раз, каждое конкретное время будет иметь свой собственный процесс. Процесс использует ресурсы, такие как доступная оперативная память на вашем компьютере. Если вы посмотрите на диспетчер задач и увидите, что программа запускается несколько раз, то каждое ее появление может быть различным процессом.

Как распределяются процессы?

Номера PID («ID процесса») присваиваются операционной системой каждый раз, когда выполняется новый процесс.

Для чего нужны процессы?

Используя идентификатор процесса (который идентифицирует точную, конкретную копию работающей программы), вы можете определить, к какому программному обеспечению относится данный процесс. Это можно сделать с помощью TaskList (из командной строки), WMIC PROCESS GET / FORMAT: LIST (из командной строки) или диспетчера задач. В диспетчере задач в некоторых новых версиях Microsoft Windows может потребоваться перейти на вкладку «Сведения». Если столбец для отображения PID отсутствует, вы можете добавить его. (В Windows 10, по крайней мере, вы щелкаете правой кнопкой мыши по имени столбца, а затем можете выбрать видимые столбцы. Поскольку память мне не подходит, в старых версиях Windows для этого был пункт меню.)

Еще одна полезная команда - netstat. Я вижу, вы используете netstat. Попробуйте добавить параметр "-b". (Этот параметр довольно специфичен для Microsoft Windows, который, как я полагаю, вы используете на основе C: \ Users \ User> в вашем приглашении.) При этом Netstat попытается использовать PID для определения имени исполняемого файла, и напечатайте это на следующей строке.

Все это совершенно не связано с номером порта.

Номера портов

Что такое номер порта

Номер порта используется как часть сетевого подключения. Не все сетевые коммуникации используют номера портов. Например, ICMP, используемый TraceRoute (под названием «TRACERT» в Microsoft Windows) и команда ping в Microsoft Windows, не использует номера портов. Наиболее распространенными протоколами являются UDP и TCP. (Может быть, SCTP - следующий по распространенности?) Многие протоколы, включая HTTP (S) и SMTP (для электронной почты), используют TCP, поэтому используются номера портов.

Для чего нужны номера портов?

Можно иметь несколько соединений TCP между одними и теми же компьютерами, и номера портов используются для идентификации этих соединений. Например, если ваша программа электронной почты получает электронную почту, сетевое соединение может быть между [LOCAL PORT 52534, REMOTE / FOREIGN PORT 25], в то время как ваш веб-браузер может создать соединение, используя [LOCAL PORT 54499, REMOTE / FOREIGN. ПОРТ 443]. Таким образом, когда удаленный компьютер отвечает, и входящий трафик определяется как [ЛОКАЛЬНЫЙ ПОРТ 54499, УДАЛЕННЫЙ / ИНОСТРАННЫЙ ПОРТ 443], ваш компьютер знает, что трафик не предназначен для вашей локальной программы электронной почты. На самом деле, ваш веб-браузер может создавать несколько соединений TCP для одновременной загрузки нескольких изображений. Когда ваш компьютер получает графические данные, номера портов могут помочь вашему веб-браузеру узнать, для какого соединения предназначены данные,

(Примечание. Квадратные скобки - это просто обозначение, которое я составил для облегчения чтения этого абзаца. В выводе Netstat номера портов отображаются после двоеточия. Обычно я не предпочитаю использовать термин «чужой» для опишите номера портов, но я сделал это в этом случае, потому что это был термин, используемый netstat.)

Как назначаются номера портов?

В целом, большинство программного обеспечения просто сообщает «сетевому стеку», что оно хочет установить сетевое соединение. В современных операционных системах «сетевой стек» встроен как часть операционной системы (хотя еще во времена Windows 3.1 сетевой стек обычно добавлялся при установке такой программы, как Microsoft Internet Explorer или Trumpet Winsock), Программа обычно сообщает сетевому стеку что-то вроде: «Создайте новое TCP-соединение с удаленным портом 443.» Сетевой стек будет определять, какой номер порта источника он хочет использовать.

Резюме

Процессы и номера портов очень разные вещи. Я согласен с большей частью или всей информацией в других ответах здесь. (Тем не менее, я добавил свой собственный ответ здесь, потому что я думал, что немного больше деталей, например, откуда присваиваются номера, может помочь сделать различие более ясным.)

этот ответ довольно приятный, но я думаю, что было бы лучше рассказать, как программное обеспечение получает определенный номер, даже если они используют протокол с назначенным номером порта, но, тем не менее, +1 DreadfulWeather 6 лет назад 0
@DreadfulWeather: Во-первых, что означает слово «они»? И во-вторых, разве мой ответ не делает именно этого, например, «Как назначаются номера портов?» раздел. Я прочитал ваш комментарий четыре раза, чтобы понять, смогу ли я понять, что вы пытаетесь сообщить, но мне жаль говорить, что я просто не смог понять ваш комментарий. TOOGAM 6 лет назад 0
2
Arthur

Несколько упрощенно:

PID - это номер, используемый внутри вашего компьютера для обозначения какого-либо конкретного процесса. Процессор может выполнять только одну операцию за раз, но он выполняет несколько задач, поэтому он чередуется между различными процессами, а PID - это тег, который процессор использует для идентификации каждого процесса.

Номер порта является тегом, присваиваемым всем сетевым коммуникациям, поэтому, когда ответ возвращается из сети, маршрутизатор в вашей домашней сети знает, какой компьютер ожидает этот ответ, и когда ответ поступает на компьютер, компьютер знает, какой процесс ожидает сообщение.

Например, тег порта гарантирует, что когда вы запрашиваете эту страницу с серверов Stackexchange и данные сайта поступают на ваш маршрутизатор, тогда ваш маршрутизатор знает, что это ваш компьютер, а не смартфон вашего брата или любое другое устройство, которое хочет их. И когда они приходят на ваш компьютер, ваш компьютер может сказать, что их хочет Firefox, а не Word.

2
Corrodias

Процесс - это работающая программа, в большинстве случаев. Такая программа, как Firefox, может фактически состоять из нескольких процессов, работающих вместе, но для операционной системы они являются основной единицей работы: у каждого процесса есть изображение (исполняемый исполняемый файл), рабочий каталог, дескрипторы (назначение ресурсов), адресное пространство памяти, приоритет процессора и ввода-вывода и т. д. Если вы запускаете блокнот, процесс запускается с помощью notepad.exe, и он открывает окно для взаимодействия с вами.

Порт - это ресурс. Операционная система имеет определенное количество доступных портов (65535), и процесс может запросить дескриптор, чтобы получить исключительное использование порта. Процесс может получить дескрипторы для любого количества неиспользуемых портов. Порт необходим для связи по сети. Номера портов, выбранные для исходящих соединений (например, браузер, подключающийся к веб-серверу), по сути, произвольны; они не имеют значения, о котором вам нужно заботиться.

Это упрощенный обзор, так что не воспринимайте его как очень точный.