Механизъм на сокетите (sockets), позволява взаимодействие между процеси, изпълнявани на различни машини. Основното предназначение на сокетите е да предоставят удобен интерфейс за междупроцесна комуникация, като скрият от програмистите конкретните детайли на мрежовите протоколи. Използваната за целта трислойна управляваща структура в ядрото включва: ниво сокети, осигуряващо интерфейс между системните извиквания и долните нива;
протоколно ниво, съдържащо модули за реализация на комуникационните интернет протоколи (например TCP и IP). Програмният интерфейс на сокетите е дефиниран за използване с различни комуникационни протоколи, не само за TCP/IP;
ниво драйвери, съдържащо драйверите за управление на мрежовите физически устройства. Със сокет (socket) в UNIX се обозначава крайна комуникационна точка, достъпна през дескриптор. Посредством две сокета може да се установи комуникационен канал между процеси, евентуално изпълняващи се на различни машини. Процесите комуникират, използвайки модела клиент-сървър, като процесът-сървър чака заявка през сокета от своя край на двупосочния канал, а процесът-клиент комуникира с него през сокета от другия край.


С всеки сокет се свързва уникален за мрежата адрес, като същността на адреса зависи от комуникационната област (domain), за която е предназначен. Областта определя фамилията мрежови протоколи, които могат да бъдат използвани. Текущо във файла /sys/socket.h са дефинирани следните области:

  1. област UNUX (AF_UNIX) – вътрешни за UNIX протоколи;
  2. област Internet (AF_INET) – Internet протоколи;
  3. област XEROX (AF_NS) – протоколи на мрежовите системи XEROX;
  4. област ISO (AF_ISO) – ISO протоколи.

Процесите, комуникиращи в рамките на една и съща област, използват еднакъв формат за адрес на сокет. Форматът на адреса за областта UNIX съответства на формата на файлова спецификация в ОС UNIX. Например  файловата спецификация /alpha/beta/gamma може да бъде адрес на сокет. В областта Internet се използва формат на Интернет адрес, състоящ се от 32-разреден номер на хост и 16-разреден номер на порт. Даден сокет може да се използва само в рамките на областта, за която е създаден.
Всеки сокет е от определен тип. Типовете са системно дефинирани и задават семантиката на комуникацията – организация на комуникационния канал и формат на предаваните данни.
Не всички типове сокети са допустими за всички комуникационни области. Ако даден тип е допустим за определена комуникационна област, той може да бъде реализиран с един или повече протокола на тази област, избрани от програмиста. Дефинирани са следните типове сокети:
потокови сокети (SOCK_STREAM). Потоковите сокети са ориентирани на установяване на двупосочна връзка между комуникиращите си процеси и осигуряват надеждно дуплексно предаване на подредени потоци данни без разграничаване на отделните записи в потоците. Не се допуска загуба и дублиране на данни. Този тип се реализира в областта Internet посредством протокола TCP;
пакетирани последователни сокети (SOCK_SEQPACKET). Типът подобно на потоковите сокети е ориентиран на установяване на двупосочна връзка и осигурява предаване на потоци от записи с фиксирана максимална дължина. Този тип се използва само в областта AF_NS;
дейтаграми (SOCK_DGRAM). Сокетите от този тип прехвърлят съобщения с променлива дължина, наречени дейтаграми. За тези сокети не се установява връзка и следователно не се гарантира получаването на съобщенията в същия ред, в който са изпратени. Не се гарантира също, че съобщенията изобщо ще бъдат получени или че няма да бъдат дублирани. Гарантира се само запазване на оригиналния размер на всяка дейтаграма. Дейтаграмите се поддържат от протокола UDP на областта Internet;
сокети с надеждна доставка на съобщенията (SOCK_RDM). Типът е подобен на дейтаграмните сокети, но гарантира доставката на съобщенията;
чисти сокети (SOCK_RAW). Тези сокети позволяват на процесите директен достъп до протоколите, поддържащи сокети от другите типове, като са достъпни и протоколите от по-ниските нива. Например в областта Internet е възможен достъп, както до протокола TCP, така и до протоколите от ниско ниво IP или Ethernet. Чистите сокети са удобно средство за разработка на нови протоколи.
Сокетите се вписват в основната идеология на UNIX, при която интерфейсът за работа с входно-изходните устройства е еднакъв с интерфейса към файловата система. Използват се едни и същи системни извиквания open(), read(), writ() и close() за работа с файлове и устройства, като ядрото на UNIX се грижи да разреши конкретните различия. Системното извикване open(dev_name, mode) връща манипулатор, наречен файлов дескриптор (descriptor), който се използва от следващите операции (системните извиквания read(), write() и close()) за идентифициране на  устройството dev_name. Типът на достъпа до устройството (четене, запис) се задава чрез параметъра mode. По този начин операциите, които се изпълняват с устройствата са същите, както при обикновените файлове:
Механизмът на сокетите се базира на няколко системни извиквания, които за реализация на горните действия се използват в различно съчетание в зависимост от типа, комуникационната област и избрания протокол

  • loc_addr – адрес на локалния хост, върху който е създаден сокета;
  • loc_process – локален номер на порт;
  • rem_addr – адрес на отдалечения хост, с който се осъществява комуникацията;
  • rem_process – номер на порт на отдалечения сокет.

