2010-04-04 8 views
3

Я ищу проект протокола для клиент-серверного приложения и нуждаюсь в некоторых ссылках на некоторые ресурсы, которые могут мне помочь.Вопросы по протоколу/пакетному дизайну

Большая часть: я пытаюсь создать свой собственный «пакетный» формат, чтобы я мог минимизировать количество отправляемой информации. Я ищу некоторые ресурсы для анализа их протокола, но кажется, что у некоторых полностью отсутствует дизайн пакетов, например SMTP (который просто отправляет строки, завершенные CLRF). Каковы преимущества/недостатки использования такой системы, как SMTP, в системе, использующей специально созданный пакет? Нельзя ли использовать SMTP всего пару байт, чтобы охватить все команды через битовые флаги и сохранить пропускную способность/пространство?

Просто пытаюсь обойти все это.

ответ

1

Правда, но SMTP не было особенно оптимизирована для пространства, ни это пакетный протокол. Он находится поверх TCP и использует потоковые функции TCP. Вам нужно решить, что желательно в вашем протоколе: чувствительность к производительности? задержка? пропускная способность?

Нужно ли работать как суперпользователь? Если нет, вы, вероятно, захотите использовать UDP или TCP.

Вам нужны гарантии при доставке? Если это так, TCP, вероятно, является вашим лучшим вариантом, если только вы не имеете дело с довольно экстремальными проблемами производительности или размера.

В настоящее время несколько протоколов разрабатывают отдельные пакеты, хотя многие из них отправляют очень конкретные структуры данных через провод с использованием TCP или, реже, UDP.

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

+0

Я буду посылать массовые объемы данных, и я предполагаю, что я пытаюсь микро-оптимизировать, прежде чем это станет проблемой. Думаю, мне придется сложить структуру данных поверх TCP. Но, допустим, я хотел создать собственный протокол на основе пакетов, с чего бы начать? И как бы я начал реализовывать его на C++? – cam

+0

Вы должны начать с создания структуры. Тем не менее, это очень сложная задача, и вам нужно хорошо знать внутренние IP-адреса, если вы собираетесь их инкапсулировать, так как есть много случаев сбоя, с которыми вам нужно иметь дело: пакеты могут быть потеряны, поврежден, фрагментирован или доставлен не по порядку. Вы просто разрабатываете алгоритм для решения всего этого, и вы настроены;) – WhirlWind

+0

UDP заботится о проблемах с целостностью данных для вас, но вам все равно придется иметь дело с другими вещами. Чтобы реализовать это, взгляните на слой сокета. У У. Ричарда Стивенса есть несколько книг, которые могут помочь – WhirlWind

0

SMTP, HTTP и другие протоколы, основанные на TCP, не относятся к дизайну пакетов, поскольку они основаны на потоках. Поэтому имеет смысл говорить о разработке протокола.

А почему использовать протоколы на основе текста против бинарных протоколов ...

читаемости протокола по пакетным нюхают программы как Wireshark очень полезно.

Также очень полезно иметь возможность просто подключиться к вашему telnet и поддерживать связь с сервером, указав простой текст.

Также с протоколом, аналогичным HTTP, фактический ресурс обычно является полезной нагрузкой связи, ресурс может быть в двоичном или любом другом указанном формате. Так что иметь только заголовки и статус в обычном тексте - это не плохо.

0
  • TCP - это протокол , основанный на протоколе, а не на основе пакетов.
  • Использование текст с линиями делает специальную отладку намного проще
  • Использования текст с линиями позволяет осуществлять свой протокол с телнетом
1

Прежде всего, собираетесь ли вы реализовать расширенный транспортный протокол (например, RTP поверх UDP) или протокол приложения (например, HTTP/SMTP)?

Есть несколько вещей, которые вы должны думать о том, в обеих случаях, касающихся ваш дизайн протокола или требования вашего приложения: потока на основе или на основе пакетной коммутации, однонаправленных/двунаправленный, отслеживания состояния и sessionful или stateles, надежные или наилучшие усилия, требования к срокам, контроль потока/перегрузки, безопасный или простой.

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

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