Я знаю сети достаточно, чтобы быть опасным. Я не особо разбираюсь в мельчайших подробностях NAT на низком уровне.
Я случайно оказался сегодня в дискуссии о размещении группы наших узлов за шлюзом NAT. (1 публичный IP-адрес и X частных LAN-адресов). Я вызвал 16-битное ограничение на поля порта источника и назначения в протоколе TCP, (http://www.ietf.org/rfc/rfc793.txt - стр.15) и упомянул, что это ограничит нас примерно 65 000 подключений (65536). - Я больше не уверен в этом ответе. Вы можете мне помочь с некоторыми подробностями?
Я понимаю, что входящий порт (порт сервера) на нашей стороне может принимать столько подключений, сколько существует комбинаций sourceIP x SourcePort. Давайте временно отбросим их и сосредоточимся на соединениях, возникающих в локальной сети, проходящих через шлюз NAT и заканчивающихся на случайном хосте на случайном порту.
В обычной системе [Linux] исходящие соединения, как я полагаю, ограничены 1 на порт на исходный IP-адрес. Если мы представим, что живем в простом мире, где каждая система имеет только 1 IP-адрес, тогда «нормальная система» будет ограничена абсолютным максимумом в 65536 подключений.
1) В TCP ограничен ли IP-адрес одного источника до 65536 MAX теоретических исходящих соединений?
2) Или на самом деле ограничение составляет 65536 подключений для каждого удаленного хоста?
2) [Написано по-другому]: Можно ли использовать один и тот же исходный порт для другой комбинации remoteHostIP: RemotePort?
Например: (Это нормально?)
Source IP |Source Port |Remote IP|Remote Port
192.168.0.20:36500 --> 8.8.8.8:23
192.168.0.20:36500 --> 8.8.4.4:23
3) Отличаются ли ответы на вопросы 1 и 2 для ... «ненормальной системы» [маршрутизатор Cisco, действующий как шлюз NAT]?
Пример: специализированное сетевое устройство с одним общедоступным IP-адресом и до ~ 65 000 LAN IP [или более] за ним? Есть ли магия на месте или ответ на вопрос 2 всегда: да? (или нет)
4) Все вышеперечисленные вопросы предполагают TCP-соединение с отслеживанием состояния. Отличается ли история с соединением без сохранения состояния, например UDP?
5) Будет ли наша локальная сеть ограничена 65536 (или другим теоретическим пределом) одновременных подключений к внешнему миру через один общедоступный IP-адрес?
Спасибо! :)
Для ответа на этот вопрос мы разработали ПОЧЕМУ СОВЕРШЕННО НОВУЮ ПОМОЩЬ Cisco Nexus (я думаю, серии 7000). Возможно, лучше игнорировать ограничения памяти и т. Д., Если они не могут быть конкретно определены количественно.
Поправьте меня, если я ошибаюсь, но я так понимаю. Ограничения указаны для каждого клиента / сервера / порта. Итак, в свете этого.
1) В TCP ограничен ли IP-адрес одного источника до 65536 MAX теоретических исходящих соединений?
Нет. Я считаю, что теоретический максимум 65536 для одного и того же IP-адреса назначения.
Рабочие станции Windows (не серверные версии) имеют ограничения, которые делают это число намного меньше. В Linux есть ограничения на ресурсы, но они, как правило, не достигаются обычным пользователем, и вы можете легко их настроить.
Вы, вероятно, достигнете других ограничений ресурсов, когда начнете увеличивать число где-то около 64 КБ.
Маршрутизаторы потребительского уровня могут иметь гораздо более низкие ограничения из-за ограниченных ресурсов.
2) Или на самом деле ограничение составляет 65536 подключений для каждого удаленного хоста?
да
3) Отличаются ли ответы на вопросы 1 и 2 для ... «ненормальной системы» [маршрутизатор Cisco, действующий как шлюз NAT]?
Нет
4) Все вышеперечисленные вопросы предполагают TCP-соединение с отслеживанием состояния. Отличается ли история с соединением без сохранения состояния, например UDP?
UDP не требует установления соединения. Так что это не имеет отношения к UDP.
5) Будет ли наша локальная сеть ограничена 65536 (или другим теоретическим пределом) одновременных подключений к внешнему миру через один общедоступный IP-адрес?
Нет.
В контексте межсетевых экранов с отслеживанием состояния, которые отслеживают соединения и предоставляют другие функции отслеживания, да, сами эти модули могут иметь ограничения. Оператор ничего не сказал о том, какой межсетевой экран / NAT-маршрутизатор используется, поэтому мы даже не можем предположить, какие ограничения он может наложить в данный момент.
Короче говоря, он сильно зависит от платформы, конфигурации и реализации.
Но позвольте мне быстро объяснить:
По-видимому, в других ответах говорится о достижении теоретического предела> 65535 (обратите внимание, что порт 0 часто зарезервированный), которые в определенной степени верны, например ...:
тем не мение в реальном мире, где маршрутизация с аппаратным ускорением выполняется с ограниченными ресурсами, таблица NAT имеет хорошо известное ограничение, которое часто является параметром конфигурации для защиты.
Cisco упоминает, что начиная с IOS 12 максимальное значение NAT зависит от DRAM, что приводит к примерно 10 КБ трансляций (источник), что меньше тех 65К в вашем вопросе.
Возьмите свой старый маршрутизатор xDSL, если вы хотите запустить P2P дома с большим количеством подключений, большинство из них настроили глобальный максимальный лимит 1024 ~ 4096. Например, мой домашний маршрутизатор FTTH имеет ограничение NAT, установленное производителем на 8K.
в заключение, чтобы ответить Q2-rewrite, я видел продукты с неудачной реализацией RFC3489 со следующими таблицами NAT. Очевидно, что последний значительно ограничивает возможности NAT:
Радуйтесь, если вам нравится этот ответ!
5) Будет ли наша локальная сеть ограничена 65536 (или другим теоретическим пределом) одновременных подключений к внешнему миру через один общедоступный IP-адрес?
Нет, потому что один IP-адрес NAT порта может использоваться для нескольких подключений:
cat /proc/net/ip_conntrack | grep 51380
tcp 6 191 ESTABLISHED src=10.1.8.5 dst=17.133.254.23 sport=51380 dport=5223 src=17.133.254.23 dst=my.nat.pub.ip sport=5223 dport=51380 [ASSURED] mark=0 use=2
tcp 6 24 CLOSE_WAIT src=10.1.26.1 dst=80.68.255.71 sport=51380 dport=80 src=80.68.255.71 dst=my.nat.pub.ip sport=80 dport=51380 [ASSURED] mark=0 use=2
Поскольку существует множество подходов к проектированию NAT, ответ, конечно, «зависит от обстоятельств». Джефф Хьюстон написал отличный обзор различных конструкций NAT.
По моему опыту, многие маршрутизаторы для малых и домашних офисов не могут обрабатывать> 64 КБ адресов по одному и тому же адресу, но не только из-за исчерпания портов. Многие из них имеют ограниченную память, и им не хватит ОЗУ для таблицы NAT задолго до того, как достигнут предел в 64 КБ.
Первичный ключ таблицы сопоставления NAT:
sourceIP:sourcePort + DestinationIP:DestinationPort
Мы можем сопоставить разные sourceIp: sourcePort с одним и тем же DestinationIP: DestinationPort. Итак, номер порта (2^16
) не предел для подключения.