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

Поделись знанием:
Перейти к: навигация, поиск

Со́кеты (англ. socket — разъём) — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения.

Следует различать клиентские и серверные сокеты. Клиентские сокеты грубо можно сравнить с конечными аппаратами телефонной сети, а серверные — с коммутаторами. Клиентское приложение (например, браузер) использует только клиентские сокеты, а серверное (например, веб-сервер, которому браузер посылает запросы) — как клиентские, так и серверные сокеты.

Интерфейс сокетов впервые появился в BSD Unix. Программный интерфейс сокетов описан в стандарте POSIX.1 и в той или иной мере поддерживается всеми современными операционными системами.



Принципы сокетов

Как известно, для взаимодействия между машинами с помощью стека протоколов TCP/IP используются адреса и порты. Первое на текущий момент представляет собой 32-битный адрес (для протокола IPv4, 128-битный для IPv6), наиболее часто его представляют в символьной форме mmm.nnn.ppp.qqq (адрес, разбитый на четыре поля, разделённых точками, по одному байту в поле).

Второе — это номер порта в диапазоне от 0 до 65535 (для протокола TCP).

Эта пара и есть сокет («гнездо», соответствующее адресу и порту).

В процессе обмена, как правило, используется два сокета — сокет отправителя и сокет получателя. Например, при обращении к серверу на HTTP порт сокет будет выглядеть так: 194.106.118.30:80, а ответ будет поступать на mmm.nnn.ppp.qqq: xxxxx.

Каждый процесс может создать «слушающий» сокет (серверный сокет) и привязать его к какому-нибудь порту операционной системы (в UNIX непривилегированные процессы не могут использовать порты меньше 1024). Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. При этом сохраняется возможность проверить наличие соединений на данный момент, установить тайм-аут для операции и т. д.

Каждый сокет имеет свой адрес. ОС семейства UNIX могут поддерживать много типов адресов, но обязательными являются INET-адрес и UNIX-адрес. Если привязать сокет к UNIX-адресу, то будет создан специальный файл (файл сокета) по заданному пути, через который смогут сообщаться любые локальные процессы путём чтения/записи из него (см. Доменный сокет Unix). Сокеты типа INET доступны из сети и требуют выделения номера порта.

Обычно клиент явно «подсоединяется» к слушателю, после чего любое чтение или запись через его файловый дескриптор будут передавать данные между ним и сервером.

См. также



Напишите отзыв о статье "Сокет (программный интерфейс)"

Отрывок, характеризующий Сокет (программный интерфейс)

Вольцоген, небрежно разминая ноги, с полупрезрительной улыбкой на губах, подошел к Кутузову, слегка дотронувшись до козырька рукою.
Вольцоген обращался с светлейшим с некоторой аффектированной небрежностью, имеющей целью показать, что он, как высокообразованный военный, предоставляет русским делать кумира из этого старого, бесполезного человека, а сам знает, с кем он имеет дело. «Der alte Herr (как называли Кутузова в своем кругу немцы) macht sich ganz bequem, [Старый господин покойно устроился (нем.) ] – подумал Вольцоген и, строго взглянув на тарелки, стоявшие перед Кутузовым, начал докладывать старому господину положение дел на левом фланге так, как приказал ему Барклай и как он сам его видел и понял.
– Все пункты нашей позиции в руках неприятеля и отбить нечем, потому что войск нет; они бегут, и нет возможности остановить их, – докладывал он.
Кутузов, остановившись жевать, удивленно, как будто не понимая того, что ему говорили, уставился на Вольцогена. Вольцоген, заметив волнение des alten Herrn, [старого господина (нем.) ] с улыбкой сказал:
– Я не считал себя вправе скрыть от вашей светлости того, что я видел… Войска в полном расстройстве…
– Вы видели? Вы видели?.. – нахмурившись, закричал Кутузов, быстро вставая и наступая на Вольцогена. – Как вы… как вы смеете!.. – делая угрожающие жесты трясущимися руками и захлебываясь, закричал он. – Как смоете вы, милостивый государь, говорить это мне. Вы ничего не знаете. Передайте от меня генералу Барклаю, что его сведения неверны и что настоящий ход сражения известен мне, главнокомандующему, лучше, чем ему.
Вольцоген хотел возразить что то, но Кутузов перебил его.
– Неприятель отбит на левом и поражен на правом фланге. Ежели вы плохо видели, милостивый государь, то не позволяйте себе говорить того, чего вы не знаете. Извольте ехать к генералу Барклаю и передать ему назавтра мое непременное намерение атаковать неприятеля, – строго сказал Кутузов. Все молчали, и слышно было одно тяжелое дыхание запыхавшегося старого генерала. – Отбиты везде, за что я благодарю бога и наше храброе войско. Неприятель побежден, и завтра погоним его из священной земли русской, – сказал Кутузов, крестясь; и вдруг всхлипнул от наступивших слез. Вольцоген, пожав плечами и скривив губы, молча отошел к стороне, удивляясь uber diese Eingenommenheit des alten Herrn. [на это самодурство старого господина. (нем.) ]
– Да, вот он, мой герой, – сказал Кутузов к полному красивому черноволосому генералу, который в это время входил на курган. Это был Раевский, проведший весь день на главном пункте Бородинского поля.
Раевский доносил, что войска твердо стоят на своих местах и что французы не смеют атаковать более. Выслушав его, Кутузов по французски сказал:
– Vous ne pensez donc pas comme lesautres que nous sommes obliges de nous retirer? [Вы, стало быть, не думаете, как другие, что мы должны отступить?]