Простой сервер необработанных сокетов на C/C++ в Linux

Я пытаюсь построить сеть Ethernet с необработанными сокетами. Я не могу использовать TCP/IP, UDP или любой другой протокол.

Это связано с тем, что он будет обмениваться данными с очень простым оборудованием, у которого не будет ресурсов для обработки всех различных уровней протокола. Моя сеть будет состоять из 1 хост-компьютера, который будет обмениваться данными с несколькими аппаратными средствами через коммутатор Ethernet. На данный момент я в основном просто хочу отправить простые пакеты на каждую часть оборудования и установить простой сервер, который я могу расширить. Моя система работает под управлением Linux, и сервер должен быть написан на C или C++.

Я пытался найти информацию о том, как использовать необработанные сокеты, но все всегда говорят не использовать их и не предоставляют никакой информации. У меня довольно сильный опыт программирования, но нет опыта работы с сетями. Может ли кто-нибудь предоставить какую-либо информацию о том, как начать работу или где можно найти соответствующий учебник?


person NerdPirate    schedule 25.09.2012    source источник
comment
Сетевые сокеты практически синонимичны протоколу IP. Даже если вы откажетесь от IP-протокола, вам просто придется реализовать собственный аналогичный протокол. Проверьте свои предположения.   -  person riwalk    schedule 25.09.2012
comment
Я должен согласиться со Stargazer712, накладные расходы, необходимые для реализации других слоев, на самом деле не так уж велики. Если вы используете udp, большинство полей могут быть постоянными.   -  person CrazyCasta    schedule 25.09.2012
comment
рекомендуется провести дополнительные исследования, прежде чем делать заявления о ресурсах.   -  person Steve-o    schedule 25.09.2012
comment
Итак, поскольку все всегда советуют избегать необработанных сокетов, возможно, кто-нибудь мог бы заполнить для меня некоторые детали. Для использования таких протоколов, как IP или tcp/udp, нужна ли вообще какая-либо инфраструктура на стороне клиента? Чтобы было ясно, мои клиенты — это чисто аппаратное обеспечение. Хост-компьютер имеет полный доступ к любым протоколам сокетов, но клиенты, с которыми он взаимодействует через Ethernet-коммутатор, не имеют никаких программных возможностей. Может кто-нибудь объяснить, почему IP или tcp/udp более желательны для этого?   -  person NerdPirate    schedule 23.10.2012
comment
Привет, ты наконец сделал сокет Raw без tcp/udp?   -  person user3217310    schedule 17.04.2014
comment
@user3217310 user3217310 Итак, мне нужно было отправлять необработанные пакеты, а не использовать необработанные сокеты. Наиболее полезным оказался этот ресурс: отправка-необработанных-ethernet-пакетов-с-определенного-интерфейса-в-c-на-linux   -  person NerdPirate    schedule 16.07.2014


Ответы (1)


В сети есть различные обучающие программы, которые относительно легко найти. Хорошим местом для начала будет один из таких руководств: Учебник по сокетам. Он включает простой пример клиент/сервер на C (хотя в примере используется протокол TCP).

Больше результатов:

Программирование Raw Sockets в Linux с помощью C

LINUX SOCKET PART 17 Advanced TCP/IP - ПРИМЕРЫ ПРОГРАММЫ RAW SOCKET

Вот исчерпывающий список результатов поиска Google по программированию необработанных сокетов в C

person Jeremy    schedule 25.09.2012
comment
Ему нужны необработанные сокеты, а не tcp/udp. - person CrazyCasta; 25.09.2012
comment
@CrazyCasta, он, вероятно, знает, просто он еще этого не знает. - person riwalk; 25.09.2012
comment
@ Stargazer712 Хотя я согласен, что глупо использовать необработанные сокеты, особенно без опыта работы с сетями, он довольно четко выразил то, что хочет. Это было бы более уместно в комментарии, предлагающем ему отказаться от этой идеи сырых сокетов. - person CrazyCasta; 25.09.2012
comment
Спасибо за исходные ссылки на сокеты. Результаты поиска Google не особенно полезны, поскольку я уже несколько недель читаю веб-страницы, найденные в Google, и 95% из них не имеют отношения к делу или не содержат никакой полезной информации. Но первые 2 дают некоторую полезную информацию. - person NerdPirate; 23.10.2012