1

Тема: Як з'єднати два модема в один?

Доброго дня!
Маю 2 модеми - Лайф і Інтертелеком. Обидва 3G. І обидва по 150 кб/с максимальної швидкості.
І я займаюся завантаженням програм зараз (і дистрибутивів Лінукс), щоб на віртуальній машині можна було вчитись створювати програми під Лінукс (бо з Лінуксом в мене проблема, на Windows ще якось).
Так от, ці дистрибутиви важать по 2 Гб в середньому кожен.
І є 2 варіанти:
1. Качати на кожному модемі (телефоні) окремо.
2. Качати на компі, використовуючи 2 модеми.
Перший варіант не підходить, бо файлова система на телефоні FAT32, і вона не може вміщати файли, які більші за 2 Гб. Тому, я приєдную телефона до компа (як модем) і качаю там.
А другий варіант полягає у використанні 2-х модемів одночасно.
Скажіть, яким чином можна їх об'єднати?
P.S. Я готовий на все. Навіть на написання власного драйверу. Скажіть тільки, як його написати.

2

Re: Як з'єднати два модема в один?

Я правильно зрозумів, що у вас зараз Windows? Прогляньте ось ці рецепти:
https://windowsreport.com/combine-internet-connections/
Але викачувати один файл ви все одно будете через одне з'єднання, якщо це не торент.
А взагалі ви б купили щось краще, якось в часи 4g 300kbps, та що й отак хитрозакручено, все одно якось не тойво.

Подякували: sadsidsod1

3

Re: Як з'єднати два модема в один?

Дякую. Про ці методи я напевне вже знав...
Я взагалі використовую VirtualBox. Тобто, я можу під'єднати одночасно два модеми - 1 модем в основну машину і 1 в віртуальну. А мене цікавило саме з'єднання їх в один канал.

А Ви кажете, що в один канал не вийде, а вийде тільки на торенті. Чому Ви каже щось про торент? Маєте на увазі, що різні IP-адреси не можуть злагоджено підключатися до одного й того ж сервера?
Я маю на увазі серйозні завантаження, а не завантаження з якихось файлообмінників з лімітованим часом і виділеною клієнтською IP-адресою (з іншої підключатись не можна).

Короче, питання до Вас, як до розробника C++ (бо з мене розробник поганий). Як зробити наступну програму.
Ця програма має качати один великий файл в 2 потоки. Перший потік має качати його з початку, а другий потік - з кінця. Тобто, спочатку файл на комп'ютері створюється з таким розміром, як на сервері (заповнюється нулями), а потім кожен потік окремо пише туди дані. Перший потік пише від початку до кінця, а другий потік - від кінця до початку. І так до тих пір, поки дані не заповняться.
Ця програма треба не лише мені. І я думаю, що якщо ми зможемо її реалізувати, то вона багато кому допоможе. Адже і 3G, і 4G модеми і будь-які підключення всім потрібно з'єднувати. Ця програма має попит.
Так от, як цю програму реалізувати?
Я створю при можливості тему в розділі C++, де викладу свій код з невеликими напрацюваннями щодо цієї програми. Я сподіваюся, що це не буде оверпостінг.

4

Re: Як з'єднати два модема в один?

Можливо, тут знайдеться хтось, хто краще знає мережеві протоколи, але мені здається, одне з'єднання TCP не буде через два різних IP бігати, потрібне певне обладнання з обох боків транку. Перевіряти ліньки, якщо чесно.
Про торенти написав, бо торенти якраз і завантажуються з різних комп'ютерів по, відповідно, різних з'єднаннях, маленькими (~мегабайт) частинами.
Dowload Manager-и вже давно існують, власне, за останні 10 років їхнє використання сильно скоротилося, але практично всі таке вміли, якщо сайт умів (технічно це Range Request, але в менеджерах часто писали "сайт підтримує дозавантаження"). А абсолютна більшість сучасних сайтів, звісно, це вміють. Звісно, не з кінця файлу - нікому зворотний порядок байтів не потрібний; просто можна запустити кілька потоків, один бере, скажімо, перші 10 мегабайтів, другий - другі і т.д.; коли один з потоків завершує завантаження, то починає завантажувати з того місця, де ще немає потоків. Чомусь вранці при них не згадав :)
Думаю, якщо під'єднати обидва модеми до основної системи і скористатися першою порадою з мого посилання, Download Manager впорається. Якщо софт модемів не дозволяє їх під'єднати одночасно, то можна в віртуалці зробити міст і качати через нього.

