stringtranslate.com

Сетевая розетка

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

Из-за стандартизации протоколов TCP/IP в ходе развития Интернета термин « сетевой сокет» чаще всего используется в контексте набора протоколов Интернета, и поэтому его часто также называют Интернет-сокетом . В этом контексте сокет внешне идентифицируется для других хостов по его адресу сокета , который представляет собой триаду транспортного протокола , IP-адреса и номера порта .

Термин «сокет» также используется для обозначения программной конечной точки внутриузлового межпроцессного взаимодействия (IPC), которая часто использует тот же API, что и сетевой сокет.

Использовать

Использование термина « сокет» в программном обеспечении аналогично функции электрического разъема , аппаратного устройства для связи между узлами, соединенными между собой электрическим кабелем . Аналогично, термин порт используется для внешних физических конечных точек на узле или устройстве.

Интерфейс прикладного программирования (API) для стека сетевых протоколов создает дескриптор для каждого сокета, созданного приложением, обычно называемый дескриптором сокета . В Unix-подобных операционных системах этот дескриптор является разновидностью дескриптора файла . Он сохраняется процессом приложения для использования при каждой операции чтения и записи в канале связи.

Во время создания с помощью API сетевой сокет привязан к комбинации типа сетевого протокола, который будет использоваться для передачи, сетевого адреса хоста и номера порта . Порты — это пронумерованные ресурсы, представляющие другой тип программной структуры узла. Они используются как типы служб и после создания процессом служат компонентом местоположения, адресуемым извне (из сети), так что другие хосты могут устанавливать соединения.

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

На практике из-за распространения протоколов TCP/IP, используемых в Интернете, термин « сетевой сокет» обычно относится к использованию с интернет-протоколом (IP). Поэтому его часто еще называют Интернет-розеткой .

Адреса сокетов

Приложение может взаимодействовать с удаленным процессом путем обмена данными по TCP/IP, зная комбинацию типа протокола, IP-адреса и номера порта. Эту комбинацию часто называют адресом сокета . Это сетевой дескриптор доступа к сетевому сокету. Удаленный процесс устанавливает сетевой сокет в своем собственном экземпляре стека протоколов и использует сетевой API для подключения к приложению, предоставляя свой собственный адрес сокета для использования приложением.

Выполнение

Стек протоколов , обычно предоставляемый операционной системой (а не, например, отдельной библиотекой), представляет собой набор сервисов, которые позволяют процессам взаимодействовать по сети с использованием протоколов, реализуемых стеком. Операционная система перенаправляет полезную нагрузку входящих IP-пакетов соответствующему приложению, извлекая информацию об адресе сокета из заголовков IP и транспортного протокола и удаляя заголовки из данных приложения.

Интерфейс прикладного программирования (API), который программы используют для связи со стеком протоколов с помощью сетевых сокетов, называется API сокетов . Разработка прикладных программ, использующих этот API, называется программированием сокетов или сетевым программированием . API-интерфейсы интернет-сокетов обычно основаны на стандарте сокетов Беркли . В стандарте сокетов Беркли сокеты представляют собой форму файлового дескриптора из-за философии Unix , согласно которой «все является файлом», и аналогий между сокетами и файлами. Оба имеют функции чтения, записи, открытия и закрытия. На практике различия затрудняют аналогию, и в сокете используются разные интерфейсы (отправки и приема). При межпроцессном взаимодействии каждый конец обычно имеет свой собственный сокет.

В стандартных интернет-протоколах TCP и UDP адрес сокета представляет собой комбинацию IP-адреса и номера порта , подобно тому, как один конец телефонного соединения представляет собой комбинацию номера телефона и определенного расширения . Сокеты не обязательно должны иметь адрес источника, например, только для отправки данных, но если программа привязывает сокет к адресу источника, сокет можно использовать для получения данных, отправленных на этот адрес. На основе этого адреса интернет-сокеты доставляют входящие пакеты данных соответствующему процессу приложения .

Сокет часто относится конкретно к интернет-сокету или TCP-сокету. Интернет-розетка минимально характеризуется следующим:

Определение

Различия между сокетом (внутренним представлением), дескриптором сокета (абстрактным идентификатором) и адресом сокета (публичным адресом) невелики, и они не всегда различаются в повседневном использовании. Кроме того, конкретные определения сокета различаются между авторами. В IETF Request for Comments , Internet Standards , во многих учебниках, а также в этой статье термин сокет относится к сущности, которая однозначно идентифицируется номером сокета. В других учебниках [1] термин «сокет» относится к локальному адресу сокета, то есть «комбинации IP-адреса и номера порта». В исходном определении сокета , данном в RFC 147, [2] в связи с сетью ARPA в 1971 году, «сокет указывается как 32-битное число, где четные сокеты идентифицируют принимающие сокеты, а нечетные сокеты идентифицируют отправляющие сокеты». Однако сегодня связь через сокеты является двунаправленной.

