Что такое socket в компьютерной сети

Введение в сетевое программирование. Сокеты.¶

Сокет — это программный интерфейс для обеспечения информационного обмена между процессами.

  • Серверный — сокет, который принимает сообщения.
  • Клиентский — сокет, который отправляет сообщения.
  • Потоковые (на основе TCP, в коде обозначаются SOCK_STREAM ) — сокеты с установленным соединением на основе протокола TCP, передают поток байтов, который может быть двунаправленным — т.е. приложение может и получать и отправлять данные.
  • Дейтаграммные (на основе UDP, в коде обозначаются SOCK_DGRAM ) — сокеты, не требующие установления явного соединения между ними. Сообщение отправляется указанному сокету и, соответственно, может получаться от указанного сокета.

Сокет состоит из IP-адреса и порта.

IP-адрес — уникальный сетевой адрес узла в компьютерной сети, построенной по протоколу IP. В версии протокола IPv4 IP-адрес имеет длину 4 байта (например, 192.168.0.3), а в версии протокола IPv6 IP-адрес имеет длину 16 байт (например, 2001:0db8:85a3:0000:0000:8a2e:0370:7334). IP-адрес должен быть уникален.

Порт — натуральное число, записываемое в заголовках протоколов транспортного уровня (TCP, UDP и др.). Порт используется для определения процесса-получателя пакета в пределах одного хоста.

В python для работы с сокетами используется встроенная библиотека socket . Одной из основных функций модуля является функция socket() , которая возвращает объект типа сокет, обладающий соответствующими функциями для работы с соединением.:

