Как осуществить прямое соединение между двумя хостами не открывая портов?
Что бы передавать данные по кусочкам, либо сделать поток (аудио, видео или просто каких-нибудь других данных). Меня интересуют например ключевые слова, по которым я бы смог понять, как это использовать. Или ссылки
Не знал, какой тег всунуть, но тот, что есть подсказывает, на каком языке я собираюсь это делать
@Diel а с чего вы взяли, что торренты не используют порты? В любом случае при соединении настройка модема, роутера и всего что обеспечивает вам доступ в интернет понадобится, в простом случае она заключается в получении всех настроек по DHCP, но какая-то настройка все равно будет.
@Diel торренты используют свой протокол на базе UDP (uTP), и TCP. То есть они занимают порты. Так же как и скайп (только тот использует вроде еще и промежуточный сервер в качестве раутера ибо он не может знать на каком порту кто висит). У торрентов схожий подход, просто без участия одного сервера.
А роутеры и модемы в любом случае нужно настраивать, хотя бы для того что бы в интернет вылезти.
Ваша задача как я понимаю, решить проблему адресации, то есть кому отправлять пакеты через весь интернет, если его реальный IP и порт на котором запущено приложение вам толком не известны. Покурите доки по p2p, там предлагается несколько вариантов решения этих проблем.
Если обе машины за симметричным натом - то без промежуточного сервера никак.
Впрочем, есть публичный STUN-серверы - https://ru.wikipedia.org/wiki/STUN , вопрос в доверии к ним и их надежности.
Если же вы имеете в виду "вообще без использования портов", а не "без проброса портов наружу в роутере" - то очевидный ответ - "никак". Любой пакет имеет в качестве "адреса назначения" хост+порт.
Не думаю, что можно слать/принимать IP пакеты вручную, минуя транспортный уровень (TCP/UDP). Но если можно, то Ваша проблема решена. Я, увы, не смог никакой информации по этому поводу найти.
@LPzhelud вообще-то можно на некоторых системах, в Linux есть raw socket-ы - как раз в обход транспортного уровня. Но остается непонятным чем автору не угодили порты.
@kmu1990 через raw-сокеты как раз таки рассылаются сообщения сетевого уровня, а IP это протокол именно этого уровня. TCP/UDP - протоколы прикладного уровня. Вот только маленькое но - raw-сокеты или просто сокеты работают с портами. Других вариантов отправить что-то на другую машину просто нету.
@Fesor я как раз и написал, что через raw сокеты можно работать в обход транспортного уровня, что не так? Про порты на raw сокетах я ничего не писал. Кроме того, TCP/UDP - не протоколы прикладного уровня, а протоколы транспортного уровня.