За да се използва сокет, той трябва първо да бъде създаден. За тази цел се използва системното извикване socket()
Аргументите на системното извикване socket() са следните:

  • domain – задава комуникационната област и свързания с нея формат на адреса;
  • type – тип на сокета;
  • protocol – протокол, който ще се използва за поддържането на указания тип сокет. Протоколът се задава чрез своя номер, както е дефиниран във файла /etc/protocols.

След създаването си сокетът няма име (адрес) и следователно с него не може да се установи комуникационен канал. За присвояване на адрес на сокета се използва системното извикване bind():
Аргументите на системното извикване bind() са следните:
socketdesc – дескриптор на сокета;
localaddress – указател към структура от тип sockaddr, задаваща адреса (името) на сокета;
addresslength – дължина на структурата, указвана от localaddress, в брой байтове
Комуникационен канал с установяване на връзка се създава със системното извикване connect(): socketdesc – дескриптор на локалния сокет;
dest_address – указател към структура от тип sockaddr, задаваща адреса на отдалечения сокет;
addrlen – размер на адреса на отдалечения сокет в брой байтове.
За да може успешно да се създаде комуникационен канал, процесът от другата страна (например процесът-сървър) трябва да е подготвил своя сокет за установяване на връзка с помощта на системното извикване listen(). Връзката се счита за установена при успешно изпълнение на системното извикване accept():
Най-прост начин за прекъсване на връзката е затваряне на асоциирано с нея сокет посредством системното извикване close()

Подобни статии

  • Сигурност на данните (Data security)
    Сигурността на данните установява едно смесване на политика и криптиране. Криптирането на данните където се създават и съхраняват и предаването им през мрежата се препоръчва като най-добрата практика и ако всички други мерки са сигурност са излезли от строя (или са преодолени) една силна криптираща ...
  • Основи на Информационните Технологии. Въпроси и отговори
    Какво се губи при дискретизиране на информация и защо? При променяне на вида на файла или неговата компресия се получава дискретизиране на информацията и се губи част от информацията. Кои основни информационни дейности не могат да се извършат чрез компютър? Всичките четири основни информационни д...
  • Сигурност на мрежи чрез обратно набиране
    Сигурността чрез обратно набиране е възможност на сървъра за отдалечен достъп, която може да разшири сигурността чрез ограничаване на dialup връзки само до тези на одобрени телефонни номера. При включена сигурност с обратно набиране сървърът не вярва на акредитивите (потребителско име и парола), във...
  • FDDI мрежи
    FDDI е мрежа с кръгова топология и с метод на достъп управляващ маркер. Нейната реализация и топология се различават от LAN архитектурата Token Ring на IBM, която е установена от IEEE 802.5. FDDI се използва често за MAN мрежи или по-големи LAN, например при свързване на няколко сгради в офис или ун...
  • Основни положения при програмиране на ММ с CPU
    Работата на машини с CPU се управлява по предварително съставена програма, наречена управляваща програма (УП). Тя дава необходимата информация за обработване на даден детайл. Програмиране се нарича процесът на създаване на УП. То може да бъде ръчно или автоматизирано с помощта на компютър. Съвременн...
  • Техника на работа при тримерно конструиране
    Конструирането има две важни страни: техника на описание на обектите;техника на манипулиране с цел изготвяне на чертежи. Конструкторът ги използва едновременно при проектирането. Техника на описание- свежда се до построяване на съответните тримерни геометрични модели. Могат да се използват различни...
  • Информационното общество и информационните технологии в България
    Въз основа на Стратегията за развитие на Информационното общество и информационните технологии е разработена Национална програма за развитие. Тя определя основните задачи, чрез които да се осъществят поставените цели и приоритети в Стратегията. Програмата е отворена по своя характер и се предвижда п...