LINUX.ORG.RU
ФорумAdmin

Если закончились порты?

 


1

3
# dig -t A google.com
google.com.		299	IN	A	173.194.222.113
google.com.		299	IN	A	173.194.222.101
google.com.		299	IN	A	173.194.222.100
google.com.		299	IN	A	173.194.222.138
google.com.		299	IN	A	173.194.222.139
google.com.		299	IN	A	173.194.222.102

когда клиент создаёт TCP/IP-соединение, он же ведь занимает порт, так?

# ss -an
State		Recv-Q	Send-Q	Local Address:Port	Peer Address:Port
ESTAB		0	0	78.24.219.239:80	spoofing:59144

диапазон портов, надо полагать

# sysctl -a
net.ipv4.ip_local_port_range = 32768	60999

но ведь 6 * (60999 - 32768) = 169386 это мало? не? для всего мира?

или существует какое-то иное решение проблемы? я просто хочу расширить домашний Wi-Fi... что сделать? больше шлюзов добавить? ну ладно, порты закончатся на 192.168.1.1, будут порты браться для 192.168.1.2... а провайдер? он же выдаёт мне только один IP-адрес? приехали?

★★★★★

Начни с решения чисто арифметической задачи - сколько клиентов сможет подключиться при таком количестве доступных портов

zolden ★★★★★
()

это ты видишь этих шесть адресов. я вижу один и он совсем другой. американцы какие-нибудь будут совсем непохожие айпи видеть. а ведь ещё и ipv6 есть.

anonymous
()

Если закончились порты - снижай время ожидания ответа, переиспользуй, вот это все (с оглядок на возможные побочные эффекты).

slowpony ★★★★★
()

хочу расширить домашний Wi-Fi.

????

Bers666 ★★★★★
()

Для Гугля это входящие соединения на порты 80 и 443. С чего у отдельного сервера должен исчерпаться диапазон портов? Скорее уж в лимит open files упрется.

Это у клиентов на каждое исходящее соединение будет заниматься порт. И да, в случае стандартного NAT-overload (NPAT - network and port address translation) c 1 внешним адресом, ты ограничен лимитом в 64к tcp-портов на внешнем интерфейсе роутера. Но зачем тебе открывать столько соединений наружу?

CaHbl4
()

вы чтото недопонимаете или путаете.

порт просто указание на сервис «расположенный» на некотором ип-адресе.

порт занимается при «открытии порта» - привязке номера в параметре «порт получателя» заголовка ип-пакета с некоторой програмкой.

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

ограничения в соединениях наверное только в скорости сетевого соединения и памяти, отводимой на обеспечение работы каждого соединения.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)

но ведь 6 * (60999 - 32768) = 169386 это мало? не? для всего мира?

AFAIR, уникальность TCP соединения определяется не только парой local_addr:local_port, но что-то типа remote_addr:remote_port:local_addr:local_port. Так что, подключиться к одному хосту может больше клиентов чем есть локальных портов.

urxvt ★★★★★
()

На стороне клиента (тот кто шлет TCP-SYN пакет) - да, порты заканчиваются. Но на стороне сервера их в принципе не ограниченое ко-во (все конекшены акцептятся на один и тотже порт).

Для роутера нужно смотреть конкретную реализацию, может или нет роутер шарить один TCP порт на несколько соединений. (У IPTABLES вроде как лимит 64К соединений на 1 remote IP)

zaz ★★★★
()
Ответ на: комментарий от zaz

на стороне клиента вполне можно разделять соединения по порту:адресу отправления т.е «кому». как енто сделано в линухе надо смотреть.

если роутер без трансляции адресов и прочих хаков сетевых систем, то ему до лампочки на сложности внутри трафика, он всего лишь должен грамотно распределять пакеты по исходящим соединениям согласно таблице роутинга.
он работает на третьем уровне оси зла osi. tcp живет на четвертом.

pfg ★★★★★
()

О, Спуфинг. Неожиданно, рад что ты вернулся на ЛОР.

Riniko ★★
()

6 адресов сервера помножил на количество доступных локальных портов клиента и пыжится сделать какой-то вывод про highload...

спуфинг — такой спуфинг :)

anonymous
()

Сервер слушает порт, одного 443 достаточно.
При установке соединения открываются соединения.
Иногда они не закрываются.
Вот такие незакрытые соединения могут закончиться, тогда сервер не сможет открыть новые.
https://ru.wikipedia.org/wiki/Полуоткрытое_TCP/IP-соединение

я просто хочу расширить домашний Wi-Fi... что сделать?

Покрытие сети увеличить?
https://ru.wikipedia.org/wiki/IEEE_802.11k-2008

порты закончатся на 192.168.1.1, будут порты браться для 192.168.1.2

Ты 65 тысяч серверов на одном ip хочешь поднять? Если да, то для этого подойдёт reverse proxy например на nginx.

anonymous
()
Ответ на: комментарий от anonymous

количество доступных локальных портов клиента

Прекрати пороть чушь.

anonymous
()
Ответ на: комментарий от anc

по идее это правило и для клиентских портов работает, а net.ipv4.ip_local_port_range - всего лишь диапазон для выделения портов если перед connect() не вызывался bind(), то есть когда srcAddress и srcPort не были заданы явно.

я вообще думаю спуфинг про nat/conntrack имел в виду, а там совсем другие настройки.

Rost ★★★★★
()
Ответ на: комментарий от urxvt

+

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

deep-purple ★★★★★
()
Ответ на: комментарий от Rost

я был не прав. нельзя сделать 2 коннекта с одного адреса+порта, даже на разные destination. проверено экспериментально — bind() не дает. а вот если bind не использовать, то хз (скорее всего с ошибкой выпадет о нехватке ресурсов/портов).

Rost ★★★★★
()
Ответ на: комментарий от Rost

то хз (скорее всего с ошибкой выпадет о нехватке ресурсов/портов).

Взялись за проверку, идите до конца :) Задайте в /proc/sys/net/ipv4/ip_local_port_range как можно меньше портов и попробуйте на разные ip-адреса. И ещё есть SO_REUSEADDR, может он как-то повлияет.

проверено экспериментально — bind() не дает

Это понятно, базово bind() не знает для чего он биндит сокет, может мы его слушать будем. Уже добавили IP_BIND_ADDRESS_NO_PORT, может и для создания соединений с одним src-портом какую опцию сокета добавят.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.