Активно ли используется /etc/services, когда приложение привязывается к порту?

У вас нет драйвера для видеокарты Nvidia.

Откройте терминал и напишите эту команду:

sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt update

тогда вы сможете установить драйвер через дополнительные драйверы. Вы также можете установить его напрямую с помощью:

sudo apt-get install nvidia-driver-410

Лучше установить dkmsперед драйвером, потому что при каждом обновлении ядра системы dkmsавтоматически перестраивает модуль драйвера NVIDIA для нового ядра:

sudo apt-get install dkms build-essential

Вы не упомянули модель своей видеокарты Nvidia, но я думаю, что это GeForce MX150, и она есть в списке поддерживаемых видеокарт.

0
18.06.2020, 21:16
4 ответа

Многие приложения имеют что-то известное как общеизвестный номер порта . Обычно они привязываются к нему.

Другие приложения будут привязаны к порту 0, позволяя системе выбрать свободный порт. Затем они сообщают свои номера портов возможным клиентам, используя другие методы (, отличные от общеизвестных номеров портов ). Например, трансляция их доступности в сеть.

0
18.03.2021, 23:26

Нет, приложения запрашивают привязку к порту, но на самом деле именно операционная система решает, назначать порт приложению или нет.

, поэтому, например, порты меньше 1024 могут использоваться только rootили любым пользователем с возможностью CAP_NET_BIND_SERVICE.

proc/sys/net/ipv4/ip_local_port_rangeопределяет диапазон локальных портов, который используется трафиком TCP и UDP для выбора локального порта, он называется диапазоном эфемерных портов (, вы можете изменить его)

cat /proc/sys/net/ipv4/ip_local_port_range

32768   60999

или

sysctl net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range = 32768    60999

Также некоторые порты могут быть зарезервированы администратором с помощью настройки /proc/sys/net/ipv4/ip_local_reserved_portsили параметра ядра net.ipv4.ip_local_reserved_ports, поэтому эти порты не будут использоваться при автоматическом назначении портов.

Назначение /etc/servicesсостоит в том, чтобы программы могли выполнять getportbyname()вызовы сокетов в своем коде, чтобы получить порт, который они должны использовать.

1
18.03.2021, 23:26

Каждое соединение TCP включает не один, а два номера портов :локальный порт и удаленный порт. При исходящем соединении номер локального порта не важен, и большинство программ позволяют операционной системе выбрать его. Как отмечает binarysta, после этого ОС автоматически выберет первый свободный порт в диапазоне эфемерных портов.

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

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

(Некоторые службы используют полностью динамические номера портов и обычно полагаются на вторичные протоколы обнаружения, чтобы выяснить, какой порт (или )прослушивается сервером в :NFSv3 rpc.statdи rpc.mountd. наиболее знакомые примеры для современных пользователей Linux. Чтобы найти их на удаленном хосте, вы должны сначала связаться с RPC-маппером портов на порту 111 на этом хосте и спросить, на каких портах находятся сервисы.)

Некоторые серверные приложения (, в основном классические серверные приложения Unix, такие как inetd), могут искать локальные порты для использования по имени, используя getportbyname(), который обычно просто ищет его из /etc/services.

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

В наши дни /etc/servicesчаще всего используют такие приложения, как lsof, netstatили tcpdump, которые могут заменять номера портов в своих выходных данных более удобными -понятными именами для поиска. из /etc/services. Но вы должны иметь в виду, что такой номер порта с -по -имя может использоваться только для описания типичного использования :, это может быть или не быть точным описанием фактического порта. используйте в вашей конкретной системе.

Итак, на вопрос "если порт зарегистрирован в /etc/services, зарезервирован ли он?" ответ нет, это не .

Некоторые приложения могут использовать /etc/servicesдля определения используемых номеров портов.если только номер порта не указан непосредственно в конфигурации приложения или пользователем.

Защита от «конфликтов» происходит на уровне ОС, совершенно не связанной с /etc/services:, если приложение делает bind(2)системный вызов, чтобы указать, что оно хочет использовать определенный номер порта, и этот порт уже используется что-то еще, системный вызов завершится с ошибкой EADDRINUSE, чтобы указать, что что-то уже использует его.

1
18.03.2021, 23:26

Так много всего нужно переварить. Думаю, у меня есть ответ, который мне нужен :/etc/services — это просто список хорошо -известных служб и официальных названий. На него можно напрямую ссылаться с помощью getportbyname (), но это не обязательно. Когда динамический порт запрашивается, вероятно, для исходящего порта. ip _локальный _порт _диапазон является ссылкой на разрешенный диапазон портов Некоторые порты могут быть зарезервированы администратором путем добавления их в /proc/sys/net/ipv4/ip _локальные _зарезервированные _порты или параметр ядра rnet.ipv4.ip _локальные _зарезервированные _порты. Эти порты не будут использоваться автоматическим назначением портов. Если я правильно понял, причина, по которой я задал вопрос, заключается в том, что я перешел из своего безопасного -прем-мира AIX в дикую природу в Azure Cloud и SUSE. Для кластеров в облаке они используют функцию балансировки нагрузки, чтобы определить, среди прочего, IP-адрес службы, который будет перемещаться между узлами кластера. Им должен быть предоставлен определенный порт для использования, и, например, он был выбран как 62500. Недавно я тестировал некоторое программное обеспечение для резервного копирования под названием Commvault, и очень редко оно захватывает тот же порт до запуска кластера, поэтому я искал способы остановить это. Похоже, мне нужно либо изменить диапазон локальных портов по умолчанию, чтобы верхняя отметка была 62499, либо добавить порт специально в ip _локальные _зарезервированные _порты. Если я все правильно понял, большое спасибо всем за вашу быструю помощь,

0
18.03.2021, 23:26

Теги

Похожие вопросы