Может ли кто-нибудь объяснить мне, что такое сокет? Я вижу это во многих аббревиатурах в контексте SSL и т. Д.
Кроме того, почему это называется сокетом? Это просто потому, что это было какое имя они придумали? Или это было их первое имя?
networking
history
terminology
socket
chrisjlee
источник
источник
Ответы:
Сокет - это просто логическая конечная точка для общения. Они существуют на транспортном уровне. Вы можете отправлять и получать вещи в сокет, вы можете связывать и слушать сокет. Сокет специфичен для протокола, компьютера и порта и адресуется как таковой в заголовке пакета.
Руководства Биджа по сетевому программированию и межпроцессному взаимодействию содержат хорошую информацию о том, как использовать сокеты, и даже отвечают на этот точный вопрос .
источник
Проще говоря, сокет - это псевдофайл, представляющий сетевое соединение. Как только сокет был создан (используя надлежащие примитивы и соответствующие параметры для идентификации другого хоста), записи в сокет превращаются в сетевые пакеты, которые отправляются, и данные, полученные из сети, могут считываться из сокета.
С одной стороны, сокеты очень похожи на каналы: они выглядят как файлы для программ, использующих их, но не приводят к чтению или записи на диск; скорее, они позволяют общаться с другой программой (локальной в случае каналов и, возможно, удаленной в случае сокетов). Они также предлагают, как вы упоминаете, двунаправленную связь (так же, как пара правильно соединенных каналов).
Наконец, программы на одном компьютере обычно общаются с использованием стандартных сетевых протоколов, таких как TCP; было бы расточительно пройти весь путь к сетевому оборудованию (если оно есть!), вычислить контрольные суммы и т. д., просто вернуться на тот же хост: вот где появляются сокеты доменов Unix. Это очень похоже на обычные сокеты, за исключением они связывают процессы на одном хосте, а не удаленные процессы, и вообще не пытаются использовать какие-либо сетевые ресурсы. Таким образом, они являются средой межпроцессного взаимодействия.
Как упоминалось в tripleee, в ходе истории BSD трубы были введены раньше, чем сокеты, и были заново реализованы с использованием сокетов, как только они появились. В той же ссылке, «Проектирование и реализация операционной системы FreeBSD» , упоминается, что каналы были затем возвращены к реализации без сокетов по соображениям производительности: это, безусловно, подчеркивает тот факт, что каналы имеют сходство.
источник
Сокет абстракция. Он обеспечивает интерфейс для приложений, чтобы использовать системный ресурс (в данном случае сетевое соединение) таким образом, который позволяет операционной системе опосредовать и организовать использование ограниченного ресурса любым количеством приложений.
Если данные, отправляемые через сокет, можно рассматривать как почтовые конверты, тогда сокет будет вашим почтовым ящиком. Вы прикрепляете почтовый ящик (сокет) к своему дому (программе) и помещаете в него исходящую почту (данные). В назначенное время приходит почтальон (операционная система), забирает вашу исходящую почту и отбрасывает любую входящую почту в том же почтовом ящике. Ваша исходящая почта передается от вашего имени получателю через грузовик почтальона (сетевое соединение) вместе со всей почтой ваших соседей. Это позволяет вам вести переписку с людьми, находящимися далеко, без необходимости тратить время, трудности и т. Д. На доставку письма самостоятельно.
Что касается того, почему их хорошо называют «розетками», то здесь большую роль играет идея, что изобретатели могут называть это как угодно. Хотя, на мой взгляд, это не плохое имя :)
источник
Теперь, что это?
Сокет или «сокет» может состоять из нескольких вещей:
Прежде всего, это модель мышления и интерфейс прикладного программирования (API) . Это означает, что у вас есть набор правил, которым вы должны следовать, и набор функций, которые вы можете использовать для написания программ, которые что-то делают, в соответствии с четко определенным контрактом. В данном конкретном случае что-то означает обмен данными с другой программой.
API сокетов широко абстрагирует детали «общения» в целом. Он включает в себя, с кем и как вы разговариваете, через одну (почти) последовательную и идентичную форму печенья.
Вы можете создавать сокеты в разных «доменах» (таких как, например, «сокет unix» или «интернет-сокет») и для разных типов связи (например, сокет «дейтаграмма» или «потоковый» сокет) и общаться с разными получателями. и все работает точно так же (ну, 99%, очевидно, есть небольшие различия, которые вам придется учитывать).
Вам не нужно знать (и вы даже не хотите знать!), Разговариваете ли вы с другой программой на том же компьютере или на другом компьютере, или между этими компьютерами существует сеть IPv4 или IPv6, или, возможно, какой-то другой протокол, о котором вы никогда не слышали.
socket
также имя библиотечной функции (или syscall), которая создает «сокет », который представляет собой особый тип файла (в Unix все является файлом).Как это сравнивается с ...
Канал - это средство односторонней связи между читателем и писателем (обе программы) на одном компьютере. Он имитирует поток данных (как, например, TCP).
То есть, с точки зрения канала не существует отдельных «сообщений» или «блоков данных». Вы можете скопировать любое количество данных в «один конец», а кто-то другой может прочитать любое количество данных (не обязательно одинаковое и не обязательно за один раз) на «другом конце» в том же порядке байтов, что и вы толкнул его.
Имя труба, ну, просто труба , которая имеет имя в файловой системе . То есть это то, что выглядит и ведет себя как файл, оно появляется в списке каталогов, и вы можете открыть его, записать в него, и т. Д. И т. Д. Обратите внимание, что вы также можете создавать специальные файлы сокетов (которые будут именованными сокетами) ,
Сокет, с другой стороны, является средством двусторонней («дуплексной») связи, что означает, что вы можете записывать и читать из одного и того же сокета, и вам не нужны два отдельных сокета для двусторонней связи.
Кроме того, сокет может действовать как поток (идентичный каналу), или он может отправлять дискретные, ненадежные сообщения, или он может отправлять дискретные, упорядоченные сообщения (первые два работают в любом домене, последние только в «домене unix»). ). Он может отправлять сообщения (или имитировать поток) кому-то на совершенно другом компьютере. Сокет может даже выполнять форму связи «один ко многим» (многоадресная передача) в некоторых условиях.
Имея это в виду, ясно, что сокеты делают что-то намного более сложное и обычно имеют больше служебных данных, чем конвейеры (которые в основном не более, чем простой
memcpy
буфер и из буфера!), Но если вы создаете локальные сокеты (то есть на одном и том же компьютер), операционная система обычно применяет сильно оптимизированный быстрый путь, так что на самом деле нет особой разницы.Да, сокеты являются одним из возможных способов межпроцессного взаимодействия (совместно используемая память и каналы являются примерами альтернатив). Все в то же время они используются для «сетевого взаимодействия», как описано выше.
источник
Для UDP или TCP по IP,
Адрес сокета - это комбинация IP-адреса и номера порта.
IP-адрес - это адрес машины в интернете, например
unix.stackexchange.com has address 198.252.206.140
Однако каждая машина должна иметь возможность предоставлять более одной службы, поэтому большинство машин будет предоставлять http (веб-страницы) на порт 80, ssh на порт 22 и т. Д.
Поэтому
unix.stackexchange.com:80
порт80
изunix.stackexchange.com
(гнездо) является точкой доступа данного веб - сайта.Однако есть и другие типы сокетов, см. Комментарии ниже.
источник
AF_INET
сокеты IP ( ).Я полагаю, что вы спросили о сети Поэтому службы TCP используют сокеты в качестве точки для связи и состоят из IP-адреса, протокола и номера порта.
источник