Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.44.108] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Есть сервер и два клиента. Клиент 1 подключается к серверу по порту 1, клиент 2 также подключается к этому порту. Сервер сообщает клиенту 1 что извне 10.1.1.2:52000, а клиент 2 10.3.4.2:54000. Клиент 2 получает данные соответственно, теперь они по идее должны разорвать соединение, один прикинуться сервером, а другой коннектиться, вообщем не совсем мне понятен алгоритм.
|
Сообщ.
#2
,
|
|
|
Цитата ter_nk_ @ вообщем не совсем мне понятен алгоритм. Какое конкретное слово вам не понятно? |
Сообщ.
#3
,
|
|
|
Мне непонятно что делать дальше. Прервать соединение и например клиенту 1 создать сервер для прослушки на 192.168.1.10 порт 52000, но в сети извне видимым 10.1.1.2:52000 я все равно не буду.
|
Сообщ.
#4
,
|
|
|
ter_nk_
Я так понимаю, что речь о случае, когда оба клиента за NAT? Тогда в общем случае нет возможности исключить из схемы внешний прокси-узел и установить прямое соединение. Более того - если это возможно, то безопасность Вашей системы под большим вопросом... |
Сообщ.
#5
,
|
|
|
Цитата Akina @ ter_nk_ Я так понимаю, что речь о случае, когда оба клиента за NAT? Тогда в общем случае нет возможности исключить из схемы внешний прокси-узел и установить прямое соединение. Более того - если это возможно, то безопасность Вашей системы под большим вопросом... Можно задействовать свой сервер или STUN, вот как раз и пытаюсь понять как это сделать на практике. А насчет безопасности вообще не проблема. |
Сообщ.
#6
,
|
|
|
Цитата ter_nk_ @ Можно задействовать свой сервер ... пытаюсь понять как это сделать на практике. Да чего тут понимать-то? клиенты общаются только с сервером, и всё. |
Сообщ.
#7
,
|
|
|
Цитата Akina @ Да чего тут понимать-то? клиенты общаются только с сервером, и всё. p2p соединение сервер использует для соединения, дальше данные идут не через сервер. |
Сообщ.
#8
,
|
|
|
Сообщ.
#9
,
|
|
|
NATы обычные, я тупой. Что мне дает мой внешний IP с портом тому клиенту, который будет сервером? Я же не могу создать это внешнее соединение с этим IP и не понимаю как оно например роутером пробрасываться будет.
|
Сообщ.
#10
,
|
|
|
Цитата ter_nk_ @ Что мне дает мой внешний IP с портом тому клиенту, который будет сервером? Я же не могу создать это внешнее соединение с этим IP По-моему, там всё вполне вменяемо разъяснено. Тебе для установления соединения нужны только адрес и порт назначения. Их тебе сообщили. Чтобы и собеседник установил соединение, ему нужны твои адрес и порт. Т.е. ты должен не только обратиться по тому адресу и порту, который тебе передал соединяющий вас сервер, но и сделать это с того порта, с которого общался с этим сервером. И при этом ты должен игнорировать тот факт, что требуется процесс установления соединения. Ну и всё, собсно... |
Сообщ.
#11
,
|
|
|
Ни tcp ни udp у меня не проходит через NAT. На внешнем сервере у tcp порт другой, у udp он такой же. Локально работает, извне нет.
|
Сообщ.
#12
,
|
|
|
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. А если в сети и их не оказывается тогда облом. Веб-сокеты и прокси. |
Сообщ.
#13
,
|
|
|
Ну нагрузил разбираться и разбираться.
Добавлено Цитата Pavia @ 0. Есть то что нельзя рассказывать см http://fstec.ru/component/attachments/download/289 стр 37 Не понял, что тут нельзя рассказывать? |
Сообщ.
#14
,
|
|
|
ter_nk_
На картинке же все нарисовано: |
Сообщ.
#15
,
|
|
|
Цитата ^D^ima @ На картинке же все нарисовано: Не получается! |