Как решается проблема исчерпания портов NAT?

Как решается проблема исчерпания портов NAT?

«Трансляция адресов портов (PAT) разрешает конфликты, возникающие, когда несколько хостов используют один и тот же номер исходного порта для установления различных внешних соединений в одно и то же время. Затем PAT может назначить соединению номер порта изпул доступных портов, вставив этот номер порта в поле исходного порта.

https://en.wikipedia.org/wiki/Перевод_сетевого_адреса

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

Как отрасль справляется с такими сценариями?

решение1

В конце концов, NAT на самом деле сводится к таблице поиска на устройстве NAT, содержащей сопоставления того, какие соединения куда идут. Однако эти записи таблицы создаются наза сеансоснова.

Пример. Если у меня есть хост в10.10.10.10, желающий связаться с сервером в Интернете по адресу8.8.8.8, через мой интернет-шлюз, публичный IP-адрес которого1.1.1.1, когда происходит это взаимодействие, мой интернет-шлюз может создать пару записей, выглядящих примерно так:

Источник Спорт Место назначения Дпорт Действия
10.10.10.10 20000 8.8.8.8 80 SNAT 10.10.10.10:20000 --> 1.1.1.1:40000
8.8.8.8 80 1.1.1.1 40000 ДНКАТ 1.1.1.1:40000 --> 10.10.10.10:20000

Хотя может показаться, что1.1.1.1:40000теперь занято для этого сеанса, теперь оставляя ~63999 портов, это не совсем так. Поскольку эти записи на основе сеанса, было бы совершенно разумно, чтобы последующие коммуникации происходили и выстраивали таблицу следующим образом:

Источник Спорт Место назначения Дпорт Действия
10.10.10.10 20000 8.8.8.8 80 SNAT 10.10.10.10:20000 --> 1.1.1.1:40000
8.8.8.8 80 1.1.1.1 40000 ДНКАТ 1.1.1.1:40000 --> 10.10.10.10:20000
10.10.10.10 20001 8.8.8.8 81 SNAT 10.10.10.10:20001 --> 1.1.1.1:40000
8.8.8.8 81 1.1.1.1 40000 ДНКАТ 1.1.1.1:40000 --> 10.10.10.10:20001
10.10.10.10 20002 8.8.4.4 80 SNAT 10.10.10.10:20002 --> 1.1.1.1:40000
8.8.4.4 80 1.1.1.1 40000 ДНКАТ 1.1.1.1:40000 --> 10.10.10.10:20002
10.10.10.10 20003 8.8.4.4 81 SNAT 10.10.10.10:20003 --> 1.1.1.1:40000
8.8.4.4 81 1.1.1.1 40000 ДНКАТ 1.1.1.1:40000 --> 10.10.10.10:20003

Итак, на публичном интерфейсе (где обычно возникает беспокойство по поводу исчерпания NAT) мы видим, что фактически существует 4 сеанса:

1.1.1.1:40000 --> 8.8.8.8:80
1.1.1.1:40000 --> 8.8.8.8:81
1.1.1.1:40000 --> 8.8.4.4:80
1.1.1.1:40000 --> 8.8.4.4:81

но эти 4 сеанса не полностью используют 4 порта, и устройство NAT точно знает, куда следует направлять трафик, принадлежащий любому из этих 4 сеансов.

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

Связанный контент