Отправить файл пользователю за NAT-маршрутизатором

Мне нужно отправить файл пользователю за маршрутизатором. Я знаю, что могу сделать это с TCP-соединением, если он включит переадресацию портов на своем маршрутизаторе. Я хочу избежать этого, чтобы упростить использование моего приложения для моих пользователей. Итак, я пытался сделать tcp перфорацию, и это почти невозможно. Мне удалось сделать udp puch Holing.

если вы уже знаете, что такое перфорация udp, то можете пропустить эту часть:

Итак, что я сделал, чтобы установить соединение между двумя пользователями, которые оказались за маршрутизатором. пользователь 1 разговаривает с сервером, имеющим IP-адрес WAN, по протоколу udp. пользователь 2 также делает то же самое. Итак, теперь сервер знает удаленную конечную точку каждого пользователя. теперь сервер отправляет пользователю 2 информацию о пользователе 1. сервер уведомляет пользователя 1 о том, что пользователь 2 получил информацию. Затем пользователь 2 отправляет пакеты на IP-адрес маршрутизатора пользователя 1. Пакеты, полученные этим маршрутизатором, перенаправляются пользователю 1, поскольку они поступают с порта, указанного сервером. поэтому знайте, что все пакеты, которые пользователь 2 отправляет на маршрутизатор пользователя 1, попадут к пользователю 1, если они будут отправлены через порт, указанный сервером. когда пакеты прибывают к пользователю 1, эти пакеты прибывают с информацией о пользователе 2. Пользователь 1 теперь также знает, как отправлять данные двум пользователям 2.

Итак, теперь я могу отправлять данные между двумя пользователями, которые находятся за разными маршрутизаторами. Причина, по которой я использовал протокол udp, заключалась в том, что он похож на tcp при использовании c#. Я пытался сделать это с помощью tcp, но я просто не могу заставить его работать. это приложение, которое я создаю, написано на С#, и все отлично работает, когда пользователи находятся за одним и тем же маршрутизатором. но знаю, что я хочу расширить функциональность.

Итак, теперь я, наконец, сделал свой первый шаг по подключению двух клиентов за другим физ. единственная проблема в том, что мне удалось это сделать только с помощью протокола upd. Я читал, что upd не гарантирует доставку данных, а также что данные могут быть получены в другом порядке.

Может быть, я могу создать алгоритм, чтобы иметь возможность отправлять данные через udp, зная, что данные не будут потеряны.

другой альтернативой является использование другого протокола, такого как ftp, bittorrent... и т. д. Однако я не знаю, можно ли будет сделать перфорацию ftp.

Короче говоря, я просто хочу, чтобы два одноранговых узла, находящихся за разными маршрутизаторами, могли общаться с помощью сервера. Я не хочу общаться через рейлинг (соединение идет от клиента А к серверу к клиенту Б), потому что иногда им сложно управлять и дорого поддерживать, когда его использует много пользователей. Возможно, мне следует использовать другой протокол, такой как библиотека BitTorrent, но я этого не сделал, потому что не нашел в Интернете хорошего примера, показывающего, как использовать эту библиотеку.



person Tono Nam    schedule 07.09.2011    source источник
comment
да, udp мне удалось сделать, но tcp я работал над этим несколько дней. На самом деле я разместил здесь вопрос о том, как сделать перфорацию tcp: c-udp-punch-hole-into-firewall" title="перенаправлять трафик с порта x на компьютер b с помощью c udp, пробивающего отверстие в брандмауэре"> stackoverflow.com/questions/7225150/   -  person Tono Nam    schedule 07.09.2011


Ответы (2)


http://nutss.gforge.cis.cornell.edu/stunt.php

Звонит STUNT.

Простой обход UDP через NAT и TCP (STUNT), который расширяет STUN за счет включения функций TCP, представляет собой облегченный протокол, который позволяет приложениям, работающим за NAT, определять внешние IP-адреса и свойства привязки портов, правила фильтрации пакетов и различные тайм-ауты, связанные с TCP-соединения через NAT. Знание этих параметров позволяет приложениям устанавливать сеансы TCP между двумя хостами с NAT. В результате P2P и другие приложения могут работать через существующую инфраструктуру NAT без ущерба для преимуществ TCP.

person Daniel Mošmondor    schedule 07.09.2011
comment
спасибо @ Даниэль Мосомондор! Я скачал исходный код SharpStunt c#, расположенный по адресу: sharpstunt.codeplex.com/SourceControl/list/ changesets# Думаю, это то, что мне нужно. Я только что посмотрел на решение, и оно немного сложное. короткий пример мне очень поможет. Попробую пока разобраться. еще раз спасибо. - person Tono Nam; 07.09.2011

UPnP также может быть вариантом.

person vines    schedule 07.09.2011