1

Скажем, у меня есть две службы TCP A и B. A - это служба только для IPv4, прослушивающая 127.0.0.1:10000 . B - это служба только для IPv6, прослушивающая ::1:10000 . Могу ли я запустить эти службы на одной машине? То есть как назначаются IP-порты? На машину? На интерфейс? По протоколу? Так далее…

2 ответа2

1

Я предполагаю, что вы говорите о портах TCP и UDP.

Скажем, у меня есть две службы TCP A и B. A - это служба только для IPv4, прослушивающая 127.0.0.1:10000 . B - это служба только для IPv6, прослушивающая ::1:10000 . Могу ли я запустить эти службы на одной машине?

Да.

То есть как назначаются IP-порты? На машину? На интерфейс? По протоколу? Так далее…

Во-первых, не существует такого понятия, как «IP-порт». Порты являются функцией некоторых протоколов транспортного уровня. В частности, TCP и UDP используют номера портов. Я верю, что некоторые другие протоколы тоже их используют, но я сам работал только с TCP и UDP.

TCP-порты и UDP-порты полностью разделены. Сервер TCP и сервер UDP могут использовать одну и ту же комбинацию IP/ порт.

Серверы могут либо прослушивать определенную комбинацию IP-адрес / порт, либо прослушивать порт для всех адресов. Последний указывается путем указания адреса прослушивания 0.0.0.0 для IPv4 или :: для ipv6. Если сервер прослушивает порт для всех адресов, другие серверы не могут прослушивать этот порт для определенного адреса.

Наконец, в большинстве операционных систем сервер, прослушивающий ::, может принимать соединения как по IPv4, так и по IPv6. Существует опция сокета под названием "IPV6_V6ONLY", чтобы включить / отключить это поведение. Настройки по умолчанию для этой опции различаются. В Linux опция по умолчанию отключена, но это можно изменить с помощью sysctl "net.ipv6.bindv6only". В Windows Vista и более поздних версиях IPV6_V6ONLY включен по умолчанию. В более старых версиях Windows один сокет не может принимать соединения как v4, так и v6. Приложению, которое хочет прослушать оба, необходимо открыть два отдельных сокета.

0

Когда вы говорите «Порты», я предполагаю, что вы говорите о портах, которые используются в TCP и UDP. В этом случае каждый IP-адрес имеет порты, которые работают с 1-65,535 для TCP и 1-65,535 для UDP.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .