как написать (реализовать) сетевой протокол прикладного уровня - PullRequest
5 голосов
/ 29 декабря 2010

Я хочу написать (реализовать) сетевой протокол прикладного уровня выше TCP. Можете ли вы сказать мне, как начать делать это? Любой онлайн-учебник также будет полезен ребята, мне нужно см учебник по реализации тоже. Я новичок в этом, и у меня тоже меньше времени :( RFC больше о правилах

Ответы [ 4 ]

7 голосов
/ 29 декабря 2010

Начните с чтения стандарта для протокола SMTP . Это (изначально) очень простой протокол без каких-либо приложенных строк и не вводящих в заблуждение или поддельных утверждений. HTTP и FTP более сложны (для начинающих), так как они более многофункциональны, нелинейны (во многих отношениях) и т. Д.

Upd: я поставил ссылку на оригинальный RFC 821, который сейчас устарел. Тем не менее, он намного меньше и его легче читать, чем самый последний (и действительный) RFC для SMTP.

1 голос
/ 29 декабря 2010

Лучшее решение - следить за текущими решениями, такими как torrent, ftp, http. Это должно дать вам немного знаний. Тогда аннулированный протокол будет зависеть от вашей фантазии.

0 голосов
/ 06 сентября 2016

Разработка собственного протокола - дело не простое. Однако его создание поверх TCP / IP облегчает задачу. Вы указали, что RFC - это правила протокола, и вы правы. Тем не менее, как правило, это и есть протокол: набор правил и соглашений о том, как что-то сделать. Прелесть здесь в том, что вы можете указать свои собственные правила. Некоторые из вещей, которые вы должны учитывать, это тип (ы) данных, которые будут отправлены, длина каждого куска и состояние (если есть). HTTP, например, это протокол без сохранения состояния с заголовком, который определяет запрос или результат, и полезной нагрузкой, определяющей отправляемые данные, которые могут быть публикацией формы или страницей html.

Таким образом, вам нужно будет определить данные для отправки или получения, длину данных в байтах, которые могут быть определены типом данных или объемом ожидаемых данных. Если в вашем протоколе есть состояние - то есть что-то должно быть сначала отправлено и получено, прежде чем что-то еще - тогда вам нужно определить это состояние. Кроме того, это простое сетевое программирование (отправка и получение данных в вашем приложении).

Например, простой протокол мог бы иметь это:

Command 1 Byte
Length  4 Bytes
Data    Length Bytes

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

Этот ответ действительно помогает закрепить то, что я говорю. Надеюсь, это поможет! https://stackoverflow.com/a/11658296/2498017

0 голосов
/ 29 декабря 2010

Я бы предложил не делать этого в C. Есть намного более простые способы сделать это.Попробуйте взглянуть на: www.twistedmatrix.com и посмотреть на их веб-фреймворк для Python.Если вы можете написать C, вы, конечно, можете сделать Python без пота.Кроме того, Twisted берет на себя большую часть неприятностей, которые обычно связаны с сетевым программированием на языках более низкого уровня, таких как C.

...