Короткий ответ таков: в 95% случаев это невозможно, а ваш соответствует этим 95%.
Во-первых, позвольте мне сказать, что не имеет смысла говорить о маршрутизации загрузки и выгрузки отдельно, потому что даже интенсивные задачи загрузки требуют, чтобы некоторые пакеты передавались обратно к источнику, т.е. любая загрузка требует некоторого потока выгрузки (это менее верно для UDP, чем для ПТС, но это не важно).
Если бы мы передавали загрузку соединения для загрузки в основном через сетевой адаптер, отличный от того, который использовался для части загрузки, источник загрузки мог бы видеть, что ответы на его пакеты исходят с другого IP-адреса, чем тот, на который он установлен. отправка пакетов; это базовая функция безопасности, позволяющая игнорировать пакеты, относящиеся к данному соединению, но исходящие от стороннего адреса. Следовательно, часть разговора будет удалена, а соединение прервется. Это не имеет ничего общего с провайдерами и их услугами: это происходит даже между двумя устройствами в одной локальной сети, если один из них пытается подключиться к IP-адресу, используя в одном соединении два разных NICS (следовательно, два разных IP) ,
Это причина, по которой мы говорим о соединениях, а не о загрузке / загрузке. Но тогда можно переформулировать ваш вопрос следующим образом: могу ли я иметь компьютер с двумя сетевыми картами, подключенными к сети, использовать две сетевые карты для двух разных соединения, скажем медленное соединение для медленной, утомительной работы, такой как электронная почта, и быстрое соединение для быстрого процесса, такого как загрузка веб-страницы?
Краткий ответ на этот правильно поставленный вопрос: в Windows * Nix (включая MacOS) и Android нет. В Linux да, вы можете.
Причина, по которой вы не можете сделать это в Windows (любой версии), * Nix и Android, заключается в том, что любая таблица маршрутизации может иметь только один шлюз по умолчанию (* т.е. * адрес, на который вы отправляете все пакеты, не предназначенные для вашей локальной сети), и эти Операционные системы могут обрабатывать только одну таблицу маршрутизации: следовательно, один шлюз.
Вместо этого, чтобы распределить разные приложения по разным интерфейсам, вам нужны две разные функциональности: одна - возможность двух одновременно запускать две таблицы маршрутизации, а вторая - возможность привязывать приложения к любой из таблиц маршрутизации. На момент написания этой статьи эти возможности были только у ядра Linux (световых лет впереди конкурентов). Ядро * Nix частично компенсирует это за счет разумного использования своего брандмауэра pfsense, однако не достигает полного результата.
Возможность одновременного запуска двух таблиц маршрутизации (так называемая политика маршрутизации или маршрутизация на основе источника ) означает, что пакеты маршрутизируются по-разному в зависимости от их IP-адреса. Это чрезвычайно полезная функция, если вы строите маршрутизатор.
Однако, чтобы использовать разные сетевые карты (и, следовательно, IPS) в зависимости от приложения, вам нужны сетевые пространства имен , функция ядра Linux, которая позволяет вам создать отдельную оболочку со своим собственным сетевым стеком. Теперь процессы, выполняющиеся внутри этой отдельной оболочки, будут маршрутизироваться в соответствии с таблицей маршрутизации пространства имен сети, а не основного компьютера.
Это, конечно, форма виртуализации, хотя и более слабая, чем, скажем, контейнер Linux, не говоря уже о виртуальной машине. Но это реальный способ, с помощью одного компьютера, направлять различные процессы через разные интерфейсы.
Подводя итог, можно сказать, что в Linux (и только в Linux) вы можете запустить отдельное сетевое пространство имен, которое, например, подключено через VPN к вашему рабочему месту, так что вы получаете доступ к своим рабочим ресурсам, и, если вы запускаете Firefox, вы, кажется, находитесь на своем рабочем месте, и в то же время запускаете Google Chrome за пределами сетевого пространства имен и, таким образом, кажетесь (на Chrome) базирующимся дома.