Подякували: sadsidsod, leofun01, Torbins3

5 Востаннє редагувалося frz (24.02.2020 23:31:53)

Re: Як з'єднати два модема в один?

До речі, купівля провайдером містечкового рівня пачки дешевих каналів, об'єднання їх в один і продаж місцевим користувачам як "широкий канал" - колись було цікавою історією в інтернетах. Зараз мабуть і не знайду лінків. Та й відповідний термін крутиться на язику, однак не можу згадати.

Був в мене колись спеціаліст з мікротіків, налаштовував резервний канал. Казав, що ця залізяка дозволяє крім перемикання, ще й об'єднувати декілька каналів в один. Вже й мікротік мій з того часу загинув власною смертю... Я до чого веду, що для промислового обладнання рішення існують, а от щоб зробити це на рівні рядового програміста, котрий не має спеціальних знань про мережі (не кажучи вже про домогосподарок) рішень просто не існує.

Тож вважаю що тема перспективна і обов'язково знайде свою нішу.

Подякували: sadsidsod1

6

Re: Як з'єднати два модема в один?

Можливо, Ви мене не правильно зрозуміли.
Я мав на увазі, що є 2 потоки. Перший потік пише дані з початку до кінця, другий потім - з кінця до початку. Але, перший потік використовує одне підключення, а другий потік - друге підключення.
Тобто, про єдине TCP на різні IP мови не йдеться.
Цей же принцип закладений до всіх інтернет-ботів. Треба в веб-девелоперів запитати, як то вони на PHP реалізовують. Хоча, не обов'язково PHP, але, думаю, його для цієї задачі використовують найчастіше.
Ну от наприклад, я читав недавно про гугл бот. Він може використовувати для завантаження pdf-файлу одночасно 10 IP-адрес. Власники сайтів жаліються, що вони встановлюють обмеження на швидкість з однієї IP-адреси, а бот таким чином обходить це обмеження. І тому виникає "атака" на сайт. Тому власники сайту блокують деякі IP-адреси ботів.
Тому я не безпідставно думаю, що таку програму якось можна зробити. І я чомусь думаю, що така програма, як зазвичай буває, в демо-версії (без забаганок) займе пару сотень рядків коду.
Можливо, я дуже погано знаю мережі. Але от може є така функція на C++, за допомогою якої можна використовувати лише задане цією функцією підключення. І це з включенням того, що інші підключення продовжують бути підключеними до системи.
Але ж, Windows такого скоріше не дозволить? Тому я і писав в самому початку теми, що треба писати драйвер, який буде "виймати" з системи Windows пристрій і передавати його в програму.
Для прикладу, Ви коли небудь використовували VirtualBox? Так от, в ньому є функція "захоплення USB-пристроїв". Увага: для цього в систему встановлюється спеціальний драйвер. Тобто, цей драйвер "перенаправляє" пристрій із системи в віртуальну машину. Увага: після захоплення пристрою, в основній системі його не видно, в диспетчері пристроїв немає.
Розумієте, що я хочу сказати?

Далі. Візмемо саму просту систему Linux. Наприклад, Ubuntu 12. До неї можна підключити модем або роутер або принтер і вона його "побачить" і "почне з ним працювати" без драйверів. Тобто, існують якісь стандартні драйвери. А це означає, що якщо я знайду такий стандартний драйвер, написаний на мові C++, або DLL-стандартний драйвер, то я зможу прив'язати цей драйвер до мого драйверу, який буде "виймати" пристрої з системи і таким чином, я зможу напряму з програмного коду, мимо системи, використовувати підключення.

