Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Используйте [ редактировать ]

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

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

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

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

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

Адреса сокетов [ править ]

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

Реализация [ править ]

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

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

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

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

  • адрес локального сокета, состоящий из локального IP-адреса и (для TCP и UDP, но не IP) номера порта
  • протокол: транспортный протокол, например TCP, UDP, необработанный IP. Это означает, что (локальные или удаленные) конечные точки с TCP-портом 53 и UDP-портом 53 являются разными сокетами, в то время как IP не имеет портов.
  • Сокет, который был подключен к другому сокету, например, во время установления TCP-соединения, также имеет адрес удаленного сокета.

Определение [ править ]

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

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

Инструменты [ править ]

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

Пример [ править ]

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

Сокет mysocket = getSocket (type = "TCP")подключить (mysocket, address = "1.2.3.4", порт = "80")send (mysocket, «Привет, мир!»)закрыть (mysocket)

Типы [ править ]

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

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

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

Состояния сокетов в модели клиент-сервер [ править ]

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

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

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

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

Пары сокетов [ править ]

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

История [ править ]

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

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

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

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

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

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

См. Также [ править ]

  • Список номеров портов TCP и UDP
  • Беспорядочный трафик
  • WebSocket

Ссылки [ править ]

  1. ^ Программа Cisco Networking Academy, CCNA 1 и 2 Companion Guide Revised Third Edition, P.480, ISBN  1-58713-150-1
  2. ^ Джек Уоллен (22.01.2019). «Введение в команду SS» .
  3. ^ В. С. Bagad, И. А. Dhotre (2008), компьютерных сетей (5 - е переработанное издание, 2010 -е изд.), Технические публикации Пуна, стр. 52
  4. ^ SO_BROADCAST , Microsoft , получено 12 декабря 2019 г.
  5. ^ Класс DatagramSocket , Oracle , получено 12 декабря 2019 г.
  6. ^ Ян Гриффитс для IanG on Tap. 12 августа 2004 г. Необработанные сокеты исчезли в XP SP2
  7. ^ «raw (7): необработанные сокеты IPv4 - справочная страница Linux» . die.net .
  8. ^ "Часто задаваемые вопросы по необработанной IP-сети" . faqs.org .
  9. ^ "www-306.ibm.com - Руководство AnyNet по сокетам через SNA" . Архивировано из оригинала на 2008-05-03 . Проверено 7 сентября 2006 .
  10. ^ books.google.com - Сетевое программирование UNIX: API сети сокетов
  11. ^ books.google.com - Разработка руткитов BSD: Введение в взлом ядра
  12. ^ ( Гудхарт 1994 , стр.11 )
  13. ^ ( Goodheart 1994 , стр.17 )
  14. ^ a b c d historyofcomputercommunications.info - Книга: 9.8 TCP / IP и XNS 1981 - 1983
  15. ^ Настольный компьютер как участник сети.pdf 1985

Дальнейшее чтение [ править ]

  • Джонс, Энтони; Олунд, Джим (2002). Сетевое программирование для Microsoft Windows . ISBN 0-7356-1579-9.

Внешние ссылки [ править ]

  • Как работают сокеты - информационный центр IBM
  • Серверное программирование с сокетами TCP / IP [ мертвая ссылка ]
  • Руководство Beej по сетевому программированию
  • Учебники по Java: основы работы в сети
  • Net :: RawIP; модуль для приложений Perl. Создано Сергеем Колычевым .
  • SOCK_RAW Demystified: статья, описывающая внутреннюю работу Raw Sockets
  • Примеры необработанных сокетов Linux для IPv4 и IPv6 на языке C - Примеры необработанных сокетов IPv4 и IPv6 Дэвида Бучана на языке C для Linux.