Как построить протокол поверх tcp?

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

Итак, как реализовать собственный протокол? Все ли что об определенных командах what можно отправить, а how ресивер реагирует на разные команды? Скажем, я определяю некоторые пользовательские команды с помощью xml, отправляя их по каналу/воздуху, используя tcp, и там есть какая-то логика, которая реагирует на отправленную команду и отвечает. Можно ли реализовать "протокол"? Это даже называется "протоколом"?

С уважением.

Ответ 1

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

В основном это касается определения команд и полезных нагрузок. Вы должны выполнить сериализацию своего командного пакета, прежде чем вводить их через TCP. Endianness - общая ошибка, если вы упаковываете пакет в двоичном формате. XML и JSON - это обычные текстовые форматы обмена данными. Лично я про-JSON.

Обратитесь к BSON, MessagePack или protobuf для двоичной сериализации. Они упаковывают данные напечатанные в двоичные файлы, поэтому они имеют лучшую проверку типов, чем сериализацию на основе текста и более компактную по размеру. Они также обрабатывают конечное преобразование, управление версиями пакетов и предоставляют драйверы/привязки на разных языках. Сервер и клиент могли быть написаны на разных языках.

EDIT: добавлены образцы RFC

Увидев комментарий Росса Паттерсона, я также рекомендую прочитать RFC для ссылок на определение протокола. RTSP и HTTP - это текстовые протоколы, RTP и медиаформаты (MPEG4 AV, H-264) являются двоичными протоколами.

EDIT:

Демистификация протоколов и производительность сериализации с Тоддом Монтгомери