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

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


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

              Да чего тут понимать-то? клиенты общаются только с сервером, и всё.
                Цитата Akina @
                Да чего тут понимать-то? клиенты общаются только с сервером, и всё.


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

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

                      Тебе для установления соединения нужны только адрес и порт назначения. Их тебе сообщили. Чтобы и собеседник установил соединение, ему нужны твои адрес и порт. Т.е. ты должен не только обратиться по тому адресу и порту, который тебе передал соединяющий вас сервер, но и сделать это с того порта, с которого общался с этим сервером. И при этом ты должен игнорировать тот факт, что требуется процесс установления соединения. Ну и всё, собсно...
                        Ни 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 -
                            Ну нагрузил :) разбираться и разбираться.

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


                            Не понял, что тут нельзя рассказывать?
                              ter_nk_
                              На картинке же все нарисовано:
                              user posted image
                                Цитата ^D^ima @
                                На картинке же все нарисовано:


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


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0430 ]   [ 16 queries used ]   [ Generated: 28.03.24, 16:08 GMT ]