|
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 6
|
|
Создание протокола прикладного уровня08.09.2013, 01:26. Показов 15810. Ответов 17
Метки нет (Все метки)
Доброго времени суток, форумчане!
Недавно решил поставить себе цель написать собственный протокол прикладного уровня. Протокол хочу использовать для передачи данных через сеть(как медиафайлы, так и какие либо команды). Имею примерное представление того, как будет выглядеть отсылаемый пакет данных, но, к сожалению, не знаю какой язык использовать и как, примерно, это всё реализуется. Буду при знателен, если вы меня подталкнёте в правильное русло.
0
|
|
| 08.09.2013, 01:26 | |
|
Ответы с готовыми решениями:
17
Создание сетевого протокола в игровом клубе Нужен совет по протоколам прикладного уровня Создание программы-протокола |
|
|
|
| 08.09.2013, 13:55 | |
|
...язык по сути не важен. Начните с изучения простых и известных протоколов поверх TCP/IP. Рекомендую почитать http://cnp3book.info.ucl.ac.be/
0
|
|
|
|
||||||||||||||||||||||
| 11.09.2013, 11:58 | ||||||||||||||||||||||
|
Язык по сути не важен. Главное чтобы в нем была возможность работы с сетью (или хотя бы доступ к API OS).
Думаю что стоит начать с изучения уже имеющихся, например, протокола передачи данных в торрент-сети. Он не сложный (меньше 10 команд) и позволяет передавать как данные (файлы), так и служебные сообщения. Описание протокола
Главное понять саму суть устройства подобных протоколов. Через сеть вы передаете и принимаете массив (поток) данных и в них должны быть специальные метки чтобы можно было этот массив разобрать на приемной стороне. Среди таких моток должны быть как минимум, команда (тип данных) и длина пакета с данными. Таким образом, при приеме массива данных из сети, будет информация, во первых о типе пакета, необходимая для его правильной обработки, а во вторых, длина пакета, необходимая чтобы точно знать каков его размер. Это можно описать примерно такой структурой (ЯП в данном случае не имеет значения).
Если протокол реализован поверх UDP, или другого низкоуровневого протокола, то не помешает добавить так же поле с контрольной суммой пакета, чтобы удостоверится в целостности данных. Есть еще один момент, на который необходимо обратить внимание. Пакет может быть принят не за один раз (вызов принимающей функции из сети) или наоборот, за раз может быть принято несколько пакетов, причем последний из них может быть принят не полностью. Поэтому так же необходим промежуточный буфер, в который будут записываться все данные, принимаемые из сети, а затем, по мере получения целых пакетов, уже обрабатываться. Реализация в коде (сервер и клиент) всего вышенаписанного. Для примера, реализованы две команды:
Код сервера и клиента
Сервер.
3
|
||||||||||||||||||||||
|
10 / 10 / 0
Регистрация: 16.01.2013
Сообщений: 37
|
|
| 15.09.2013, 04:48 | |
|
просто создайте UDP\TCP сокет на любом ЯП и парсите слушаемый\отправляемый буфер как строку
0
|
|
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
| 15.09.2013, 05:00 | |
|
решу поправить, не как строку а как массив байт, поток байт, т. к. в С/C++ строки оканчиваются нулем, а после этого нуля также могут идти данные
1
|
|
|
10 / 10 / 0
Регистрация: 16.01.2013
Сообщений: 37
|
||
| 15.09.2013, 05:29 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 6
|
|
| 26.10.2013, 15:13 [ТС] | |
|
Спасибо большое за ваши подсказки! К сожалению, за данный проект смог взяться совсем недавно. Как язык программирования был выбран Python 3.3. Как думаете, есть ли смысл сделать протокол, аналогичный Telnet, а для передачи данных использовать аналог TFTP? Так сказать, сделать некий гибрид. Или же лучше присмотреться к другим протоколам передачи данных?
0
|
|
|
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
|
|
| 16.02.2019, 13:34 | |
|
locm, здравствуйте
![]() После Вашего сообщения появилась парочка вопросов =) Ответьте, если можете. 1. 1) Есть реализация для протокола прикладного уровня, работающего поверх TCP/UDP (Ваш пример) 2) Есть программа, которая работает на TCP/UDP протоколе. (например клиент-сервер UDP) Чем они отличаются, с точки зрения программирования (программиста)? Насколько я понимаю, в первом случае мы имеем дело с передаваемой структурированной информацией (как в Вашем примере), а во втором - нет. 2.Где в Вашем коде (клиент/сервер) участки, которые соответствуют "описанию протокола" (служебным сообщениям, которые описаны - keep-alive, choke и т.д.)?
0
|
|
|
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
|
|
| 15.05.2019, 20:16 | |
|
locm, здравствуйте.
У меня к Вам такой вопрос - у Вас в коде сервера и клиента есть функции для работы с сетью, т.е. по сути Ваш протокол занимается передачей данных по сети? (Вопрос такой возник, т.к. вот тут - http://www.netpatch.ru/arch/mi... lava1.html , сказано, что Существует еще одно отличие между прикладным уровнем и тремя нижними уровнями. Прикладной уровень обычно является приложением и взаимодействует с пользователем, а не занимается передачей данных по сети. Три нижних уровня ничего не знают о работающих над ними приложениях, однако отвечают за все детали коммуникаций.)
0
|
|
|
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
|
|
| 16.05.2019, 23:00 | |
|
locm,
Ок, я видимо не совсем корректно сформулировал вопрос. Возможно ли создать протокол прикладного уровня, но так, чтобы за передачу данных по сети отвечала реализация протокола TCP, встроенная в ядро ОС?
0
|
|
|
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
|
|
| 17.05.2019, 07:47 | |
|
mikello, а оно сейчас не так разве? На основе TCP вообще нет никаких прикладных протоколов типа HTTP и FTP?
1
|
|
|
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
|
|
| 17.05.2019, 14:30 | |
|
Usaga, именно так. Но непонятно другое - в протоколе HTTP используются функции для работы с сетью (как в примере выше) или там по-другому происходит обращение к протоколу TCP ?
0
|
|
|
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
|
|
| 17.05.2019, 15:55 | |
|
mikello, работа с TCP всегда происходит одним и тем же образом: последовательное подсовывание данных на отправку и такое же чтение.
Добавлено через 7 минут Как примерно это происходит вы можете посмотреть в этой статье: https://m.habr.com/ru/company/... og/423105/ Там пример на С#, но смысл тот-же на любом языке с незначительными отличиями.
1
|
|
|
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
|
||
| 17.01.2020, 23:44 | ||
|
locm, Здравствуйте!=)
Недавно мне пришлось столкнуться с более подробным изучением работы протоколов TCP/IP. В связи с некоторыми моментами вспомнил Ваш пост (https://www.cyberforum.ru/post5041232.html), а именно:
0
|
||
|
57 / 48 / 5
Регистрация: 19.11.2017
Сообщений: 857
|
||
| 17.01.2020, 23:44 | ||
|
locm, Здравствуйте!=)
Недавно мне пришлось столкнуться с более подробным изучением работы протоколов TCP/IP. В связи с некоторыми моментами вспомнил Ваш пост (https://www.cyberforum.ru/post5041232.html), а именно:
0
|
||
|
|
|
| 18.01.2020, 02:31 | |
|
TCP это протокол с гарантированной доставкой данных. В данном случае реализован другой протокол поверх TCP.
Даже в этом случае возможна потеря данных, скажем было прерывание по таймауту (вовремя не пришли данные) или соединение разорвано.
1
|
|
| 18.01.2020, 02:31 | |
|
Помогаю со студенческими работами здесь
18
Создание 2д уровня Создание игрового уровня Создание игрового уровня Создание сателлитов на доменах 3-го уровня Создание домена 2-го уровня в IIS Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|