Сбой маршрутизатора NAT и P2P
Итак, у меня был этот спор с моим учителем сетей. Он сказал, что некоторые люди жалуются на сбой маршрутизатора из-за большого количества записей в таблицах NAT на маршрутизаторе.
Я не понял и спросил: "Если приложение использует один и тот же порт, почему происходит сбой маршрутизатора? У него должна быть только одна запись (pc-ip,pcport;public-ip,public-port)". И он сказал: "Неважно, использует ли он один и тот же порт".
Я понял, что NAT создает запись для каждого пакета, который проходит через него. Я предполагаю, что NAT с перегрузкой, как вы уже догадались.
Итак, вопросы:
Как создаются записи nat? На основе пакета или соединения? Я имею в виду: предположим, я отправляю пакет udp. Маршрутизатор создает запись?
Когда я запускаю TCP-соединение, маршрутизатор создает постоянную запись nat, пока соединение не закроется?
Был ли мой учитель прав? Таблицу NAT можно перегружать, предполагая, что приложение на том же порту отправляет пакеты?
Заранее спасибо.
1 ответ
- За соединение (или за поток UDP)
- да
- Да. Например, ваш веб-браузер на одном внутреннем ПК может иметь несколько одновременных TCP-соединений, открытых одновременно для каждого из нескольких различных внешних веб-серверов. Для каждого соединения порт источника будет меняться (выбирается случайным образом), но порт назначения и IP-адрес назначения могут быть идентичны для нескольких соединений. Маршрутизатор, предназначенный для обслуживания двух или трех компьютеров в доме, может не справиться с количеством одновременных подключений, необходимых (например) в школе с сотнями очень загруженных компьютеров. Маршрутизаторы должны быть рассчитаны на ожидаемую нагрузку.
Если вы посмотрите на пример C source для TCP-клиента, описанный в Howto, вы увидите, что API "сокетов" не предоставляет средств для клиента, инициирующего соединение, для указания исходного порта.