Сокеты
Сокеты
Сокеты - универсальные методы взаимодействия процессов на основе использования многоуровневых сетевых протоколов. Сокеты предназначены для работы по сети: блокируют драйверы, для удобства выполнения локальных подпрограмм. Сокеты используют для работы по IP – сетям.
Используют клиент-серверный механизм.
Сокеты находятся в областях связи (доменах). Домен сокета - это абстракция, которая определяет структуру адресации и набор протоколов. Сокеты могут соединяться только с сокетами в том же домене. Всего выделено 23 класса сокетов (см. файл <sys/socket.h>), из которых обычно используются только UNIX-сокеты и Интернет-сокеты.
Поддерживаются домены:
- "UNIX system" - для взаимодействия процессов внутри одной машины
- "Internet" (межсетевой) - для взаимодействия через сеть с помощью протокола
У сокета 3 атрибута:
Рекомендуемые материалы
1) домен
2) тип
3) протокол
Для создания сокета используется системный вызов socket.
s = socket(domain, type, protocol);
Например, для использования особенностей Internet, значения параметров должны быть следующими:
s = socket(AF_INET, SOCK_STREAM, 0);
Основные типы сокетов:
1) Поточный
- обеспечивает двухсторонний, последовательный, надежный, и недублированный поток данных без определенных границ. Тип сокета - SOCK_STREAM, в домене Интернета он использует протокол TCP.
2) Датаграммный
- поддерживает двухсторонний поток сообщений. Приложение, использующее такие сокеты, может получать сообщения в порядке, отличном от последовательности, в которой эти сообщения посылались. Тип сокета - SOCK_DGRAM, в домене Интернета он использует протокол UDP.
3) Сокет
последовательных пакетов - обеспечивает двухсторонний, последовательный, надежный обмен датаграммами фиксированной максимальной длины. Тип сокета - SOCK_SEQPACKET. Для этого типа сокета не существует специального протокола.
4) Простой
сокет - обеспечивает доступ к основным протоколам связи.
Обмен между сокетами происходит по следующей схеме:
Типы передаваемых пакетов:
Ещё посмотрите лекцию "6.2. Интерфейс файловой системы" по этой теме.
SOCK_STREAM соответствует потоковым сокетам, реализующим соединения «точка-точка» с надежной передачей данных.
SOCK_DGRAM указывает датаграммный сокет. Датаграммные сокеты осуществляют ненадежные соединения при передаче данных по сети и допускают широковещательную передачу данных.
SOCK_RAVE для низкоуровневого управления пакетами данных
AF_INET сокет для работы по сети
AF_UNIX соответствует сокетам в файловом пространстве имен
Причины успеха сокетов заключаются в их простоте и универсальности. Программы, обменивающиеся данными с помощью сокетов, могут работать в одной системе и в разных, используя для обмена данными как специальные объекты системы, так и сетевой стек. Как и каналы, сокеты используют простой интерфейс, основанный на «файловых» функциях read(2) и write(2) (открывая сокет, программа Unix получает дескриптор файла, благодаря которому можно работать с сокетами, используя файловые функции), но, в отличие от каналов, сокеты позволяют передавать данные в обоих направлениях, как в синхронном, так и в асинхронном режиме.