2010-12-29 3 views
4

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

ответ

1

Лучшее решение для просмотра текущих решений, таких как torrent, ftp, http. Оно должно дать вам знать. на ваше воображение

6

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

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

0

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

0

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

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

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

Command 1 Byte 
Length 4 Bytes 
Data Length Bytes 

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

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

Смежные вопросы