class socket.socket sock = socket.socket() 
  • socket.bind(address) — Привязывает сокет к адресу address (инициализирует IP-адрес и порт). Сокет не должен быть привязан до этого.
  • socket.listen([backlog]) — Переводит сервер в режим приема соединений. Параметр«backlog (int)« – количество соединений, которые будет принимать сервер.
  • socket.accept() — Принимает соединение и блокирует приложение в ожидании сообщения от клиента. В результате возвращает кортеж:
    • conn : объект соединения (сокет), который можно использовать для отправки/получения данных;
    • address : адрес клиента.

    Работа с сокетом во многом схожа с работой с файловым объектом. Принцип — открыли соединение — считали данные — закрыли соединение.

    Создание серверного сокета: .. code

    import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # создаем сокет sock.bind(('', 55000)) # связываем сокет с портом, где он будет ожидать сообщения sock.listen(10) # указываем сколько может сокет принимать соединений print('Server is running, please, press ctrl+c to stop') while True: conn, addr = sock.accept() # начинаем принимать соединения print('connected:', addr) # выводим информацию о подключении data = conn.recv(1024) # принимаем данные от клиента, по 1024 байт print(str(data)) conn.send(data.upper()) # в ответ клиенту отправляем сообщение в верхнем регистре conn.close() # закрываем соединение 

    Создание клиентского сокета: .. code

    import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # создаем сокет sock.connect(('localhost', 55000)) # подключемся к серверному сокету sock.send(bytes('Hello, world', encoding = 'UTF-8')) # отправляем сообщение data = sock.recv(1024) # читаем ответ от серверного сокета sock.close() # закрываем соединение print(data) 

    Обратите внимание, клиент отправляет байтовую строку, а не обычную. Сервер так же принимает в качестве сообщения байтовую строку и должен в ответе вернуть объект того же типа.

    Задания¶

    1. Реализовать чат без графического интерфейса, который позволит обмениваться сообщениями только между клиентом и сервером. Клиент должен получать сообщения сервера в том числе.
    2. С помощью модуля easygui (см. полезные ссылки), добавьте в разработанный чат простой графический интерфейс.
    3. Разработайте приложение, которое будет запрашивать у пользователя название файла, а затем отправлять содержимое этого файла серверу. Сервер будет подсчитывать количество слов и возвращать ответ.
    4. Добавьте к чату из задачи 2 чат-бота на стороне сервера. Добавьте 4-5 фраз, которые сервер будет отправлять по определённым условиям.

    Полезные ссылки:¶

    © Copyright Revision d00c0df4 .

    Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

    Источник

    Сетевые сокеты

    Сетевые сокеты — способ взаимодействия любого приложения с системой на которой оно работает. Сокет — это интерфейс, который по сути представляет собой совокупность адреса в сети и используемого порта. Также часто термин употребляется применительно к Socket API, о котором рассказывается во второй части материала.

    Приложение работает на сервере, подключенном к сети: глобальной или локальной.

    Интерфейс между приложением и хост-машиной (Network-Application Interface) определяет как приложение может использовать сеть.

    Сетевые сокеты

    Сетевые сокеты и клиент серверная модель

    Приложение клиента запрос (к MySQL, например) на определенный сетевой адрес и порт. В примере это localhost и порт 3306 — сервер в свою отвечает приложению.

    К приложению при этом могут обращаться множество клиентов. Запросы и использованием сокета приходят на один и тот же адрес и обрабатываются одним пакетом. Так работает клиент-серверая модель взаимодействия.

    В рамках одной системы часто используются Unix сокеты. Такой способ взаимодействия быстрее.

    Один сервис может работать и по Unix сокету и по сетевому сокету в зависимости от настроек.

    Примером может быть php-fpm.

    Сервис часто запускается на unix сокете и в настройках nginx настраивается проксирование на него. Столь же часто она запускается на адресе 127.0.0.1 и порту 9000 или любом другом.

    Чтобы написать приложение, которое могло бы обслуживать множество клиентов (последовательно и параллельно) нужно сокет API

    Socket API — интерфейс используемый всеми интернет приложениями.

    Socket API при соединении 2-х приложений может работать с потоками и с датаграммами :

    • потоки — отправка потока байтов с гарантированной доставкой
    • датаграммы — отдельные сообщения без гарантии доставки

    Сетевой сокет — комбинация IP адреса и номера порта, которые представляют собой способ адресации.

    Адрес и порт обеспечивают нормальное взаимодействие большого количества приложений в рамках одной системы.

    Один сокет не может использовать два приложения одновременно или два экземпляра одного приложения.

    Вызовы в Socket API

    Socket API

    SOCKET — вызов создает структуру

    BIND — связывает локальный адрес с сокетом

    LISTEN — заявляет о готовности установить соединение

    ACCEPT — принимает входящее соединение

    CONNECT — пробует установить соединение

    SEND — отправляет данные в рамках соединения

    RECEIVE — принимает информацию в рамках соединения

    CLOSE — прерывает соединение

    В нагруженных системах иногда применяют socat, инструмент, позволяющий системе работать с сервисом на другом хосте так, как будто он доступен локально.

    Источник

    Что такое сокет и зачем он нужен

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

    Чтобы разобраться в том, что такое сокеты и чем они так полезны, нужно кое-что вспомнить из статей про IP-адреса и про порты в программировании. Вот короткая выжимка из этих статей:

    • У каждого компьютера в сети есть IP-адрес, даже если это просто локальная сеть.
    • IP-адрес — это четыре числа от 0 до 255, разделённые точками, например 77.88.55.88 (это адрес сервера Яндекса).
    • С помощью этих адресов компьютеры знают, куда направить свои запросы и ответы.
    • Когда один компьютер соединяется с другим, они это делают через сетевой порт. Можно сказать, что порт — это номер соединения.
    • Сетевые порты в компьютере нумеруются от 1 до 65535, а компьютер сам следит за тем, как распределяются эти номера.
    • С помощью портов компьютер понимает, какие данные предназначены какой программе.
    • Некоторые программы и соединения всегда используют один и тот же порт, а другие получают его случайным образом.

    Главное: что такое сокет

    Сокет — это виртуальная конструкция из IP-адреса и номера порта. Её придумали для того, чтобы разработчикам было проще писать код, а программы могли передавать данные друг другу даже в пределах одного компьютера.

    ⭐ Можно представить, что сокет — это виртуальная труба, которую строят между двумя приложениями, чтобы гонять между ними данные. Приложения видят только концы трубы, а как проходит трубопровод — они не знают и им неважно.

    Смысл в том, чтобы программист работал не с IP-адресами и портами, разбираясь в тонкостях работы протоколов, а использовал что-то попроще. В итоге получается так:

    • программист пишет в программе, что он хочет сделать новый сокет;
    • указывает для него IP-адрес, если это необходимо;
    • программа собирает это в виртуальную конструкцию, и получается сокет;
    • после этого программист может отправлять данные просто в сокет и принимать их оттуда, а компьютер берёт на себя все вопросы по передаче данных.

    Что такое сокет и зачем он нужен

    Для чего нужны сокеты

    Сокеты используют для двух вещей:

    Как работает передача по сети, расскажем ниже, а сейчас поговорим про связь между приложениями. Идея в том, что если на компьютере запустить два приложения и в каждом из них настроить сокеты, то можно передавать данные из одного в другое даже без API. Например, на внутренних сокетах работают многие служебные программы — так они передают данные в операционную систему.

    На сокетах работает половина интернета. Например, чтобы получить данные из мобильного приложения, сервер запускает у себя сокет для связи с приложением. Каждое приложение тоже открывает свой сокет, связывается через него с сервером, и так они обмениваются данными.

    Но сокет на сервере один, а желающих подключиться к нему — много. Чтобы решить эту проблему, сервер копирует сокеты.

    Копирование сокетов и множественные подключения

    Когда на сервер поступает запрос на соединение с сокетом, он не устанавливает связь напрямую, а копирует этот сокет и настраивает связь через него. После копирования сервер запоминает, какая копия отвечает за какое соединение, и дальше просто обрабатывает все запросы по очереди. При этом исходный сокет остаётся нетронутым — он не используется для связи напрямую, а служит шаблоном для создания копий.

    Если бы сервер так не делал, то с ним могло бы соединиться только одно приложение — первое, которое успело подключиться.

    Что такое сокет и зачем он нужен

    Что дальше

    А дальше сделаем проект — напишем серверную и клиентскую часть и будем передавать данные между ними через сокеты, чтобы увидеть, как это работает в жизни. Подпишитесь, чтобы не пропустить проект.

    Этот рекламный блок сообщает, что после обучения в «Яндекс Практикуме» вы можете получить высокооплачиваемую работу разработчика, тестировщика, аналитика, менеджера и дата-сайентиста.

    Рекламный блок «Яндекс Практикума» Рекламный блок «Яндекс Практикума» Рекламный блок «Яндекс Практикума» Рекламный блок «Яндекс Практикума»

    В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

    Источник

    Читайте также:  Перечислить виды компьютерных сетей по территории распространения
Оцените статью
Adblock
detector