GPU / ИИ
Облачные сервисы
Managed IT
Интеграция
Security
Импортозамещение
Партнерам
О компании

Сокет (программный интерфейс)

Что такое сокет?

[dnf_block term=»Сокет (от англ. socket — «разъём, гнездо») » ]это программный интерфейс для обмена данными между процессами. Процессы могут находиться как на одной машине, так и на разных узлах сети. Фактически сокет — это конечная точка соединения: через него приложение отправляет и принимает данные, не вникая в детали физической транспортировки.[/dnf_block]

Концепция появилась в UNIX-системах в начале 1980-х годов в рамках реализации стека BSD TCP/IP. С тех пор она стала стандартом: сокеты поддерживаются во всех современных ОС — Linux, Windows, macOS — и реализованы в каждом распространённом языке программирования. Браузеры, мессенджеры, серверы баз данных, API-шлюзы — всё это работает поверх сокетного интерфейса.

Для чего нужен сокет?

Сокет выступает абстракцией транспортного уровня. Разработчику достаточно открыть сокет, указать адрес и порт назначения и начать обмен — детали маршрутизации, контроля ошибок и сборки пакетов берёт на себя операционная система. Это принципиально упрощает создание сетевых приложений.

По протоколу передачи сокеты делятся на три основных типа:

Каждый сокет идентифицируется парой «IP-адрес : порт». Сервер открывает сокет в режиме прослушивания (listen), клиент инициирует соединение (connect). После установки соединения обе стороны обмениваются данными симметрично, используя вызовы send/recv или read/write.

[text_with_btn btn=»Оставить заявку»]Запросить консультацию технического специалиста[/text_with_btn]

Копирование сокетов

В UNIX-системах сокет представлен файловым дескриптором — целым числом, которое процесс передаёт ядру при системных вызовах. Это позволяет применять стандартный механизм дублирования: вызов dup() создаёт новый дескриптор, указывающий на тот же сокет. Оба дескриптора ссылаются на одно соединение, и закрытие одного из них не прерывает его — соединение остаётся активным до тех пор, пока не будут закрыты все его копии.

Такой подход широко используется при разветвлении процессов (fork): дочерний процесс автоматически наследует все дескрипторы родителя, включая сокеты. Это позволяет реализовать классическую модель «один процесс — одно соединение». Альтернатива — многопоточные серверы и асинхронная модель ввода-вывода (epoll на Linux, kqueue на BSD/macOS), при которой единственный процесс управляет тысячами сокетов одновременно, не блокируясь на каждом из них. Именно эта модель лежит в основе высоконагруженных серверов: nginx, Node.js и большинства современных фреймворков.