Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сети.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.51 Mб
Скачать

13. Сокеты

13.1 Основы сокетов

         Развитие Internet потребовало разрешить проблему: «Как обеспечить сетевое взаимодействие различных компьютеров (Hard) и установленных на них различных ОС (Soft) ?»

         Концептуальное решение проблемы:

1)     Установить единство протоколов.

2)     Установить единство интерфейсов для протоколов прикладного уровня, подключаемых к  вычислительной сети.

Предложено ввести Сокеты (Sockets – точки коммуникационного доступа внутри области коммуникационной сети.

         Сокет (Sockets)- функциональный элемент представительского уровня для двунаправленной связи, который может использоваться для взаимодействия с другим процессом на одной и той же машине или с процессом, запущенным на других машинах. Программы Интернета такие как  Telnet, rlogin, FTP, talk , и  World Wide Web используют сокеты.

         Каждый сокет характеризуется:

- протоколом,

- локальным адресом (инициатора соединения),

- удаленным портом.

         Например, можно получить WWW-страницу от сервера Web, используя программу  Telnet , так как они обе используют сокеты для сетевого взаимодействия. Для открытия подключения с сервером WWW на www.codesourcery.com, необходимо использовать  telnet www.codesourcery.com 80. Константа 80 определяет подключение к Web серверу. Если после того, как подключение будет установлено, передать команду get /, то Web серверу через сокеты будет отправлено сообщение, на которое он ответит, передав исходный текст домашней HTML страницы и затем закроет подключение.

 Пример:

         % telnet www.codesourcery.com 80

         Trying 206.168.99.1...

         Connected to merlin.codesourcery.com (206.168.99.1).

         Escape character is '^]'.

         GET /

         <html>

         <head>

         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Основы создания сокетов

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

Стиль взаимодействия контролирует, как сокет обрабатывает передаваемые данные, и определяет количество партнеров взаимодействия. Через сокеты данные передаются блоками (пакетами). Стиль взаимодействия определяет, как эти пакеты будут обработаны и как они передаются от отправителя к получателю.

 Стили соединения гарантируют доставку всех пакетов в том порядке, в каком они были отправлены. Если во время передачи пакеты были потеряны или доставлены в неправильном порядке, получатель автоматически отправляет запрос на их повторную передачу. Стиль соединения напоминает телефонный звонок: адреса отправителя и получателя фиксируются в начале соединения, при установке подключения.

 Стили датаграм не гарантирует доставки и правильного порядка прибытия. Пакеты могут быть потеряны или переупорядочены в пути из-за сетевых ошибок. Каждый пакет должен быть помечен его адресатом, и нет гарантии, что он будет доставлен. Система гарантирует только "максимальные усилия", поэтому пакеты могут исчезнуть или прибыть в различном порядке. Сокет стиля датаграмы ведет себя сходно с почтой. Отправитель определяет адрес получателя для каждого индивидуального сообщения.

 

         Пространство имен определяет, как записаны адреса сокета (socket addresses). Адрес сокета идентифицирует один конец подключения сокета. Например, адреса сокета в локальном пространстве имен являются обычными именами файлов. В пространстве имен Интернет адрес сокета состоит из Интернет адреса ( IP  адрес) главного компьютера, присоединенного к сети и номера порта, который идентифицирует сокет среди множества сокетов на том же главном компьютере.

 

 Протокол определяет, как передаются данные. Существуют следующие виды протоколов:  TCP/IP  , первичные сетевые протоколы, используемые Интернетом; сетевой протокол  AppleTalk ; локальный  UNIX  протокол взаимодействия. Не все комбинации стилей, пространств имен и протоколов поддерживаются.

 

Системные вызовы

Виды системных вызовов:

 socket - создать сокет

 closes - уничтожить сокет

 connect - создать соединение между двумя сокетами

 bind - привязать сокет к порту сервера

 listen - настройка сокета для принятия подключений

 accept - принять запрос на соединение и создать сокет для процесса взаимодействия

 Сокеты представляются дескрипторами файлов.

Создание и уничтожение сокетов

 С помощью функций  socket и  close создаются и уничтожаются сокеты. При создании сокета, необходимо определить три параметра сокета: пространство имен, стиль взаимодействия и протокол.

 Для указания пространства имен используются константы, начинающиеся с  PF_  (сокращение "семейство протокола"). Например,  PF_LOCAL  или  PF_UNIX  определяют локальное пространство имен, и  PF_INET  определяет Интернет пространство имен.

 Второй параметр, стиль взаимодействия, представляет собой константу, начинающуюся с  SOCK_ . SOCK_STREAM определяет стиль взаимодействия соединение,  SOCK_DGRAM  - стиль датаграмы.

 Третий параметр, протокол, определяет механизм нижнего уровня для передачи и получения данных. Для каждой комбинации пространство имен - стиль взаимодействия существует свой протокол.

 Для каждой пары существует лучший протокол, поэтому можно указать 0, что соответствует этому протоколу. Если команда  socket выполнена успешно, в качестве результата возвращается дескриптор файла для сокета. С помощью команд  read  и  write , можно читать и записывать данные в сокет.

Вызов connect

 Для создания соединение между двумя сокетами, клиент вызывает  connect  , передавая адрес сокета сервера для подключения. Клиент - процесс, инициализирующий соединение, а сервер - процесс, ожидающий разрешения соединения. Клиент посылает запрос  connect , чтобы инициализировать соединение между локальным сокетом и сокетом сервера, переданным в качестве второго параметра. В качестве третьего параметра передается длина, в байтах, адресной структуры, на которую указывает второй параметр.

Отправка данных

 

 Любая техника записи в дескриптор файла, может использоваться при записи в сокет. Функция  send , определенная для дескрипторов файлов сокета, аналогична функции  write  с несколькими дополнительными параметрами.