Для текущего проекта понадобилась следующая функциональность. Имеется файловый сервер. Сервер может располагаться за NAT'ом. Каждый клиент, подключившийся к серверу, может иметь доступ только к одному заданному файлу. То есть каждый клиент работает только со своим файлом. Про файлы других клиентов он знать не должен. Набор операций для работы с файлом — это ReadFile, WriteFile и SetFilePointer. Шифрования трафика не требуется, но желательно, чтобы доступ к файлам осуществлялся по паролю/ключу.
Есть ли в природе известный протокол, который может предоставить требуемую функциональность или хотя бы часть её?
D>Для текущего проекта понадобилась следующая функциональность. Имеется файловый сервер. Сервер может располагаться за NAT'ом. Каждый клиент, подключившийся к серверу, может иметь доступ только к одному заданному файлу. То есть каждый клиент работает только со своим файлом. Про файлы других клиентов он знать не должен. Набор операций для работы с файлом — это ReadFile, WriteFile и SetFilePointer. Шифрования трафика не требуется, но желательно, чтобы доступ к файлам осуществлялся по паролю/ключу.
D>Есть ли в природе известный протокол, который может предоставить требуемую функциональность или хотя бы часть её?
HTTPS, SFTP; либо IPSec/VPN + любой протокол доступа к файлам: FTP, NFS, Samba (Windows file sharing). Во всех есть средства ограничинения доступа.
T>HTTPS, SFTP; либо IPSec/VPN + любой протокол доступа к файлам: FTP, NFS, Samba (Windows file sharing). Во всех есть средства ограничинения доступа.
Обязательное требование, чтобы протокол базировался на UDP.
Re: Файловый протокол на основе UDP
От:
Аноним
Дата:
29.11.11 18:33
Оценка:
Здравствуйте, dimb82, Вы писали:
D>Есть ли в природе известный протокол, который может предоставить требуемую функциональность или хотя бы часть её?
нет такого протокола
udp при условиях когда оба учасника за натом — не пробивается, только при условии внешнего какого нибудь STUN сервера
при условии когда один за натом, а другой нет
то проболем нет, банальный sendto/recvfrom + чуть чуть подумать
вообще погуглите форум gamedev, для игровой индустрии всякие велосипеды уже придуманы в виде SDK
наверняка есть какой нибудь велосипед и для файловой передачи
но вообще советую сменить udp на tcp, тогда проблемы с NAT пропадут
да и что там того кода? на 10 строчек
Здравствуйте, dimb82, Вы писали:
T>>HTTPS, SFTP; либо IPSec/VPN + любой протокол доступа к файлам: FTP, NFS, Samba (Windows file sharing). Во всех есть средства ограничинения доступа.
D>Обязательное требование, чтобы протокол базировался на UDP.
Ну и используй, как написали, IPSec/VPN + whatever. VPN поможет проложить поверх UDP туннель, через который можно уже передавать трафик с использованием любого удобного протокола.
Здравствуйте, dimb82, Вы писали:
T>>HTTPS, SFTP; либо IPSec/VPN + любой протокол доступа к файлам: FTP, NFS, Samba (Windows file sharing). Во всех есть средства ограничинения доступа.
D>Обязательное требование, чтобы протокол базировался на UDP.
Здравствуйте, dimb82, Вы писали:
D>Для текущего проекта понадобилась следующая функциональность. Имеется файловый сервер. Сервер может располагаться за NAT'ом. Каждый клиент, подключившийся к серверу, может иметь доступ только к одному заданному файлу. То есть каждый клиент работает только со своим файлом. Про файлы других клиентов он знать не должен. Набор операций для работы с файлом — это ReadFile, WriteFile и SetFilePointer. Шифрования трафика не требуется, но желательно, чтобы доступ к файлам осуществлялся по паролю/ключу.
Снаружи за NAT без помощи вспомогательного сервера не придешь. Чего этот сервер делает — пропускает через себя весь траффик или помогает проходить NAT — это отдельный вопрос.
Планируется использовать отдельный сервер и NAT Traversal. Но это будет конечная фаза проекта, и, возможно, эту часть буду делать не я. От меня пока требуется реализовать требуемую функциональность на базе UDP безо всех сетевых наворотов, связанных с NAT.
В конечном виде должно быть примерно как у TeamViewer. То есть запускаем нашу программу на одном компьютере. Получаем адрес вида 999 999 999 и пароль. Имея этот адрес и пароль, другой компьютер подключается к нам и работает с конкретным файлом (пишет/читает).
D>>Для текущего проекта понадобилась следующая функциональность. Имеется файловый сервер. Сервер может располагаться за NAT'ом. Каждый клиент, подключившийся к серверу, может иметь доступ только к одному заданному файлу. То есть каждый клиент работает только со своим файлом. Про файлы других клиентов он знать не должен. Набор операций для работы с файлом — это ReadFile, WriteFile и SetFilePointer. Шифрования трафика не требуется, но желательно, чтобы доступ к файлам осуществлялся по паролю/ключу.
Pzz>Снаружи за NAT без помощи вспомогательного сервера не придешь. Чего этот сервер делает — пропускает через себя весь траффик или помогает проходить NAT — это отдельный вопрос.
D>>Обязательное требование, чтобы протокол базировался на UDP.
Pzz>Откуда такое требование?
Требование в техническом задание. В дальнейшем для обхода NAT будет использоваться NAT Traversal. Но, скорее всего, сетевые навороты для работы с NAT, буду реализовывать не я, и будет это в самом конце проекта. От меня пока требуется реализовать требуемую функциональность на базе UDP без учёта проблем, связанных с NAT.
D>Есть ли в природе известный протокол, который может предоставить требуемую функциональность или хотя бы часть её?
интересный вопрос. еще бы и требовая к. потому как навскидку решение -- пробить тоннель на tcp over udp (есть готовые имплементации) и натянуть на него любой из уже обозначенных протоколов. самому писать ничего не потребуется. оверхид, конечно, будет, но не такой чтобы слишком. получается что в IP кладется UDP, а в него TCP. из плюсов можно отметить прозрачность тоннеля и надежность (т.к. это все-таки TCP, только завернутый в UDP, то доставка гарантируется и проблема потерь пакетов вышестоящий протокол не парит)
есть так же ftp на udp (готовые) без TCP-тоннелей.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, dimb82, Вы писали:
D>Требование в техническом задание. В дальнейшем для обхода NAT будет использоваться NAT Traversal. Но, скорее всего, сетевые навороты для работы с NAT, буду реализовывать не я, и будет это в самом конце проекта. От меня пока требуется реализовать требуемую функциональность на базе UDP без учёта проблем, связанных с NAT.
Сделаите IP tunnelling over UDP, а поверх него гоняйте обычные протоколы. Иначе вы потонете. Вы не знаете, во что ввязываетесь
Здравствуйте, dimb82, Вы писали:
D>В конечном виде должно быть примерно как у TeamViewer. То есть запускаем нашу программу на одном компьютере. Получаем адрес вида 999 999 999 и пароль. Имея этот адрес и пароль, другой компьютер подключается к нам и работает с конкретным файлом (пишет/читает).
Pzz>Сделаите IP tunnelling over UDP, а поверх него гоняйте обычные протоколы. Иначе вы потонете. Вы не знаете, во что ввязываетесь
Большое спасибо за совет. Я на самом деле не знаю, во что ввязываюсь Поэтому и спрашиваю совета у специалистов, чтобы потом с нуля всё не переделывать.
Это не IP адрес. В TeamViewer это называется ID. Имея пару ID/пароль можно подсоединиться к другому компьютеру. У нас должно быть что-то вроде этого.
Сервер TeamViewer преобразует этот ID уже в реальный адрес.
Здравствуйте, dimb82, Вы писали:
Pzz>>Сделаите IP tunnelling over UDP, а поверх него гоняйте обычные протоколы. Иначе вы потонете. Вы не знаете, во что ввязываетесь
D>Большое спасибо за совет. Я на самом деле не знаю, во что ввязываюсь Поэтому и спрашиваю совета у специалистов, чтобы потом с нуля всё не переделывать.
На самом деле, вы замучаетесь делать NAT traversal, это весьма нетривиально и содержит много тонкостей и подводных камней.