Сетевой сокет - Network socket
Эта статья нужны дополнительные цитаты для проверка.Ноябрь 2017 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
А сетевой разъем это программная структура внутри сетевой узел из компьютерная сеть который служит конечной точкой для отправки и получения данных по сети. Структура и свойства сокета определяются интерфейс прикладного программирования (API) для сетевой архитектуры. Сокеты создаются только во время жизни процесс приложения, запущенного в узле.
Из-за стандартизации TCP / IP протоколы в разработке Интернет, период, термин сетевой разъем чаще всего используется в контексте Пакет Интернет-протокола, поэтому его часто называют Интернет-розетка. В этом контексте сокет внешне идентифицируется для других хостов по его адрес сокета, которая является триадой транспортный протокол, айпи адрес, и номер порта.
Период, термин разъем также используется для конечной точки программного обеспечения внутреннего узла межпроцессного взаимодействия (IPC), который часто использует тот же API, что и сетевой сокет.
Использовать
Использование термина разъем в программном обеспечении аналогична функции электрического гнездовой разъем, аппаратное устройство для связи между узлами, связанными с электрический кабель. Аналогично, термин порт используется для внешних физических конечных точек на узле или устройстве.
Интерфейс прикладного программирования (API) для стека сетевых протоколов создает ручка для каждого сокета, созданного приложением, обычно называемого дескриптор сокета. В Unix-подобные операционные системы, этот дескриптор является разновидностью дескриптор файла. Он сохраняется в процессе приложения для использования с каждой операцией чтения и записи в канале связи.
Во время создания с помощью API сетевой сокет привязан к комбинации типа сетевого протокола, который будет использоваться для передачи, сетевого адреса хоста и номер порта. Порты - это нумерованные ресурсы, которые представляют другой тип программной структуры узла. Они используются в качестве типов служб и, будучи однажды созданными процессом, служат в качестве адресуемого извне (из сети) компонента местоположения, чтобы другие хосты могли устанавливать соединения.
Сетевые сокеты могут быть выделены для постоянных подключений для связи между двумя узлами, или они могут участвовать в без подключения и многоадресная передача коммуникации.
На практике, в связи с распространением протоколов TCP / IP, используемых в Интернете, термин сетевой разъем обычно относится к использованию с протокол Интернета (IP). Поэтому его часто также называют Интернет-розетка.
Адреса сокетов
Приложение может взаимодействовать с удаленным процессом, обмениваясь данными с TCP / IP, зная комбинацию типа протокола, IP-адреса и номера порта. Эта комбинация часто известна как адрес сокета. Это сетевой дескриптор доступа к сетевому сокету. Удаленный процесс устанавливает сетевой сокет в своем собственном экземпляре стека протоколов и использует сетевой API для подключения к приложению, представляя свой собственный адрес сокета для использования приложением.
Выполнение
А стек протоколов, обычно предоставляемые Операционная система (а не как отдельная библиотека, например) - это набор служб, которые позволяют процессам обмениваться данными по сети с использованием протоколов, которые реализует стек. Операционная система перенаправляет полезную нагрузку входящих IP-пакетов в соответствующее приложение, извлекая информацию об адресе сокета из заголовков IP и транспортного протокола и удаляя заголовки из данных приложения.
В интерфейс прикладного программирования (API), который программы используют для связи со стеком протоколов с помощью сетевых сокетов, называется сокет API. Разработка прикладных программ, использующих этот API, называется программирование сокетов или же сетевое программирование. API-интерфейсы интернет-сокетов обычно основаны на Розетки Berkeley стандарт. В стандарте сокетов Беркли сокеты представляют собой форму дескриптор файла, из-за Философия Unix что «все есть файл» и аналогии между сокетами и файлами. У обоих есть функции для чтения, записи, открытия и закрытия. На практике различия усиливают аналогию, и в сокете используются разные интерфейсы (отправка и получение). В межпроцессного взаимодействия, каждый конец обычно имеет собственное гнездо.
В стандартных интернет-протоколах TCP и UDP адрес сокета представляет собой комбинацию айпи адрес и номер порта, так же как один конец телефонного соединения - это комбинация телефонный номер и конкретный расширение. Сокеты не обязательно должны иметь адрес источника, например, только для отправки данных, но если программа связывает сокет на исходный адрес, сокет может использоваться для получения данных, отправленных на этот адрес. На основе этого адреса интернет-розетки доставляют входящие пакеты данных в соответствующее приложение процесс.
Разъем часто относится конкретно к интернет-сокету или TCP-сокету. Интернет-розетка минимально характеризуется следующим:
- адрес локального сокета, состоящий из локального IP-адреса и (для TCP и UDP, но не IP) номера порта
- протокол: транспортный протокол, например TCP, UDP, необработанный IP. Это означает, что (локальные или удаленные) конечные точки с TCP-портом 53 и UDP-портом 53 являются разными сокетами, в то время как IP не имеет портов.
- Сокет, который был подключен к другому сокету, например, во время установления TCP-соединения, также имеет адрес удаленного сокета.
Определение
Различия между сокетом (внутренним представлением), дескриптором сокета (абстрактный идентификатор) и адресом сокета (общедоступным адресом) тонкие, и они не всегда различаются при повседневном использовании. Кроме того, конкретные определения разъем разные авторы. В IETF Запрос комментариев, Интернет-стандарты, во многих учебниках, а также в этой статье термин разъем относится к объекту, который однозначно идентифицируется номером сокета. В других учебниках[1] период, термин разъем относится к локальному адресу сокета, то есть «комбинации IP-адреса и номера порта». В исходном определении разъем приведены в RFC 147, поскольку это было связано с Сеть ARPA в 1971 г., "сокет определяется как 32-битное число с четными сокетами, определяющими принимающие сокеты, и нечетными сокетами, определяющими отправляющие сокеты." Однако сегодня связь через сокеты является двунаправленной.
В операционной системе и приложении, создавшем сокет, на сокет ссылается уникальное целочисленное значение, называемое дескриптор сокета.
Инструменты
В Unix-подобных операционных системах и Майкрософт Виндоус, инструменты командной строки netstat или же SS[2] используются для перечисления установленных сокетов и связанной информации.
Пример
Этот пример, смоделированный в соответствии с интерфейсом сокета Беркли, отправляет строку "Hello, world!" через TCP на порт 80 хоста с адресом 1.2.3.4. Он иллюстрирует создание сокета (getSocket), подключение его к удаленному хосту, отправку строки и, наконец, закрытие сокета:
Сокет mysocket = getSocket (type = "TCP") connect (mysocket, address = "1.2.3.4", port = "80") send (mysocket, "Hello, world!") Close (mysocket)
Типы
Доступны несколько типов интернет-розеток:
- Сокеты дейтаграмм
- Без подключения розетки, которые используют Протокол пользовательских датаграмм (UDP).[3] Каждый пакет, отправленный или полученный через сокет дейтаграммы, адресуется и маршрутизируется индивидуально. Порядок и надежность не гарантируются для сокетов дейтаграмм, поэтому несколько пакетов, отправленных с одного компьютера или процесса на другой, могут прибыть в любом порядке или могут не поступить вообще. Для отправки может потребоваться особая конфигурация трансляции на сокете дейтаграммы.[4] Для приема широковещательных пакетов сокет дейтаграммы не должен быть привязан к определенному адресу, хотя в некоторых реализациях широковещательные пакеты также могут приниматься, когда сокет дейтаграммы привязан к определенному адресу.[5]
- Потоковые сокеты
- Ориентированный на соединение розетки, которые используют Протокол управления передачей (TCP), Протокол передачи управления потоком (SCTP) или Протокол управления перегрузкой дейтаграмм (DCCP). Потоковый сокет обеспечивает последовательный и уникальный поток безошибочных данных без границ записей, с четко определенными механизмами для создания и разрушения соединений и сообщений об ошибках. Потоковый сокет передает данные надежно, по порядку и с из группы возможности. В Интернете потоковые сокеты обычно реализуются с использованием TCP, поэтому приложения могут работать в любых сетях с использованием протокола TCP / IP.
- Необработанные сокеты
- Разрешить прямую отправку и получение IP-пакетов без какого-либо форматирования транспортного уровня для конкретного протокола. С другими типами розеток полезная нагрузка автоматически инкапсулированный в соответствии с выбранным протоколом транспортного уровня (например, TCP, UDP), и пользователь сокета не знает о существовании протокола заголовки которые транслируются вместе с полезной нагрузкой. При чтении из сырого сокета заголовки обычно включаются. При передаче пакетов из сырого сокета автоматическое добавление заголовка не является обязательным.
- Большая розетка интерфейсы прикладного программирования (API), например, основанные на Розетки Berkeley, поддержка сырых сокетов. 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. Большинство современных реализаций сокетов основаны на Розетки Berkeley (1983) и другие стеки, такие как Winsock (1991). API сокетов Беркли в Распространение программного обеспечения Беркли (BSD), возникла в 4.2BSD Операционная система Unix как API. Однако только в 1989 г. Калифорнийский университет в Беркли выпускать версии своей операционной системы и сетевой библиотеки без лицензионных ограничений AT&T охраняется авторским правом Unix.
В c. 1987, AT&T представила ПОТОКИ -основан Интерфейс транспортного уровня (TLI) в Система UNIX V Выпуск 3 (SRV3).[12] и продолжена в версии 4 (SVR4).[13]
Другие ранние реализации были написаны для ТОП-20,[14] MVS,[14] ВМ,[14] IBM-DOS (ПКИП).[14][15]
Розетки в сетевом оборудовании
Сокет - это в первую очередь концепция, используемая на транспортном уровне Интернет-модель. Сетевое оборудование, такое как маршрутизаторы и переключатели не требуют реализации транспортного уровня, так как они работают в уровень связи уровень (переключатели) или в Интернет-уровень (роутеры). Однако с сохранением состояния сетевые брандмауэры, трансляторы сетевых адресов, и прокси-серверы отслеживают активные пары сокетов. Также в честная очередь, переключение уровня 3 и качество обслуживания (QoS) поддержка в маршрутизаторах, потоки пакетов может быть идентифицирован путем извлечения информации о парах сокетов. Необработанные сокеты обычно доступны в сетевом оборудовании и используются для протоколы маршрутизации Такие как IGRP и OSPF, И в Протокол управляющих сообщений Интернета (ICMP).
Смотрите также
Рекомендации
- ^ Программа Cisco Networking Academy, CCNA 1 и 2 Companion Guide Revised Third Edition, P.480, ISBN 1-58713-150-1
- ^ Джек Уоллен (22.01.2019). "Введение в команду SS".
- ^ В. С. Багад, И. А. Дхотре (2008 г.), Компьютерная сеть (5-е пересмотренное издание, изд. 2010 г.), Technical Publications Pune, p. 52
- ^ SO_BROADCAST, Microsoft, получено 2019-12-12
- ^ Класс DatagramSocket, Oracle, получено 2019-12-12
- ^ Ян Гриффитс для IanG on Tap. 12 августа 2004 г. Необработанные сокеты, исчезнувшие в XP SP2
- ^ "raw (7): необработанные сокеты IPv4 - справочная страница Linux". die.net.
- ^ «Часто задаваемые вопросы по необработанным IP-сетям». faqs.org.
- ^ "www-306.ibm.com - Руководство AnyNet по сокетам через SNA". Архивировано из оригинал на 2008-05-03. Получено 2006-09-07.
- ^ books.google.com - Сетевое программирование UNIX: сетевой API сокетов
- ^ books.google.com - Разработка руткитов BSD: введение в взлом ядра
- ^ (Гудхарт 1994, п. 11)
- ^ (Гудхарт 1994, п. 17)
- ^ а б c d historyofcomputercommunications.info - Книга: 9.8 TCP / IP и XNS 1981 - 1983
- ^ Настольный компьютер как участник сети.pdf 1985
внешняя ссылка
- Как работают розетки - Информационный центр IBM
- Серверное программирование с сокетами TCP / IP
- Руководство Beej по сетевому программированию
- Учебники по Java: основы работы в сети
- Net :: RawIP; модуль для приложений Perl. Сделано Сергей Колычев.
- Сетевое программирование для Microsoft Windows (ISBN 0-7356-1579-9)
- Еще немного информации о сырых сокетах и Windows XP SP2 - веб-журнал Майкла Ховарда указание на то, что на самом деле разрешено в Windows.
- SOCK_RAW Demystified: статья, описывающая внутреннюю работу Raw Sockets
- Примеры сырых сокетов Linux для IPv4 и IPv6 на языке C - Примеры необработанных сокетов IPv4 и IPv6 на языке C Дэвида Бучана для Linux.