В операционной системе и приложении, создавшем сокет, сокет называется уникальным целочисленным значением, называемым дескриптором сокета .

Инструменты

В Unix-подобных операционных системах и Microsoft Windows инструменты командной строки netstat или ss [3] используются для вывода списка установленных сокетов и связанной с ними информации.

Пример

Этот пример, смоделированный в соответствии с интерфейсом сокета Беркли, отправляет строку «Hello, world!» по TCP на порт 80 хоста с адресом 203.0.113.0. Он иллюстрирует создание сокета (getSocket), подключение его к удаленному хосту, отправку строки и, наконец, закрытие сокета:

Сокет mysocket = getSocket(type = "TCP")Connect (mysocket, адрес = «203.0.113.0», порт = «80»)send(mysocket, «Привет, мир!»)закрыть (mysocket)

Типы

Доступны несколько типов интернет-розеток:

Датаграммные сокеты
Сокеты без установления соединения , использующие протокол пользовательских дейтаграмм (UDP). [4] Каждый пакет, отправленный или полученный через дейтаграммный сокет, адресуется и маршрутизируется индивидуально. Порядок и надежность не гарантируются при использовании дейтаграммных сокетов, поэтому несколько пакетов, отправленных с одной машины или процесса на другую, могут прийти в любом порядке или не прийти вообще. Для отправки широковещательных сообщений через дейтаграммный сокет может потребоваться специальная настройка . [5] Чтобы получать широковещательные пакеты, сокет дейтаграммы не должен быть привязан к определенному адресу, хотя в некоторых реализациях широковещательные пакеты также могут приниматься, когда сокет дейтаграммы привязан к определенному адресу. [6]
Потоковые сокеты
Сокеты , ориентированные на соединение , которые используют протокол управления передачей (TCP), протокол передачи управления потоком (SCTP) или протокол управления перегрузкой дейтаграмм (DCCP). Сокет потока обеспечивает упорядоченный и уникальный поток безошибочных данных без границ записей с четко определенными механизмами создания и разрушения соединений и сообщения об ошибках. Потоковый сокет надежно передает данные по порядку и с возможностью внеполосного доступа . В Интернете потоковые сокеты обычно реализуются с использованием TCP, поэтому приложения могут работать в любых сетях с использованием протокола TCP/IP.
Необработанные розетки
Разрешить прямую отправку и получение IP-пакетов без какого-либо форматирования транспортного уровня для конкретного протокола. При использовании сокетов других типов полезная нагрузка автоматически инкапсулируется в соответствии с выбранным протоколом транспортного уровня (например, TCP, UDP), и пользователь сокета не знает о существовании заголовков протокола , которые передаются вместе с полезной нагрузкой. При чтении из необработанного сокета обычно включаются заголовки. При передаче пакетов из необработанного сокета автоматическое добавление заголовка не является обязательным.
Большинство интерфейсов прикладного программирования сокетов (API), например основанные на сокетах Беркли , поддерживают необработанные сокеты. Windows XP была выпущена в 2001 году с поддержкой необработанных сокетов, реализованной в интерфейсе Winsock , но три года спустя Microsoft ограничила поддержку необработанных сокетов Winsock из соображений безопасности. [7]
Необработанные сокеты используются в приложениях, связанных с безопасностью, таких как Nmap . Одним из вариантов использования необработанных сокетов является реализация новых протоколов транспортного уровня в пользовательском пространстве . [8] Необработанные сокеты обычно доступны в сетевом оборудовании и используются для протоколов маршрутизации , таких как протокол управления группами Интернета (IGMP) и открытый кратчайший путь (OSPF), а также в протоколе управляющих сообщений Интернета (ICMP), который используется, среди прочего. вещи с помощью утилиты ping . [9]

Другие типы сокетов реализуются через другие транспортные протоколы, такие как системная сетевая архитектура [10] и сокеты домена Unix для внутреннего межпроцессного взаимодействия.

Состояния сокетов в модели клиент-сервер

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

TCP-сервер может обслуживать несколько клиентов одновременно, создавая уникальный выделенный сокет для каждого клиентского соединения в новом дочернем процессе или потоке обработки для каждого клиента. Они находятся в установленном состоянии , когда виртуальное соединение сокет-сокет или виртуальный канал (VC), также известный как сеанс TCP , устанавливается с удаленным сокетом, обеспечивая дуплексный поток байтов .

Сервер может создать несколько одновременно установленных TCP-сокетов с одинаковым номером локального порта и локальным IP-адресом, каждый из которых сопоставлен своему собственному дочернему процессу сервера и обслуживает свой собственный клиентский процесс. Операционная система рассматривает их как разные сокеты, поскольку адрес удаленного сокета (IP-адрес клиента или номер порта) отличается; т.е. поскольку они имеют разные кортежи пар сокетов.

