Я хочу написать (реализовать) сетевой протокол уровня приложения выше TCP. Можете ли вы рассказать мне, как начать делать это? Любой онлайн-учебник также будет полезен ребятам, которым я тоже нужен. Я новичок в этом и не так много времени :( RFC - это больше о правилахКак написать (реализовать) Сетевой протокол прикладного уровня
ответ
Лучшее решение для просмотра текущих решений, таких как torrent, ftp, http. Оно должно дать вам знать. на ваше воображение
Начинать с чтения standard for SMTP protocol. Это (изначально) очень простой протокол без привязки строк и никаких запутывающих или ложных утверждений. HTTP и FTP более сложны (для начинающих), поскольку они более функциональны, (во многих аспектах) и т. д.
Обновление: Я поместил ссылку на исходный RFC 821, который теперь устарел, но он намного меньше и проще прочитайте, чем самый последний (и действительный) RFC для SMTP.
Я бы посоветовал не делать этого в C. Есть гораздо более простые способы сделать это. Попытайтесь взглянуть на: www.twistedmatrix.com и посмотреть на свою веб-инфраструктуру для Python. Если вы можете писать C, вы, безусловно, можете сделать Python без пота. Кроме того, скрученный заботится о большей части гадости, которая обычно связана с сетевым программированием на языках более низкого уровня, например C.
Проектирование вашего собственного протокола - дело не простое. Однако создание его поверх TCP/IP упрощает его работу. Вы указали, что RFC - это правила протокола, и вы правы. Однако, как правило, это протокол: набор правил и соглашений о том, как что-то делать. Красота здесь в том, что вы можете указать свои собственные правила. Некоторые из вещей, которые вам нужно рассмотреть, это тип (ы) передаваемых данных, длина каждой части и состояние (если есть). HTTP, например, представляет собой протокол без состояния с заголовком, который определяет запрос или результат, и полезную нагрузку, определяющую отправляемые данные, которые могут быть сообщением формы или html-страницей.
Таким образом, вам нужно будет определить передаваемые или полученные данные, длину данных в байтах, которые могут быть определены типом данных или ожидаемым количеством данных. Если в вашем протоколе есть состояние - то есть что-то должно быть сначала отправлено и получено до того, как что-то еще - то вам нужно определить это состояние. Помимо этого, это простое сетевое программирование (отправка и получение данных в вашем приложении).
Например, простой протокол может иметь это:
Command 1 Byte
Length 4 Bytes
Data Length Bytes
Первые два определить свой заголовок, который содержит метаданные о данных, которые другой конец должен быть в состоянии прочитать все. Последними были бы фактические данные. Команда, хотя и не обязательно, служит для того, чтобы показать, что вы можете заставить другую сторону выполнять определенное действие с данными в зависимости от полученного байта. Длины данных важны, потому что другой конец должен знать, когда он считывает все данные, прежде чем он сможет работать над ним.
Этот ответ действительно помогает укрепить то, что я говорю. Надеюсь, это поможет! https://stackoverflow.com/a/11658296/2498017
- 1. протокол прикладного уровня - разный размер пакетов
- 2. Максимальный размер прикладного уровня PDU
- 3. Поля заголовка протокола прикладного уровня в Java
- 4. Какой протокол прикладного уровня использует Google Goggles и Layar?
- 5. Протокол прикладного уровня на основе C#, альтернативный HTTP
- 6. Как написать модульный сетевой код?
- 7. Вопрос проектирования прикладного уровня OO
- 8. Как реализовать протокол
- 9. Как протестировать собственный сетевой протокол
- 10. Сетевой протокол многопользовательской игры
- 11. Протокол сетевой безопасности Kerberos
- 12. Как создать собственный протокол уровня транспорта?
- 13. Как реализовать сетевой модем
- 14. Моделирование проводного протокола, который позволяет отправлять объекты через HTTP, как протокол прикладного уровня
- 15. Как реализовать собственный протокол
- 16. Сетевой протокол TIPC в Linux
- 17. Передача сообщений с прикладного уровня на вид
- 18. Структуры сложного и прикладного уровня предприятия
- 19. пользовательский сетевой протокол для ядра linux
- 20. Сетевой протокол для многоадресной связи
- 21. Как реализовать многоцелевой протокол сокетов?
- 22. Не удается реализовать протокол
- 23. зарегистрирован как allowDefinition = 'MachineToApplication' за пределами прикладного уровня
- 24. Как реализовать протокол в целом с категорией?
- 25. Является ли svn сетевой протокол частью Черепахи?
- 26. Как TCP идентифицирует протокол уровня приложения?
- 27. Как написать спецификацию уровня обслуживания?
- 28. транспортный протокол в WCF
- 29. Как измерить производительность сети (как измерить сетевой протокол)
- 30. извлечение заголовка прикладного уровня из файла pcap в строковом режиме