Межпроцессное взаимодействие при помощи сокетов
Для адресации компьютера в глобальной сети используется IP-адрес – уникальное 32-битное число, назначаемое хосту и используемое во всех операциях связи для связи с хостом.
Для адресации служб используется пара объектов – IP-адрес и порт. Порт – это целое число, используемое ОС для идентификации служб в рамках одного компьютера. Порт не соответствует какой-либо физической сущности. Одна программа-сервер может обеспечивать несколько служб (например, порт 80 – HTTP, порт 21 – FTP).
Для организации обмена по сети необходимо разработать протокол связи – соглашение, определяющее формат и смысл сообщений, которыми обмениваются приложения. Организация взаимодействия программ по сети – сложная задача, включает много подзадач: согласование уровней электрических сигналов, формирование кадров, проверка контрольных сумм, доставка пакетов по адресу назначения, устранение дублирования пакетов, аутентификация пользователей и т.д. Эта сложная задача разбивается на ряд простых, иерархически упорядоченных подзадач. Отдельная программа решает задачи определенного уровня. Т.е. вместо создания единственного гигантского протокола разрабатываются отдельные протоколы для каждой подзадачи.
Протокол – правила, определяющие обмен между компонентами одного уровня. Стек коммуникационных протоколов – иерархический набор протоколов, достаточный для организации взаимодействия узлов в сети. Протоколы нижних уровней могут быть организованы аппаратно или программно, верхних – чисто программно.
В начале 80-х годов международная организация по стандартизации ISO разработала семиуровневую модель OSI (Open System Interconnection) – модель взаимодействия открытых систем. В настоящее время ее заменила пятиуровневая модель Internet (рис. 13.1 ). Каждый уровень решает свою часть задачи связи: ПО конкретного уровня на компьютере-отправителе добавляет нужную информацию к отправляемым данным, а ПО того же уровня на компьютере-получателе использует эту информацию и затем удаляет ее. Например, уровень сетевого интерфейса компьютера 1 добавляет к кадру контрольную сумму перед передачей кадра по сети. Уровень сетевого интерфейса компьютера 2 проверяет и удаляет контрольную сумму входящего кадра до передачи его на сетевой уровень.
Стек протоколов обычно является частью ОС. Прикладная программа может взаимодействовать со стеком протоколов при помощи сокетов.
Сокеты – это интерфейс прикладного программирования (API), который предоставляет ОС для взаимодействия процессов. Это структура данных, используемая как оконечная точка взаимодействия для IPC. Сокет является развитием механизма каналов.
Две программы, взаимодействующие при помощи сокетов, используют пару сокетов. Сокет на локальном компьютере называют локальным сокетом, на удаленном – удаленным сокетом.
Существует два основных типа сокетов:
Потоковый сокет, или сокет с установлением соединения, или сокет TCP. Позволяет создавать двунаправленный, надежный поток данных, "виртуальную цепь". Канал реализуется как пара потоковых сокетов.
Характеристики соединения с помощью сокетов TCP:
- двухточечная связь, невозможна широковещательная и групповая передача;
- надежное установление соединения и надежная доставка;
- передача с управлением скоростью потока данных (данные не передаются быстрее, чем их может принять получатель);
- потоковая организация: границы между сообщениями не устанавливаются.
Дейтаграммный сокет, или сокет без установления соединения, или сокет UDP. Позволяет создавать двунаправленный, ненадежный поток данных.
Характеристики соединения с помощью сокетов UDP:
- обеспечивают связь "многие-ко-многим", т.е. можно реализовать широковещательную и групповую передачу;
- ненадежная доставка;
- отсутствие управления скоростью потока данных, если дейтаграммы поступают быстрее, чем они могут быть обработаны, то они отбрасываются без оповещения;
- дейтаграммная организация – доставленные данные укладываются в те же границы сообщений, которые были установлены приложением-отправителем;
- надежная доставка может быть обеспечена только в локальных вычислительных сетях.