Тобто, виходить, що мені треба розбиратися у вихідному коді VirtualBox, щоб створити драйвер, який буде "витягати" пристрої з системи та дізнатися про "стандартний" драйвер для модемів. Якщо перше я можливо зроблю (колись), то друге я не знаю навіть як почати. Дуже дивно, що це питання ще не піднімалося.

7

Re: Як з'єднати два модема в один?

Вихідний код VirtualBox:
https://download.virtualbox.org/virtual … .4.tar.bz2
важить аж 158 мегабайтів.
Ну, щоб Вам не качати так багато, ось архів саме з драйвером USB-пристрою:
Цей контент доступний тільки зареєстрованим користувачам.
400 кілобайт. Точніше, там навіть драйвера немає. Це обрізаний архів з соурс кодом. А ще там я залишив PCI (не весь).

Поки не читав. Буду зараз розбиратися. Ніч довга, може до ранку допетраю, як воно працює  :D
А поки що, може Ви почитаєте. Там 1.5 мегабайт тексту. Це десь 100 сторінок A4 шрифтом 20.

8

Re: Як з'єднати два модема в один?

Не мій стек, однак вважаю що напрямок перспективний.

9

Re: Як з'єднати два модема в один?

Добре. Щось не виходить в мене, після перших 2-х хвилин.

