Сетевые сокеты

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



Приложение работает на сервере, подключенном к сети: глобальной или локальной.

Интерфейс между приложением и хост-машиной (Network-Application Interface) определяет как приложение может использовать сеть.

Сетевые сокеты


Сетевые сокеты и клиент серверная модель

Приложение клиента запрос (к MySQL, например) на определенный сетевой адрес и порт. В примере это localhost и порт 3306 — сервер в свою отвечает приложению.

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


В рамках одной системы часто используются Unix сокеты. Такой способ взаимодействия быстрее.



Чтобы написать приложение, которое могло бы обслуживать множество клиентов (последовательно и параллельно) нужно сокет API

Socket API — интерфейс используемый всеми интернет приложениями.

 


Socket API при соединении 2-х приложений может работать с потоками и с датаграммами :
  • потоки — отправка потока байтов с гарантированной доставкой
  • датаграммы — отдельные сообщения без грантии доставки


Сетевой сокет — комбинация IP адреса и номера порта, которые представляют собой способ адресации. Адрес и порт обеспечивают нормальное взаимодействие большого количества приложений в рамках одной системы.

Один сокет не может использовать два приложения одновременно или два экземпляра одного приложения.



Вызовы в Socket API

Socket API


SOCKET — вызов создает структуру

BIND — связывает локальный адрес с сокетом

LISTEN — заявляет о готовности установить соединение

ACCEPT — принимает входящее соединение

CONNECT — пробует установить соединение

SEND — отправляет данные в рамках соединения

RECEIVE — принимает информацию в рамках соединения

CLOSE — прерывает соединение



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