Сокеты Сети и системы телекоммуникаций Созыкин А.В. План Место сокетов в моделях OSI и TCP/IP Сокеты Беркли Основные операции над сокетами Работа сокетов Пример на Python ИМКН УрФУ 2 Место в моделях OSI и TCP/IP Модель OSI Модель TCP/IP Прикладной Представления Прикладной Сеансовый Транспортный Транспортный Сетевой Сетевой Канальный Сетевых интерфейсов Физический ИМКН УрФУ 3 Место в моделях OSI и TCP/IP Сокеты и TCP относятся к транспортному уровню Сокеты – интерфейс транспортного уровня TCP – протокол транспортного уровня ИМКН УрФУ 4 Место в моделях OSI и TCP/IP Приложение Приложение Интерфейс сокетов Транспортный Интерфейс сокетов Протокол TCP Транспортный Сетевой Сетевой Сетевых интерфейсов Сетевых интерфейсов Хост 1 Хост 2 ИМКН УрФУ 5 Сокеты Беркли Сокеты впервые появились в ОС Berkeley UNIX 4.2 BSD (1983 г.) Сокеты – де-факто стандарт интерфейсов для транспортной подсистемы Различные варианты сокетов реализованы в разных ОС и языках программирования ИМКН УрФУ 6 Сокеты Беркли Сокет в Unix – файл специального типа В Unix все устройства представляются файлами Операции чтения и записи в файл сокета передают данные по сети Отправитель записывает данные в файл сокета Получатель читает данные их файла сокета Передача данных по сети скрыта от программиста ИМКН УрФУ 7 Операции сокетов Беркли Операция Назначение Socket Bind Listen Создать новый сокет Связать сокет с IP-адресом и портом Объявить о желании принимать соединения Connect Accept Send Установить соединение Принять запрос на установку соединения Отправить данные по сети Receive Close Получить данные из сети Закрыть соединение ИМКН УрФУ 8 Клиент и сервер Взаимодействующие стороны сокетов Беркли: Сервер Клиент Сервер – работает (слушает) на известном IP-адресе и порту и пассивно ждет запросов на соединение Клиент – активно устанавливает соединение с сервером на заданном IP и порту ИМКН УрФУ 9 Работа сокетов Socket 192.168.1.1:80 Bind Запрос на соединение Socket Connect Listen Accept Receive Send Close Очередь для соединений Копия сокета Соединение Сервер Клиент ИМКН УрФУ 10 Работа сокетов Передача данных возможна, только если установлено соединение клиент-сервер При получении запроса от клиента создается копия сокета Соединение устанавливается с копией Оригинальный сокет продолжает ждать запросы от других клиентов Такой сокет не может принимать и передавать данные ИМКН УрФУ 11 Пример на Python «Серверный» сокет Клиентский сокет Передача данных ИМКН УрФУ 12 Python. Серверный сокет Создание сокета: serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) Привязка к IP-адресу: serversocket.bind(('192.168.0.1', 80)) «Прослушивание»: serversocket.listen(5) ИМКН УрФУ 13 Python. Типы сокетов Протоколы сетевого уровня socket.AF_INET – IPv4 socket.AF_INET6 – IPv6 Протоколы транспортного уровня socket.SOCK_STREAM – TCP socket.SOCK_DGRAM - UDP Есть и другие типы, но они используются редко ИМКН УрФУ 14 Python. Ожидание соединений while 1: #Принимаем соединение – создаем клиентский сокет (clientsocket, address) = serversocket.accept() #Создаем поток для обслуживания запроса клиента ct = client_thread(clientsocket) ct.run() ИМКН УрФУ 15 Python. Клиентский сокет Создание сокета: clientsocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) Установка соединения: clientsocket.connect(('192.168.0.1', 80)) ИМКН УрФУ 16 Python. Передача данных Отправка данных: socket.send('Hello, world!') Получение данных: socket.recv(1024) # 1024 – размер буфера Закрытие сокета: socket.close ИМКН УрФУ 17 Итоги Место сокетов в моделях OSI и TCP/IP Сокеты Беркли Основные операции над сокетами Работа сокетов Пример на Python ИМКН УрФУ 18 Вопросы? ИМКН УрФУ 19