Трохи почитав і голова заболіла. Там немає базового алгоритму.
Ви теж не читайте. Воно не треба. До того ж, в архіві 400 кб немає потрібних для розуміння коду хеадерів  :( Занадто сильно урізав. Там весь архів взагалі потрібен, хеадерів так багато, що урізання доведеться робити дуже довго. А то так, дав щось сам не знаю що, а люди будуть читати, витрачати час. Це я розігнався. Ух, думаю. Зараз покажу, як я вмію код аналізувати!!! А все не так вийшло вже через 2 хвилини після "розгону".

Я зтупив, винен.  Треба було брати код старіших версій VirtualBox, а я взяв код найновішої.
https://download.virtualbox.org/virtual … .0.tar.bz2
Ось архів з VirtualBox 4.0. Радує те, що він цілий (не урізаний) і важить 67 мегабайт. Значить, його простіше вивчити, ніж той, що 160 мбайт. Сподіваюся, хоч щось вийде...  :( Але, це навряд чи. Тут немає ні файлів ресурсів, нічогісінько. Це - файли чистого тексту! 67 мег. Ні, скоріше я цей не осилю. Мені потрібна допомога. Я шукав соурс код VirtualBox 1.0, але я такого не знайшов. Його десь немає.
Якщо знайдете, дайте будь-ласка код VirtualBox 1.0.

10

Re: Як з'єднати два модема в один?

Розібрався трохи. Мені правда дуже не сподобався цей соурс код.
В папці
VirtualBox-4.0.0\VirtualBox-4.0.0_OSE\src\VBox\
є два каталоги з підкаталогами, які звуться USB. Це Devices і HostDrivers. Так от, HostDrivers містить те, що не потрібно (драйвери для віртуальної машини, віртуального хосту).
В папці Devices міститься папка USB
VirtualBox-4.0.0\VirtualBox-4.0.0_OSE\src\VBox\Devices\USB\
А в ній міститься файл
VirtualBox-4.0.0\VirtualBox-4.0.0_OSE\src\VBox\Devices\USB\USBProxyDevice.cpp
Щоб зрозуміти цей файл, потрібно скопіювати папку
VirtualBox-4.0.0\VirtualBox-4.0.0_OSE\include\
в свій компілятор.
Зараз стане зрозуміло. Ось частина коду:

#include <VBox/usb.h>
#include <VBox/usbfilter.h>
#include <VBox/pdm.h>
#include <VBox/err.h>
#include <iprt/alloc.h>
#include <iprt/string.h>
#include <VBox/log.h>
#include <iprt/assert.h> 

Не могли написати нормально. Обов'язково копіювати в компілятор. Бо кавички <> зчитують дані з компілятора. Це не сподобалося.
А далі, відкриваємо папку
VirtualBox-4.0.0\VirtualBox-4.0.0_OSE\include\
і бачимо, що там гора горенна ціла коду.
Тобто, це ж його ніхто безкоштовно вивчати не буде. І я в тому числі. Це треба вивчати його день і ніч. Це має сенс, якщо я буду продавати програму.
На цьому безкоштовна ідея завершилася.
Хоча, можливо, не обов'язково VirtualBox. Десь ще я бачив такі драйвери. А от де, згадати не можу. Щось знайоме. Мережеві драйвери бачив в NirSoft NetworkViewer. А от USB...

11

Re: Як з'єднати два модема в один?

sadsidsod написав:

Ну от наприклад, я читав недавно про гугл бот. Він може використовувати для завантаження pdf-файлу одночасно 10 IP-адрес. Власники сайтів жаліються, що вони встановлюють обмеження на швидкість з однієї IP-адреси, а бот таким чином обходить це обмеження. І тому виникає "атака" на сайт. Тому власники сайту блокують деякі IP-адреси ботів.

Про те що описують, це фактично фінт пов'язаний з використанням можливості довантажувати веб-вміст.
Але його доступність залежить від протоколу (мало де таке передбачено) і серверу (чи є підтримка і як реалізована).
Можете пошукати цю властивість у wget та curl.
Але там завантаження не з кінця йде, а просто з середини. Спочатку всі агенти ініціалізують завантаження файлу, потім всі крім одного розривають і відновлюють через певний інтервал але з певним зміщенням. Правда це виходить на простеньких хостингах, а ось на гарно налаштованих з тим облом бо сервак очікує відновлення на певному місці, а не випадковому, а у деяких взагалі буває ця опція вимкнена (якщо на сервері немає великих файлів чи відео чи вони на окремому сервері) чи працює вибірково.

12

Re: Як з'єднати два модема в один?

frz написав:

Був в мене колись спеціаліст з мікротіків, налаштовував резервний канал. Казав, що ця залізяка дозволяє крім перемикання, ще й об'єднувати декілька каналів в один. Вже й мікротік мій з того часу загинув власною смертю... Я до чого веду, що для промислового обладнання рішення існують, а от щоб зробити це на рівні рядового програміста, котрий не має спеціальних знань про мережі (не кажучи вже про домогосподарок) рішень просто не існує.

Тож вважаю що тема перспективна і обов'язково знайде свою нішу.

Для того, щоб таке працювало, на другому кінці має бути такий самий мікротік, з правильними налаштуваннями. Тому цей варіант теоретично можливий, але на практиці мало де застосовується.

sadsidsod написав:

Можливо, Ви мене не правильно зрозуміли.
Я мав на увазі, що є 2 потоки. Перший потік пише дані з початку до кінця, другий потім - з кінця до початку. Але, перший потік використовує одне підключення, а другий потік - друге підключення.
...

От скажіть мені, будь ласка, чому у більшості користувачів інтернету мізків як у курки, і вони здатні прочитати лише останнє повідомлення в темі?
koala вище уже все розписав про Range Request. Вам залишилося лише скачати uGet і активувати multi-connection.

Подякували: leofun011

13

Re: Як з'єднати два модема в один?

Короче, питання до Вас, як до розробника C++ (бо з мене розробник поганий). Як зробити наступну програму.
Ця програма має качати один великий файл в 2 потоки. Перший потік має качати його з початку, а другий потік - з кінця. Тобто, спочатку файл на комп'ютері створюється з таким розміром, як на сервері (заповнюється нулями), а потім кожен потік окремо пише туди дані. Перший потік пише від початку до кінця, а другий потік - від кінця до початку. І так до тих пір, поки дані не заповняться

Почитайте про http 1 заголовки range.
Дивне питання, як на 5 рокiв стажу хрестiв.