Ваша путаница проистекает из некоторых неверных предположений.
Но, конечно же, единственным устройством, которое знает этот механизм маршрутизации, является сам Router-C! Даже Компьютер-А и Компьютер-Б не узнают об этом, верно?
Что, почему… Тогда почему маршрутизатор был настроен на переадресацию этих портов на эти IP-адреса? Вы должны настроить P2P-клиент для использования определенного порта, а затем настроить маршрутизатор для соответствия.
но как Router-D знать, что нужно отправлять пакеты через порт 1000, а не как порт 1001?
Потому что вы настраиваете P2P-клиент для использования определенного порта (стандартного или нестандартного для этого протокола).
Единственное решение, которое я могу придумать, - это для маршрутизатора-D отправить пакет на маршрутизатор-C через все порты, чтобы он был перенаправлен на компьютер-A, но есть ли лучшее решение?
Это намного проще, чем это. Когда клиент устанавливает соединение с одноранговым узлом, он указывает, какой порт он хочет использовать, поэтому одноранговый узел отправляет данные на этот порт.
Хм, но Bittorrent не меняет поведение маршрутизатора, верно? Поскольку какой-то механизм маршрутизации мог бы быть динамичным, как продемонстрировано в superuser.com/a/187190/78897, как Computer-A может узнать об этом?
Клиент напрямую не влияет на маршрутизатор, но маршрутизатор может быть настроен / достаточно интеллектуален, чтобы адаптироваться к поведению клиента. Вы можете включить UPnP как на маршрутизаторе, так и на клиенте для автоматической настройки соединения, и большинство маршрутизаторов имеют возможность проверки состояния в рамках своего механизма переадресации портов .
Возьмем вместе, что это означает, что соединение может быть динамически установлено на случайном порте, и тогда маршрутизатор может отслеживать происходящее вместо того, чтобы рассматривать все как случайные, бессмысленные соединения. Таким образом, он может пересылать соединение по мере необходимости, потому что, например, это ответ на это другое соединение, которое только что произошло .
Проблема возникает, когда у вас есть несколько систем, использующих одну и ту же программу. Если несколько систем подключены к одному и тому же маршрутизатору, имеют один и тот же IP-адрес и используют динамические порты, это быстро становится неуправляемым, и даже при проверке с сохранением состояния трудно, если не невозможно, заставить его работать правильно. В этом случае необходимо использовать статические порты (по умолчанию или иначе).
Если вы используете такую программу, как SmartSniff или TCPView для мониторинга ваших соединений, вы заметите, что P2P-соединения обычно имеют настроенный вами порт (или порт по умолчанию для клиента) в качестве места назначения для входящих соединений и либо по умолчанию, либо пользовательский / случайный порт для источника и наоборот для исходящих соединений.