На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как создать прямое соединение
Есть сервер и два клиента. Клиент 1 подключается к серверу по порту 1, клиент 2 также подключается к этому порту. Сервер сообщает клиенту 1 что извне 10.1.1.2:52000, а клиент 2 10.3.4.2:54000. Клиент 2 получает данные соответственно, теперь они по идее должны разорвать соединение, один прикинуться сервером, а другой коннектиться, вообщем не совсем мне понятен алгоритм.
Цитата ter_nk_ @
вообщем не совсем мне понятен алгоритм.

Какое конкретное слово вам не понятно?
Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
Мне непонятно что делать дальше. Прервать соединение и например клиенту 1 создать сервер для прослушки на 192.168.1.10 порт 52000, но в сети извне видимым 10.1.1.2:52000 я все равно не буду.
ter_nk_
Я так понимаю, что речь о случае, когда оба клиента за NAT? Тогда в общем случае нет возможности исключить из схемы внешний прокси-узел и установить прямое соединение. Более того - если это возможно, то безопасность Вашей системы под большим вопросом...
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Цитата Akina @
ter_nk_
Я так понимаю, что речь о случае, когда оба клиента за NAT? Тогда в общем случае нет возможности исключить из схемы внешний прокси-узел и установить прямое соединение. Более того - если это возможно, то безопасность Вашей системы под большим вопросом...


Можно задействовать свой сервер или STUN, вот как раз и пытаюсь понять как это сделать на практике. А насчет безопасности вообще не проблема.
Цитата ter_nk_ @
Можно задействовать свой сервер ... пытаюсь понять как это сделать на практике.

Да чего тут понимать-то? клиенты общаются только с сервером, и всё.
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Цитата Akina @
Да чего тут понимать-то? клиенты общаются только с сервером, и всё.


p2p соединение сервер использует для соединения, дальше данные идут не через сервер.
Сообщение отредактировано: ter_nk_ -
ter_nk_
Ну если у тебя NAT-ы настолько тупы, причём оба (хотя, как не прискорбно признавать - обычное дело) - посмотри вот это, ну и вообще вот это.
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
NATы обычные, я тупой. Что мне дает мой внешний IP с портом тому клиенту, который будет сервером? Я же не могу создать это внешнее соединение с этим IP и не понимаю как оно например роутером пробрасываться будет.
Цитата ter_nk_ @
Что мне дает мой внешний IP с портом тому клиенту, который будет сервером? Я же не могу создать это внешнее соединение с этим IP

По-моему, там всё вполне вменяемо разъяснено.

Тебе для установления соединения нужны только адрес и порт назначения. Их тебе сообщили. Чтобы и собеседник установил соединение, ему нужны твои адрес и порт. Т.е. ты должен не только обратиться по тому адресу и порту, который тебе передал соединяющий вас сервер, но и сделать это с того порта, с которого общался с этим сервером. И при этом ты должен игнорировать тот факт, что требуется процесс установления соединения. Ну и всё, собсно...
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Ни tcp ни udp у меня не проходит через NAT. На внешнем сервере у tcp порт другой, у udp он такой же. Локально работает, извне нет.
ter_nk_
0. Есть то что нельзя рассказывать см http://fstec.ru/component/attachments/download/289 стр 37
1. Вам хорошенько надо изучить процесс установки соединения. Для UDP и TCP он отличает.
В. Олифер, Н. Олифер Компьютерные сети. Принципы, технологии, протоколы Учебник для вузов
2. Изучить разные NAT http://www.cyberguru.ru/networks/network-s...at-details.html
3. У вас 2 клиента 4 вида NAT и того вы должны предусмотреть 16 веток алгоритма
Вот тут кейсы https://en.wikipedia.org/wiki/STUN
4. Исходники торрента https://github.com/arvidn/libtorrent/blob/m..._connection.cpp
5. Если посмотреть исходники, то установка соединения носит случайный характер. Надо посылать не 1 пакет, а целую кучу.
6. Есть такие случае когда установка p2p соединения невозможно и тогда передача идёт через публичные сервера.

"дополнительные матерьялы"
teamviewer работает через сервер.
TCP - всегда двунаправленный протокол.
UDP - хотя и однонаправленный, но все межсетевые экраны создают правила для так называемого возвратного канал. Он временный.

Можно вежливо попросить роутер открыть порт.
https://ru.wikipedia.org/wiki/UPnP
https://en.wikipedia.org/wiki/Portmap
https://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol
и др.

Если это не помогает, то начинают пробовать пробить защиту.
Возвратный канал UDP и TCP имеют уязвимости если сервер с белым IP будет генерировать исходящие пакеты с подменённым Dest.IP то он сможет выдавать себя за пиры закрытые натом, но при этом для второго пира и его защиты всё будет выглядеть так как будто первые пиры находятся в глобальной сети. После установления связи общение продолжается без сервера. Сервер с белым IP участвует только на этапе соединения.

Torrent и Skype - это сети в них много компьютеров и всегда найдётся такой пир который не закрыт защитой. Вот он и будет выступать сервером.

Подробнее про пробивание защиты можно прочитать в протоколе STUN.
http://www.cyberguru.ru/networks/network-s...at-details.html
https://en.wikipedia.org/wiki/UDP_hole_punching
http://www.brynosaurus.com/pub/net/p2pnat/
http://www.ds.ewi.tudelft.nl/reports/2010/PDS-2010-007.pdf

А вообще проще посмотреть исходники тех же торрентов
http://sourceforge.net/projects/delphibt/ - компонент для работы с BitTorrent
http://sourceforge.net/projects/torrenttorque/ - торрент-клиент на Delphi
http://sourceforge.net/projects/azureus/ - исходники Vuse (Azureus)
http://sourceforge.net/softwaremap/trove_l...sc&form_cat=265 - много чего полезного


Если пробить защиту не удаётся, то работа идет через сервера с белыми IP. А если в сети и их не оказывается тогда облом.
Веб-сокеты и прокси.
Сообщение отредактировано: Pavia -
Правильный обед должен состоять из 5 блюд приготовленных из 33 ингредиентов.
Ну нагрузил :) разбираться и разбираться.

Добавлено
Цитата Pavia @
0. Есть то что нельзя рассказывать см http://fstec.ru/component/attachments/download/289 стр 37


Не понял, что тут нельзя рассказывать?
ter_nk_
На картинке же все нарисовано:
user posted image
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
Цитата ^D^ima @
На картинке же все нарисовано:


Не получается!
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1230 ]   [ 19 queries used ]   [ Generated: 17.10.17, 05:51 GMT ]