Если у нас два узла у которых есть только исходящие соединения, а входящие он не может потому, что раутер не настроен или это вообще невозможно(мобильная связь?)
то пусть один из них по р2р протоколу узнал, что у второго есть файл который ему нужен , а как он может скачать его напрямую, если он ни сам не может подключиться ни запросить входящее соединеие у другого?
пересылвать через посредников? както расточительно, а как в файлообменных делают?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B> а как в файлообменных делают?
По разному:
1. Никак — требуют чтобы хотя бы один абонент мог принимать соединения;
2. Пересылают через посредника;
3. Делают hole punching.
Третий способ, точнее целое семейство способов, конечно, самое интересное. Правда, работает не всегда, в отличии от первых двух.
Начать знакомится стоит со STUN.
Здравствуйте, watchmaker, Вы писали:
W>3. Делают hole punching.
а как он реализуется на уровне софта? вот я хочу поддержать это в совем ПО, то что мне нужно? это ж вроде тока на уровне драйвера Udp/Tcp только можно сделать
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Ещё добавлю что в теории существует технология upnp, с помощью которой программа может попросить роутер создать для неё перенаправление порта. Я в живую роутеров с такой технологией не видел, но наверняка где-то есть. Рассчитывать на это не стоит, но как один из способов — почему бы и нет.
Здравствуйте, Barbar1an, Вы писали:
W>>3. Делают hole punching.
B>а как он реализуется на уровне софта? вот я хочу поддержать это в совем ПО, то что мне нужно? это ж вроде тока на уровне драйвера Udp/Tcp только можно сделать
Нет, на уровне софта делается (обычно с участием третьего сервера для пробивки дырки, для последующей коммуникации он уже не нужен).
Здравствуйте, Barbar1an, Вы писали:
B>Если у нас два узла у которых есть только исходящие соединения, а входящие он не может потому, что раутер не настроен или это вообще невозможно(мобильная связь?)
Это какой-то странный роутер. Мне через первый раз в жизни подключённый мобильный интернет лет 20 назад сразу червь прилетел. Так что со входящими соединениями там, видимо, всё ок.
B>то пусть один из них по р2р протоколу узнал, что у второго есть файл который ему нужен , а как он может скачать его напрямую, если он ни сам не может подключиться ни запросить входящее соединеие у другого?
Через NAT, что p2p, что не p2p. Но вообще, p2p Означает, что нет никаких NAT, обычно.
B>пересылвать через посредников? както расточительно, а как в файлообменных делают?
Файлообменники и есть посредники, не?
Здравствуйте, vsb, Вы писали:
vsb>Ещё добавлю что в теории существует технология upnp, с помощью которой программа может попросить роутер создать для неё перенаправление порта. Я в живую роутеров с такой технологией не видел, но наверняка где-то есть. Рассчитывать на это не стоит, но как один из способов — почему бы и нет.
Древнейшие бытовые DLink умели это — сейчас и подавно, поддержка upnp везде. Есть другая проблема: вряд ли наш роутер торчит прямо в голый интернет, за ним ещё какой-то слой провайдерских железок может быть, так что придётсяс белый IP покупать и т.п.
Здравствуйте, Maniacal, Вы писали:
M>Это какой-то странный роутер. Мне через первый раз в жизни подключённый мобильный интернет лет 20 назад сразу червь прилетел. Так что со входящими соединениями там, видимо, всё ок.
Червяк прилетает не через входящее соединение, а при помощи эксплуатации всяких дырок в реализации тех или иных протоколов.
Простейший пример: если наш протокол ожидает DWORD заголовок с длиной данных, то наивная реализация просто вычитывает этот DWORD и аллоцирует столько же памяти. А теперь представим, что злоумышленник заслал нам несколько "плохих" заголовков с требованием по 4 гига в каждом — результат Out of memory. Аналогично, можно подсовывать наивным реализациям специально сфабрикованные широковещательные запросы, чтобы заставить клиента выполнить нужный злоумышленнику набор действий, а далее обманутый клиент сам сходит куда надо и сам всё скачает, никаких входящих соединений.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Простейший пример: если наш протокол ожидает DWORD заголовок с длиной данных, то наивная реализация просто вычитывает этот DWORD и аллоцирует столько же памяти. А теперь представим, что злоумышленник заслал нам несколько "плохих" заголовков с требованием по 4 гига в каждом — результат Out of memory. Аналогично, можно подсовывать наивным реализациям специально сфабрикованные широковещательные запросы, чтобы заставить клиента выполнить нужный злоумышленнику набор действий, а далее обманутый клиент сам сходит куда надо и сам всё скачает, никаких входящих соединений.
Это называется троян уже, когда "обманутый клиент сам сходит куда надо и сам всё скачает". Червяк заражает комп, потом начинает сканировать доступную с этого компа сеть и на каждом откликнувшемся айпишнике проверяет уязвимость. От пользователя не требуется никаких действий. Достаточно прямого IP-адреса, наличия уязвимости и просто подключиться к интернету. А так да, через buffer overrun.
Вот этот прилетел меньше через минуту, как только я подключился к интернету в начале 2000-х: https://en.wikipedia.org/wiki/Blaster_(computer_worm)
Даже ни на один сайт не успел зайти.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Древнейшие бытовые DLink умели это — сейчас и подавно, поддержка upnp везде. Есть другая проблема: вряд ли наш роутер торчит прямо в голый интернет, за ним ещё какой-то слой провайдерских железок может быть, так что придётсяс белый IP покупать и т.п.
Не обязательно. Очень часто провайдер дает белый IP, а продает постоянный.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
B>а как он реализуется на уровне софта? вот я хочу поддержать это в совем ПО, то что мне нужно? это ж вроде тока на уровне драйвера Udp/Tcp только можно сделать
Что за софт? Может, практичнее просто поставить тот же Tailscale или Zerotier. Иначе придется почти то же самое написать самому
Здравствуйте, vsb, Вы писали:
vsb>Ещё добавлю что в теории существует технология upnp, с помощью которой программа может попросить роутер создать для неё перенаправление порта. Я в живую роутеров с такой технологией не видел, но наверняка где-то есть. Рассчитывать на это не стоит, но как один из способов — почему бы и нет.