почему мы не можем использовать идентификатор процесса, взятый из порта, который мы связываем - PullRequest
4 голосов
/ 23 ноября 2010

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

Ответы [ 3 ]

8 голосов
/ 23 ноября 2010

Это интересная идея, но я думаю, что это вызовет несколько проблем:

  • Как вы узнаете, к какому идентификатору процесса вы хотите подключиться?
  • Что если вы хотитепрослушивать более одного «порта» внутри одного и того же процесса?У вас есть только один идентификатор процесса.
  • IPv4 и IPV6 выделяют 16 битов для идентификаторов портов, но идентификаторы процессов обычно имеют 32-битные (или более) значения, поэтому они не подходят
  • ТамЕсть много программ, которые не имеют сетевой аспект и не хотят.Может ли автоматическое создание пути сетевого взаимодействия с ними стать потенциальной проблемой безопасности?
  • Один прием, который вы можете сделать (особенно с многоадресной или широковещательной передачей UDP), состоит в том, чтобы несколько программ прослушивали один и тот же порт (через SO_REUSEPORT), чтобыкогда кто-то отправляет пакет UDP на этот порт, все программы получают его.Этот трюк был бы трудным или невозможным, если бы программы использовали свои (уникальные) идентификаторы процессов в качестве номеров портов.
5 голосов
/ 23 ноября 2010

Во-первых, для одного процесса может существовать несколько соединений.Во-вторых, API сокетов не зависит ни от какого API процесса ОС.

1 голос
/ 26 ноября 2010

Поскольку в спецификации TCP указаны номера портов, но нет идентификаторов процессов.

Почему вы хотите использовать идентификатор процесса, который вы не можете контролировать, когда можете контролировать номер порта?Как процесс будет прослушивать несколько портов?

...