Сокеты UDP не имеют установленного состояния , поскольку протокол не поддерживает соединение . Серверный процесс UDP обрабатывает входящие дейтаграммы от всех удаленных клиентов последовательно через один и тот же сокет. Сокеты UDP не идентифицируются по удаленному адресу, а только по локальному адресу, хотя каждое сообщение имеет связанный удаленный адрес, который можно получить из каждой дейтаграммы с помощью интерфейса программирования сетевых приложений (API).

Пары разъемов

Взаимодействующие локальные и удаленные сокеты называются парами сокетов . Каждая пара сокетов описывается уникальным набором из четырех кортежей , состоящим из IP-адресов источника и назначения, а также номеров портов, т. е. адресов локальных и удаленных сокетов. [11] [12] Как обсуждалось выше, в случае TCP пара сокетов связана на каждом конце соединения с уникальным четырехкортежом.

История

Термин «сокет» появился в 1971 году, когда был опубликован RFC 147, когда он использовался в ARPANET. Большинство современных реализаций сокетов основаны на сокетах Беркли (1983 г.) и других стеках, таких как Winsock (1991 г.). API сокетов Беркли в дистрибутиве программного обеспечения Беркли (BSD) возник в операционной системе Unix 4.2BSD в качестве API. Однако только в 1989 году Калифорнийский университет в Беркли смог выпустить версии своей операционной системы и сетевой библиотеки, свободные от лицензионных ограничений Unix компании AT&T , защищенной авторским правом .

В ц. В 1987 году AT&T представила интерфейс транспортного уровня (TLI) на основе STREAMS в UNIX System V Release 3 (SVR3). [13] и продолжилось в версии 4 (SVR4). [14]

Другие ранние реализации были написаны для TOPS-20 , [15] MVS , [15] VM , [15] IBM-DOS (PCIP). [15] [16]

Розетки в сетевом оборудовании

Сокет — это прежде всего концепция, используемая на транспортном уровне набора протоколов Интернета или сеансовом уровне модели OSI . Сетевое оборудование, такое как маршрутизаторы , работающие на интернет-уровне , и коммутаторы , работающие на канальном уровне , не требуют реализации транспортного уровня. Однако сетевые брандмауэры с отслеживанием состояния , трансляторы сетевых адресов и прокси-серверы отслеживают активные пары сокетов. В многоуровневых коммутаторах и поддержке качества обслуживания (QoS) в маршрутизаторах потоки пакетов могут быть идентифицированы путем извлечения информации о парах сокетов.

Необработанные сокеты обычно доступны в сетевом оборудовании и используются для протоколов маршрутизации, таких как IGRP и OSPF , а также для протокола управляющих сообщений Интернета (ICMP).

Смотрите также

Рекомендации

  1. ^ Программа Сетевой академии Cisco, Сопутствующее руководство CCNA 1 и 2, пересмотренное третье издание, P.480, ISBN  1-58713-150-1
  2. ^ RFC  147
  3. ^ Джек Уоллен (22 января 2019 г.). «Введение в командование СС».
  4. ^ В.С. Багад, И.А. Дхотре (2008), Компьютерные сети (5-е исправленное издание, изд. 2010 г.), Технические публикации Pune, стр. 52
  5. ^ SO_BROADCAST, Microsoft , получено 12 декабря 2019 г.
  6. ^ Класс DatagramSocket, Oracle , получено 12 декабря 2019 г.
  7. ^ Ян Гриффитс для IanG on Tap. 12 августа 2004 г. В XP SP2 исчезли Raw Sockets
  8. ^ «raw(7): необработанные сокеты IPv4 — справочная страница Linux» . сайт die.net .
  9. ^ «Часто задаваемые вопросы о сетях Raw IP» . faqs.org .
  10. ^ "www-306.ibm.com - Руководство AnyNet по сокетам через SNA" . Архивировано из оригинала 3 мая 2008 г. Проверено 7 сентября 2006 г.
  11. ^ book.google.com - Сетевое программирование UNIX: API сетевых сокетов.
  12. ^ book.google.com - Разработка руткитов BSD: введение во взлом ядра
  13. ^ (Гудхарт 1994, стр. 11)
  14. ^ (Гудхарт 1994, стр. 17)
  15. ^ abcd "historyofcomputercommunication.info - Книга: 9.8 TCP/IP и XNS 1981–1983" . Архивировано из оригинала 17 июня 2018 г. Проверено 18 февраля 2011 г.
  16. ^ Настольный компьютер как участник сети.pdf, 1985 г.

дальнейшее чтение

Внешние ссылки