Как написать протокол передачи данных?

Подскажите литературу? Таненбаума читал про разработку там ничего нет. И вобще в какую сторону копать пока мои знания ограничены wiki. На каком языке, я думаю про си. Его можно будет использовать в с++ если написан на си. Возможно я задаю глупый вопрос, пожалуйста не смейтесь я просто неправильно понял wiki.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
простой протокол
1) создаешь массив байтов и пишешь в него команду
2) 4байта размер пакета + 4байта ИД команды + (данные команды)
3) отправляешь в сокет и на другой стороне получаешь и разворачиваешь

4) Лучше всего сделать тулз для генерации кода сущностей команд (редактор команд)

Как формат данных, для начала используйте тип TLV (Type, Len, Value). По мере «расширения» перейдете на структуры, навесите комресию и криптографию.

Тип транспорта, используйте TCP. Когда начнете «упираться» в ограничение передачи, то рекомендую перейти на UDT (udt.sourceforge.net/) Для транспорта большого обьема данных — лучше всего.

Если TCP — тут еще нужно предусмотреть защиту от дураков DDOS, чтоб не задосили сервис макс. открытыми сокетами. Мне очень понравилось, как от этой напасти защищается ICQ, мыл.ру агент и пр. клиенты, заодно балансируя нагрузку, на протоколе OSCAR: есть предустановленный авторизационный хост / порт, в него приходит пакет от клиента с логином и паролем, либо его хэшем. Далее, если данные совпадают — авторизатор выплевывает ответ — вам, мол, на такой IP / порт, и закрывает сокет. А конкретно по такому IP / порту ждут именно тебя, и никого другого. Если кто другой — реджект. Если ошибка в учетной записи — реджект. Авторизоваться можно только один раз, на второй раз, при незакрытой сессии — реджект. Очень красивое решение.

пример может оказаться интересным
“Build your own cryptographically safe server/client protocol”

www.codeproject.com/...reProtocol.aspx

Единственная ниша где это целесообразно — custom mesh сети и p2p. Для остального берите из моря существующих протоколов, так как лучше придумать практически невозможно.

Заворачивайте бинарные данные в XML в секцию CDATA и не парьтесь :)

Посмотрите протокол OSCAR (тот, на котором работает аська), посмотрите протокол MRA (тот, на котором работает mail.ru агент) и вы увидите, что все уже изобрели до нас :)

Питання тре уточнити:
1) якi дані (бінарні, музика, текст....)?
2) яка швидкість, який об"єм, чи це має буде критичне для режиму роботи в реальному часі,

3) яке середовище для передачі (USB, Internet...)

Прикладной, 7 уровень.
1. файлы, сообщения, бинарные.
2. нет не критично, желательно. скорость до 10Гб.

3. интернет peer to peer

а що то буде, новий мультмедiа месенджер?
ось знайшов статтю, може буде корисна
www.rsdn.ru/...net/inetapi.xml

мульти месенджер, хочу закрепить прочитаный материал. за статью спасибо. я тоже нашел только непонял если я нехочу привязываться к модели osi могу я использовать?

osi не догма, а тільки одна із абстрактних моделей, яка описує функціонування в мережі.

еще вопрос, какие порты выбрать для месенджера? как выбирать? некоторые используют 80, 6881–6889 и 6969.

80 це зайнятий порт, бажано брати вільний і не зарезервований для якогось сервісу, так званий «динмічний»
en.wikipedia.org/...DP_port_numbers

en.wikipedia.org/...Ephemeral_ports

если я пишу на qt, как qt network будет взаимодействовать с моим протоколом?

Выпейте пивка, нафига оно Вам надо ? :)

Если книжка — то Стивенс — разработка сетевых приложений. Когдат была классика жанра (сейчас хз) Може Вас попустит :)

qt network

— по сути врапер для работы с сокетами. Покуете свои данные в структуры и через сеть .. Если Вас не попустит .. можете на Boost.Asio взглянуть ...

нет не критично, желательно. скорость до 10Гб.

Не смешно. Напишете о полученной скорости :)

Покуете свои данные в структуры и через сеть ..

Нужно их еще правильно сериализировать например что бы различать big/low endian и выравнивания, я бы поюзал thrift/protobuffer для этих целей.

выравнивание обычно вырубается.

big/low endian

Это только для кросплатформенности надо. В данном случае вроде как не актуально. Я думаю тут все равно дальше идей не дойдет ...

В Борландовском билдере были не сложные компоненты для работы с сетью. Быстро просто но типа не кошерно :)

Не смешно. Напишете о полученной скорости :)

точно мб

я непонимаю как пишут ftp, http и им подобные. на каком языке? где можно скачать исходники? тоже на boost.asio?


я непонимаю как пишут ftp, http и им подобные. на каком языке? где можно скачать исходники? тоже на boost.asio?
filezilla-project.org

httpd.apache.org/download.cgi

Порты официально занятые — вот эти: www.iana.org/...ort-numbers.xml

Ну и тут нужно учитывать, что все порты, которые не well-known (за диапазоном от 0 до 1024) потенциально не будут пропускаться через прокси, в целях безопасности (поэтому ж и используют для удаленного взаимодействия сеансово 80-й порт)

Підписатись на коментарі