Программирование сокетов на низком уровне - PullRequest
5 голосов
/ 19 августа 2010

Я не могу скорее понять или понять; что значит программировать на нижнем уровне в программировании сокетов. Я привык работать с сокетами файловой системы tcp / udp /. Все они обернуты вокруг своих собственных спецификаций протокола ... которые, как я понимаю, заставили бы его работать на прикладном уровне в стеке.

В проекте, в котором я работаю, я видел несколько файлов, которые называются LinkLayer, TransportLayer ... но я не вижу больше вызовов, кроме стандартных вызовов сокетов .... send / recv / seletct ..

Означает ли тот факт, что вы устанавливаете параметры сокета, вы программируете на более низком уровне? Это только ограничено этим? Или есть другие API, которые предоставляют вам доступ к представлению в ядре?

Ответы [ 2 ]

9 голосов
/ 19 августа 2010

Обычно это относится к использованию сокетов SOCK_RAW, что требует от вас сборки ваших собственных заголовков пакетов, вычисления контрольных сумм и т. Д. Вы по-прежнему используете send / recv / etc.но теперь вы несете ответственность за то, чтобы каждый бит находился в нужном месте.

Вы можете использовать сокеты SOCK_RAW для реализации протоколов, отличных от TCP или UDP, или для работы с интернет-протоколами, которые делают интерфейсы более высокого уровняне приспосабливается (как настройка TTL ваших пакетов для реализации чего-то вроде traceroute).

2 голосов
/ 19 августа 2010

Это обычно означает работу на более низком уровне OSI, например, не прямую отправку TCP-потоков или UDP-пакетов, а создание собственных пакетов IP или даже Ethernet или других протоколов низкого уровня, которые в нормальном случае будутобрабатывается операционной системой.

Это можно сделать с помощью специальных опций сокетов, которые позволяют вам получать или отправлять данные на любом слое, даже на слое 2 (Data Link).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...