Сокет в информатике и электротехнике¶
Сокет — многозначный термин, используемый в информатике для обозначения программного интерфейса взаимодействия процессов по сети и в электротехнике для обозначения гнездового соединения электрических контактов. В компьютерных сетях сокет представляет собой абстракцию транспортного уровня, обеспечивающую двусторонний обмен данными между процессами, работающими на разных узлах сети; в электротехнике сокет — это механический узел, в который вставляется штепсельная вилка или лампа.
¶Сетевые сокеты
¶Общие сведения
Понятие сокета в сетевом программировании введено в операционной системе BSD 4.2 в 1983 году (интерфейс BSD sockets). Сокет идентифицируется комбинацией трёх параметров: IP-адреса, номера транспортного протокола (TCP или UDP) и номера порта. Совокупность этих данных образует уникальный адрес сокета, например 192.168.1.10:8080.
Сокеты реализуют модель клиент-сервер: сервер создаёт сокет, привязывает его к определённому порту и переходит в режим ожидания входящих соединений (listen), а клиент инициирует соединение (connect). После установления соединения обе стороны получают дескриптор сокета, через который выполняют чтение и запись данных.
¶Типы сокетов
| Тип сокета | Протокол | Особенности |
|---|---|---|
| SOCK_STREAM | TCP | Надёжная, потоковая, ориентированная на соединение передача |
| SOCK_DGRAM | UDP | Датаграммная передача без установления соединения |
| SOCK_RAW | IP | Доступ к протоколам нижнего уровня, требует повышенных привилегий |
| SOCK_SEQPACKET | SCTP | Пакетная передача с сохранением границ сообщений |
¶Системные вызовы
Основные системные вызовы для работы с сокетами в POSIX-системах:
socket()— создание сокета;bind()— привязка сокета к локальному адресу и порту;listen()— перевод сокета в режим прослушивания (только для TCP);accept()— принятие входящего соединения и создание нового сокета;connect()— установление соединения с удалённым узлом;send()/recv()— передача и приём данных;close()— закрытие сокета.
В Windows аналогичный интерфейс реализован в библиотеке Winsock (Windows Sockets API), совместимом с POSIX-сокетами.
¶Асинхронная работа
Для обслуживания множества соединений в одном процессе используются механизмы мультиплексирования: select(), poll(), epoll (Linux), kqueue (BSD/macOS), IOCP (Windows). Эти механизмы позволяют отслеживать готовность сокетов к чтению или записи без блокирующих вызовов. Многие языки программирования (Python, Java, C#) предоставляют собственные обёртки над сокетами, а современные фреймворки (Node.js, asyncio) строятся на асинхронной модели работы с сокетами.
¶Применение
Сокеты лежат в основе большинства сетевых протоколов и приложений: HTTP-серверы, почтовые клиенты (SMTP, IMAP, POP3), системы мгновенного обмена сообщениями, потоковая передача мультимедиа, удалённое управление серверами (SSH). Протокол WebSocket, используемый в браузерах для двусторонней связи, также реализуется поверх TCP-сокетов.
¶Сокеты в электротехнике
В электротехнике сокет (от англ. socket — гнездо) — это разъёмное соединение, состоящее из гнезда (сокета) и вставляемого в него штепселя. Сокеты применяются в бытовой и промышленной электротехнике: розетки, разъёмы питания, гнёзда для ламп накаливания (E27, E14, G9 и другие), разъёмы для подключения периферийных устройств.
По типу контактов различают сокеты с винтовым соединением, пружинные, с самозажимными клеммами. Стандартизация размеров и форм обеспечивает взаимозаменяемость: стандарты МЭК и ГОСТ определяют геометрию и электрические параметры соединений.
¶См. также
- Порт (компьютерные сети)
- TCP/IP
- Розетка (электротехника)
- Разъём (электротехника)
¶Источники
- Стивенс, Р. UNIX Network Programming. — 2-е изд.
- Таненбаум, Э. Компьютерные сети. — 5-е изд.
- ГОСТ Р МЭК 60884-1 — Электровилки и розетки для бытовых целей.
- RFC 793 — Transmission Control Protocol.
