Этот вопрос был задан одним из разработчиков программного обеспечения в моей организации. Я заинтересован в самом широком определении.
Этот вопрос был задан одним из разработчиков программного обеспечения в моей организации. Я заинтересован в самом широком определении.
Ответы:
Сокет TCP - это экземпляр конечной точки, определяемый IP-адресом и портом в контексте определенного соединения TCP или состояния прослушивания.
Порт - это идентификатор виртуализации, определяющий конечную точку службы (в отличие от конечной точки экземпляра службы или идентификатора сеанса).
TCP-сокет не является соединением , это конечная точка определенного соединения.
Могут быть одновременные соединения с конечной точкой службы , поскольку соединение идентифицируется как локальными, так и удаленными конечными точками, что позволяет маршрутизировать трафик к конкретному экземпляру службы.
Для данной комбинации адрес / порт может быть только один сокет прослушивателя .
Это был интересный вопрос, который заставил меня пересмотреть ряд вещей, которые, как я думал, я знал наизнанку. Вы могли бы подумать, что имя типа «сокет» было бы само собой разумеющимся: оно, очевидно, было выбрано, чтобы вызывать образы конечной точки, в которую вы подключаете сетевой кабель, при этом существуют сильные функциональные параллели. Тем не менее, на языке сети слово «розетка» несет в себе столько багажа, что необходим тщательный повторный осмотр.
В самом широком смысле порт является точкой входа или выхода. Хотя французское слово porte не используется в контексте сети, оно буквально означает дверь или шлюз , что еще более подчеркивает тот факт, что порты являются конечными точками транспортировки, независимо от того, отправляете вы данные или большие стальные контейнеры.
Для целей этого обсуждения я ограничусь рассмотрением контекста сетей TCP-IP. Модель OSI все очень хорошо, но никогда не была полностью реализована, и гораздо менее широко развернута в условиях высокой нагрузки и высокой нагрузки.
Комбинация IP-адреса и порта строго известна как конечная точка и иногда называется сокетом. Это использование происходит с RFC793, оригинальной спецификации TCP.
TCP- соединение определяется двумя конечными точками или сокетами .
Конечная точка (сокет) определяется комбинацией сетевого адреса и идентификатора порта . Обратите внимание, что адрес / порт не полностью идентифицирует сокет (подробнее об этом позже).
Назначение портов состоит в том, чтобы различать несколько конечных точек на данном сетевом адресе. Можно сказать, что порт является виртуальной конечной точкой. Эта виртуализация делает возможным одновременное подключение нескольких соединений к одному сетевому интерфейсу.
Именно пара сокетов (4-кортеж, состоящий из IP-адреса клиента, номера порта клиента, IP-адреса сервера и номера порта сервера) определяет две конечные точки, которые однозначно идентифицируют каждое TCP-соединение в Интернете. ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)
В большинстве языков, производных от C, TCP-соединения устанавливаются и управляются с использованием методов в экземпляре класса Socket. Хотя обычно работает на более высоком уровне абстракции, обычно это экземпляр класса NetworkStream, обычно это предоставляет ссылку на объект сокета. Кодеру этот объект сокета, по-видимому, представляет соединение, поскольку соединение создается и управляется с использованием методов объекта сокета.
В C # для установления TCP-соединения (с существующим слушателем) сначала вы создаете TcpClient . Если вы не указываете конечную точку для конструктора TcpClient, он использует значения по умолчанию - так или иначе определяется локальная конечная точка. Затем вы вызываете метод Connect для созданного вами экземпляра. Этот метод требует параметр, описывающий другую конечную точку.
Все это немного сбивает с толку и приводит вас к мысли, что сокет - это соединение, которое является бредом. Я работал над этим заблуждением, пока Ричард Дорман не задал вопрос.
После долгих чтений и размышлений я убежден, что было бы гораздо разумнее иметь класс TcpConnection с конструктором, который принимает два аргумента: LocalEndpoint и RemoteEndpoint . Возможно, вы могли бы поддерживать единственный аргумент RemoteEndpoint, когда значения по умолчанию приемлемы для локальной конечной точки. Это неоднозначно на многосетевых компьютерах, но неоднозначность может быть решена с помощью таблицы маршрутизации путем выбора интерфейса с кратчайшим маршрутом к удаленной конечной точке.
Ясность будет улучшена и в других отношениях. Сокет не определяется комбинацией IP-адреса и порта:
[...] TCP демультиплексирует входящие сегменты, используя все четыре значения, которые содержат локальные и внешние адреса: IP-адрес назначения, номер порта назначения, IP-адрес источника и номер порта источника. TCP не может определить, какой процесс получает входящий сегмент, глядя только на порт назначения. Кроме того, единственная из [различных] конечных точек в [заданном номере порта], которая будет принимать входящие запросы на соединение, - это та, которая находится в состоянии прослушивания. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)
Как видите, у сетевой службы не только возможно, но и вполне вероятно иметь множество сокетов с одним и тем же адресом / портом, но только один сокет прослушивателя для конкретной комбинации адрес / порт. Типичные реализации библиотеки представляют класс сокетов, экземпляр которого используется для создания и управления соединением. Это крайне неудачно, поскольку вызывает путаницу и приводит к широко распространенному слиянию двух концепций.
Хагравал мне не верит (см. Комментарии), так что вот реальный пример. Я подключил веб-браузер к http://dilbert.com, а затем побежал netstat -an -p tcp
. Последние шесть строк выходных данных содержат два примера того, что адреса и порта недостаточно для однозначной идентификации сокета. Между 192.168.1.3 (моя рабочая станция) и 54.252.94.236:80 (удаленный HTTP-сервер) существует два разных соединения.
TCP 192.168.1.3:63240 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63241 54.252.94.236:80 SYN_SENT
TCP 192.168.1.3:63242 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:63243 207.38.110.62:80 SYN_SENT
TCP 192.168.1.3:64161 65.54.225.168:443 ESTABLISHED
Поскольку сокет является конечной точкой соединения, есть два сокета с комбинацией адрес / порт 207.38.110.62:80
и еще два с комбинацией адрес / порт 54.252.94.236:80
.
Я думаю, что недоразумение Хагравала проистекает из моего очень осторожного использования слова «идентифицирует». Я имею в виду «полностью, однозначно и однозначно идентифицирует». В приведенном выше примере есть две конечные точки с комбинацией адрес / порт 54.252.94.236:80
. Если у вас есть только адрес и порт, у вас недостаточно информации, чтобы разделить эти сокеты. Недостаточно информации для идентификации сокета.
Во втором абзаце раздела 2.7 RFC793 говорится
Соединение полностью определяется парой розеток на концах. Локальный сокет может участвовать во многих соединениях с различными сторонними сокетами.
Это определение сокета не полезно с точки зрения программирования, потому что оно не совпадает с объектом сокета , который является конечной точкой определенного соединения. Для программиста, и большая часть аудитории этого вопроса - программисты, это жизненно важное функциональное различие.
Сокет состоит из трех вещей:
Порт - это число от 1 до 65535 включительно, которое обозначает логический шлюз в устройстве. Каждое соединение между клиентом и сервером требует уникального сокета.
Например:
Сокет представляет собой одно соединение между двумя сетевыми приложениями. Эти два приложения обычно работают на разных компьютерах, но сокеты также могут использоваться для межпроцессного взаимодействия на одном компьютере. Приложения могут создавать несколько сокетов для общения друг с другом. Сокеты являются двунаправленными, это означает, что любая сторона соединения способна отправлять и получать данные. Поэтому теоретически сокет может быть создан на любом уровне модели OSI от 2 и выше. Программисты часто используют сокеты в сетевом программировании, хотя и косвенно. Библиотеки программирования, такие как Winsock, скрывают многие детали низкоуровневого программирования сокетов. Розетки широко используются с начала 1980-х годов.
Порт представляет собой конечную точку или «канал» для сетевых коммуникаций. Номера портов позволяют различным приложениям на одном компьютере использовать сетевые ресурсы, не мешая друг другу. Номера портов чаще всего появляются в программировании сети, особенно в программировании сокетов. Однако иногда номера портов становятся видимыми для обычного пользователя. Например, некоторые веб-сайты, которые человек посещает в Интернете, используют URL-адрес, подобный следующему:
http://www.mairie-metz.fr:8080/ В этом примере номер 8080 относится к номеру порта, который используется веб-браузером для подключения к веб-серверу. Обычно веб-сайт использует номер порта 80, и этот номер не обязательно должен быть включен в URL (хотя это может быть).
В IP-сети номера портов теоретически могут варьироваться от 0 до 65535. Однако большинство популярных сетевых приложений используют номера портов в нижней части диапазона (например, 80 для HTTP).
Примечание. Термин порт также относится к нескольким другим аспектам сетевых технологий. Порт может относиться к физической точке подключения для периферийных устройств, таких как последовательные, параллельные и USB-порты. Термин порт также относится к определенным точкам подключения Ethernet, таким как точки на концентраторе, коммутаторе или маршрутизаторе.
ссылка http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
ссылка http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
С некоторой аналогией
Хотя для сокетов уже приведено много технических вещей ... Я хотел бы добавить свой ответ, на всякий случай, если кто-то все еще не может почувствовать разницу между ip, портом и сокетами
Рассмотрим сервер S ,
и сказать человеку X, Y, Z нужна служба (скажем, служба чата) с этого сервера S
тогда
IP-адрес говорит -> кто? тот сервер чата 'S', с которым X, Y, Z хочет связаться
хорошо, вы получили "кто сервер"
но предположим, что сервер 'S' также предоставляет некоторые другие услуги другим людям, скажем, 'S' предоставляет услуги хранения человеку A, B, C
тогда
порт говорит ---> который? сервис, который вам (X, Y, Z) нужен, т.е. сервис чата, а не сервис хранения
ладно .., вы заставляете сервер знать, что вам нужен чат-сервис, а не хранилище
но
вам три года, и сервер может захотеть идентифицировать все три по-разному
приходит розетка
теперь сокет говорит -> какой? конкретное соединение
то есть, скажем,
розетка 1 для человека X
розетка 2 для человека Y
и розетка 3 для человека Z
Я надеюсь, что это помогает кому-то, кто был все еще смущен :)
Во-первых, я думаю, что мы должны начать с небольшого понимания того, что представляет собой получение пакета от А до Б.
Распространенным определением для сети является использование модели OSI, которая разделяет сеть на несколько уровней в соответствии с назначением. Есть несколько важных, которые мы рассмотрим здесь:
TCP содержит, помимо прочего, концепцию портов . Это фактически разные конечные точки данных на одном и том же IP-адресе, с которыми AF_INET
может связываться интернет-сокет ( ).
Как это происходит, то же самое происходит и с UDP , и с другими протоколами транспортного уровня. С технической точки зрения им нет необходимости использовать порты, но эти порты позволяют нескольким приложениям на вышеприведенных уровнях использовать один и тот же компьютер для получения (и даже создания) исходящих соединений.
Что подводит нас к анатомии соединения TCP или UDP. Каждый из них имеет порт и адрес источника, а также целевой порт и адрес. Это делается для того, чтобы в любом данном сеансе целевое приложение могло отвечать, а также получать от источника.
Таким образом, порты - это, по сути, предписанный спецификациями способ, позволяющий нескольким одновременным соединениям использовать один и тот же адрес.
Теперь нам нужно взглянуть на то, как вы общаетесь с точки зрения приложения с внешним миром. Для этого вам необходимо обратиться к своей операционной системе, и, поскольку большинство операционных систем поддерживают способ работы сокетов Berkeley, мы видим, что мы можем создавать сокеты с использованием портов из приложения, например:
int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...
Большой! Так что в sockaddr
структурах мы будем указывать наш порт и бац! Работа выполнена! Ну, почти, кроме:
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
тоже возможно. Эх, вот и бросил гаечный ключ в работах!
Хорошо, на самом деле это не так. Все, что нам нужно сделать, это придумать некоторые соответствующие определения:
/var/run/database.sock
.Вуаля! Это приводит в порядок вещи. Так что в нашей схеме тогда
Так что на самом деле порт является подмножеством требований для формирования интернет-сокета. К сожалению, так уж получилось, что значение слова «сокет» было применено к нескольким различным идеям. Поэтому я от всей души советую вам назвать ваш следующий проект сокет, просто чтобы добавить в замешательство;)
Сокет = IP-адрес + порт (числовой адрес)
Вместе они определяют конечную точку для сетевого подключения на машине. (Я только что провалил сеть 101?)
Как правило, вы получите много теоретического, но один из самых простых способов различить эти два понятия заключается в следующем:
Чтобы получить услугу, вам нужен сервисный номер. Этот сервисный номер называется портом. Просто как тот.
Например, HTTP как служба работает на порту 80.
Теперь многие люди могут запросить услугу, и соединение с клиент-сервером установлено. Там будет много связей. Каждое соединение представляет клиента. Чтобы поддерживать каждое соединение, сервер создает сокет для каждого соединения для поддержки своего клиента.
Кажется, есть много ответов, приравнивающих сокет к соединению между двумя компьютерами, что я считаю абсолютно неправильным. Сокет всегда был конечной точкой на 1 ПК, который может или не может быть подключен - конечно, мы все использовали сокеты слушателя или UDP * в какой-то момент. Важной частью является то, что он адресуемый и активный. Отправка сообщения в 1.1.1.1:1234 вряд ли будет работать, так как для этой конечной точки не определен сокет.
Сокеты зависят от протокола, поэтому реализация уникальности, которую используют как TCP / IP, так и UDP / IP * (ipaddress: порт), отличается от, например, IPX (сеть, узел и ... гм, сокет), но отличается сокет, чем подразумевается под общим термином «сокет». Номера сокетов IPX эквивалентны портам IP). Но все они предлагают уникальную адресуемую конечную точку.
Поскольку IP стал доминирующим протоколом, порт (в терминах сети) стал синонимичным с номером порта UDP или TCP - который является частью адреса сокета.
UDP не требует соединения - это означает, что виртуальный канал между двумя конечными точками не создается. Однако мы по-прежнему называем UDP-сокеты конечной точкой. Функции API дают понять, что оба являются просто разными типами сокетов - SOCK_DGRAM
это UDP (просто отправка сообщения) и SOCK_STREAM
TCP (создание виртуального канала).
Технически, заголовок IP содержит IP-адрес, а протокол поверх IP (UDP или TCP) содержит номер порта. Это позволяет использовать другие протоколы (например, ICMP , которые не имеют номеров портов, но имеют информацию об IP-адресации).
Краткий краткий ответ.
Порт может быть описан как внутренний адрес в пределах хоста , который идентифицирует программу или процесс.
Сокет может быть описан как программный интерфейс позволяет программа для общения с другими программами или процессами, в Интернете, или на местном уровне.
Это термины из двух разных доменов: «порт» - это понятие из сетей TCP / IP, «сокет» - это API (программирование). «Сокет» создается (в коде) путем выбора порта и имени хоста или сетевого адаптера и объединения их в структуру данных, которую можно использовать для отправки или получения данных.
Это базовые сетевые концепции, поэтому я объясню их простым, но всеобъемлющим образом, чтобы разобраться в деталях.
Таким образом, сокет в сети - это виртуальное коммуникационное устройство, привязанное к паре (ip, порт) = (адрес, сервис).
Замечания:
Надеюсь, это очистит вас от сомнений
Прочитав превосходные ответы с отголосками, я обнаружил, что мне, новичку в сетевом программировании, необходимо подчеркнуть следующее:
Соединения TCP-IP являются двунаправленными путями, соединяющими одну комбинацию адреса: порта с другой комбинацией адреса: порта. Поэтому, когда вы открываете соединение с вашего локального компьютера с портом на удаленном сервере (например, www.google.com:80), вы также связываете новый номер порта на вашем компьютере с соединением, чтобы сервер мог отправлять вещи обратно к вам (например, 127.0.0.1:65234). Может быть полезно использовать netstat для просмотра соединений вашей машины:
> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 192.168.0.6.49871 17.172.232.57.5223 ESTABLISHED
...
123.132.213.231 # IP address
:1234 # port number
123.132.213.231:1234 # socket address
Соединение происходит, когда 2 сокета связаны друг с другом.
Сокет - это особый тип файлового дескриптора, который используется процессом для запроса сетевых служб из операционной системы. Адрес сокета является тройным: {протокол, локальный адрес, локальный процесс}, где локальный процесс идентифицируется номером порта.
В пакете TCP / IP, например:
{tcp, 193.44.234.3, 12345}
Разговор - это канал связи между двумя процессами, который отображает связь между двумя процессами. Ассоциация - это 5-кортеж, который полностью определяет два процесса, составляющих соединение: {протокол, локальный адрес, локальный процесс, внешний адрес, внешний процесс}
В пакете TCP / IP, например:
{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
может быть действительной ассоциацией.
Полусвязь это либо: {протокол, локальный адрес, локальный процесс}
или
{протокол, внешний адрес, внешний процесс}
которые указывают каждую половину соединения.
Полусвязь также называется сокетом или транспортным адресом. Таким образом, сокет является конечной точкой для связи, которая может быть названа и адресована в сети. Интерфейс сокетов является одним из нескольких интерфейсов прикладного программирования (API) для протоколов связи. Разработанный как универсальный интерфейс программирования связи, он был впервые представлен системой UNIX 4.2BSD. Хотя он не был стандартизирован, он стал фактическим отраслевым стандартом.
Сокет является конечной точкой связи. Сокет не имеет прямого отношения к семейству протоколов TCP / IP, его можно использовать с любым протоколом, поддерживаемым вашей системой. API сокета C ожидает, что вы сначала получите пустой объект сокета из системы, который затем можно будет привязать к локальному адресу сокета (чтобы напрямую получать входящий трафик для протоколов без установления соединения или принимать входящие запросы на соединение для протоколов, ориентированных на установление соединения) или что вы можете подключиться к удаленному адресу сокета (для любого типа протокола). Вы можете даже сделать и то и другое, если хотите контролировать оба: локальный адрес сокета, к которому привязан сокет, и адрес удаленного сокета, к которому подключен сокет. Для протоколов без подключения подключение сокета даже необязательно, но если вы этого не сделаете, вы ' Придется также передавать адрес назначения с каждым пакетом, который вы хотите отправить через сокет, иначе как сокет узнает, куда отправлять эти данные? Преимущество заключается в том, что вы можете использовать один сокет для отправки пакетов на разные адреса сокетов. Как только вы настроили свой сокет и, возможно, даже подключили его, считайте его двунаправленным каналом связи. Вы можете использовать его для передачи данных в какой-либо пункт назначения, а другой пункт назначения может использовать его для передачи данных вам. То, что вы пишете в сокет, отправляется, а то, что было получено, доступно для чтения. Вы можете использовать его для передачи данных в какой-либо пункт назначения, а другой пункт назначения может использовать его для передачи данных вам. То, что вы пишете в сокет, отправляется, а то, что было получено, доступно для чтения. Вы можете использовать его для передачи данных в какой-либо пункт назначения, а другой пункт назначения может использовать его для передачи данных вам. То, что вы пишете в сокет, отправляется, а то, что было получено, доступно для чтения.
С другой стороны, порты - это то, что есть только у определенных протоколов стека протоколов TCP / IP. Пакеты TCP и UDP имеют порты. Порт - это просто число. Комбинация порта источника и порта назначения определяет канал связи между двумя хостами. Например, у вас может быть и сервер, и простой HTTP-сервер, и простой FTP-сервер. Если сейчас приходит пакет для адреса этого сервера, как он узнает, является ли это пакет для HTTP или FTP-сервера? Что ж, он будет знать, так как HTTP-сервер будет работать на порту 80, а FTP-сервер - на порту 21, поэтому, если пакет поступает с портом назначения 80, он предназначен для HTTP-сервера, а не для FTP-сервера. Также пакет имеет порт источника, поскольку без такого порта источника сервер может иметь только одно подключение к одному IP-адресу за раз. Порт источника позволяет серверу различать идентичные соединения: все они имеют один и тот же порт назначения, например, порт 80, один и тот же IP-адрес назначения (IP-адрес сервера) и один и тот же IP-адрес источника, поскольку все они поступают из один и тот же клиент, но поскольку у них разные исходные порты, сервер может отличать их друг от друга. И когда сервер отправляет обратно ответы, он делает это с портом, с которого поступил запрос, таким образом, клиент также может различать разные ответы, которые он получает от одного и того же сервера.
Порт был самой простой частью, это просто уникальный идентификатор для сокета. Сокет - это то, что процессы могут использовать для установления соединений и связи друг с другом. У высокого Джеффа была отличная телефонная аналогия, которая не была идеальной, поэтому я решил исправить это:
netstat
дисплей некоторое время. Все сокеты, принимаемые от прослушивающего сокета, используют один и тот же порт. Следовательно, порт не является уникальным идентификатором сокета.
Приложение состоит из пары процессов, которые обмениваются данными по сети (пара клиент-сервер). Эти процессы отправляют и получают сообщения в и из сети через программный интерфейс, называемый сокетом . Учитывая аналогию, представленную в книге «Компьютерные сети: нисходящий подход». Есть дом, который хочет общаться с другим домом. Здесь дом аналогичен процессу, а дверь - в розетку. Процесс отправки предполагает, что с другой стороны двери имеется инфраструктура, которая будет транспортировать данные к месту назначения. Как только сообщение поступает на другую сторону, оно проходит через дверь приемника (розетку) в дом (процесс). Эта иллюстрация из той же книги может помочь вам:
Сокеты являются частью транспортного уровня, который обеспечивает логическую связь с приложениями. Это означает, что с точки зрения приложения оба хоста напрямую связаны друг с другом, хотя между ними существует множество маршрутизаторов и / или коммутаторов. Таким образом, сокет - это не само соединение, а конечная точка соединения. Протоколы транспортного уровня реализуются только на хостах, а не на промежуточных маршрутизаторах.
Портыобеспечить средства внутренней адресации к машине. Основная цель - позволить нескольким процессам отправлять и получать данные по сети, не мешая другим процессам (их данным). Все розетки снабжены номером порта. Когда сегмент прибывает на хост, транспортный уровень проверяет номер порта назначения сегмента. Затем он направляет сегмент в соответствующий сокет. Эта работа по доставке данных в сегменте транспортного уровня в правильный сокет называется демультиплексированием . Затем данные сегмента передаются процессу, подключенному к сокету.
Сокет - это структура в вашем программном обеспечении. Это более или менее файл; у него есть такие операции, как чтение и запись. Это не физическая вещь; это способ для вашего программного обеспечения ссылаться на физические вещи.
Порт - это устройство, похожее на устройство. Каждый хост имеет одну или несколько сетей (это физические); хост имеет адрес в каждой сети. Каждый адрес может иметь тысячи портов.
Только один сокет может использовать порт по адресу. Сокет выделяет порт примерно так же, как устройство для ввода-вывода файловой системы. Как только порт выделен, никакой другой сокет не может подключиться к этому порту. Порт будет освобожден, когда сокет будет закрыт.
Взгляните на терминологию TCP / IP .
из Oracle Java Tutorial :
Сокет - это одна конечная точка двусторонней связи между двумя программами, работающими в сети. Сокет привязан к номеру порта, так что уровень TCP может идентифицировать приложение, которому предназначены данные для отправки.
Порт и сокет можно сравнить с отделением банка.
Номер здания «Банка» аналогичен IP-адресу. Банк имеет различные разделы, такие как:
Итак, 1 (отдел сберегательного счета), 2 (отдел персональных кредитов), 3 (отдел жилищных кредитов) и 4 (отдел рассмотрения жалоб) являются портами.
Теперь позвольте нам сказать, что вы идете, чтобы открыть сберегательный счет, вы идете в банк (IP-адрес), затем вы идете в «отдел сберегательного счета» (порт № 1), затем вы встречаете одного из сотрудников, работающих в «отдел сберегательного счета» ». Давайте позвоним ему SAVINGACCOUNT_EMPLOYEE1 для открытия счета.
SAVINGACCOUNT_EMPLOYEE1 - ваш дескриптор сокета, поэтому может быть от SAVINGACCOUNT_EMPLOYEE1 до SAVINGACCOUNT_EMPLOYEEN. Это все дескрипторы сокетов.
Аналогичным образом, другие отделы будут иметь работу под их руководством, и они аналогичны сокету.
Сокет - это механизм ввода / вывода данных. Порт - это контрактная концепция протокола связи . Сокет может существовать без порта. Порт может существовать без определенного сокета (например, если на одном порту активно несколько сокетов, что может быть разрешено для некоторых протоколов).
Порт используется для определения, к какому сокету получатель должен направить пакет, со многими протоколами, но это не всегда требуется, и выбор приемного сокета может быть сделан другими средствами - порт полностью является инструментом, используемым обработчиком протокола в сетевая подсистема. например, если протокол не использует порт, пакеты могут отправляться во все прослушивающие сокеты или любой сокет.
Относительная терминология TCP / IP, которая, как я предполагаю, подразумевается под вопросом. С точки зрения непрофессионала:
ПОРТ похож на номер телефона конкретного дома в определенном почтовом индексе. Почтовый индекс города можно рассматривать как IP-адрес города и всех домов в этом городе.
Розетка, с другой стороны, больше похожа на телефонный звонок между телефонами пары домов, разговаривающих друг с другом. Эти звонки могут быть установлены между домами в одном городе или двумя домами в разных городах. Это тот временный путь между парой телефонов, разговаривающих друг с другом, это розетка.
В широком смысле, Socket - это просто розетка, такая же, как ваша электрическая, кабельная или телефонная розетка. Точка, в которой «необходимые вещи» (сила, сигнал, информация) могут выходить и появляться. Он скрывает много подробностей, которые не требуются для использования «необходимых вещей». На языке программного обеспечения он предоставляет общий способ определения механизма связи между двумя объектами (эти объекты могут быть любыми - два приложения, два физически отдельных устройства, пространство пользователя и ядра в ОС и т. Д.)
Порт - это дискриминатор конечной точки. Это отличает одну конечную точку от другой. На сетевом уровне он отличает одно приложение от другого, так что сетевой стек может передавать информацию соответствующему приложению.
На этот вопрос уже даны теоретические ответы. Я хотел бы привести практический пример к этому вопросу, который прояснит ваше понимание о Socket и Port.
Я нашел это здесь
Этот пример проведет вас через процесс подключения к веб-сайту, такому как Wiley. Вы должны открыть свой веб-браузер (например, Mozilla Firefox) и ввести www.wiley.com в адресную строку. Ваш веб-браузер использует сервер системы доменных имен (DNS) для поиска имени www.wiley.com, чтобы определить его IP-адрес. Для этого примера адрес является 192.0.2.100.
Firefox устанавливает соединение с адресом 192.0.2.100 и портом, где работает веб-сервер прикладного уровня. Firefox знает, какой порт ожидать, потому что это хорошо известный порт. Хорошо известным портом для веб-сервера является TCP-порт 80.
Сокет назначения, к которому пытается подключиться Firefox, записывается как socket: port или в этом примере 192.0.2.100:80. Это серверная сторона подключения, но сервер должен знать, куда отправлять веб-страницу, которую вы хотите просмотреть в Mozilla Firefox, поэтому у вас есть сокет и для клиентской части подключения.
Соединение на стороне клиента состоит из вашего IP-адреса, такого как 192.168.1.25, и случайно выбранного номера динамического порта. Сокет, связанный с Firefox, выглядит как 192.168.1.25:49175. Поскольку веб-серверы работают на порте TCP 80, оба этих сокета являются сокетами TCP, тогда как при подключении к серверу, работающему с портом UDP, сокеты и сервера, и клиента были бы сокетами UDP.
Сокет - это абстракция, предоставляемая ядром пользовательским приложениям для ввода / вывода данных. Тип сокета определяется протоколом его обработки, связью IPC и т. Д. Поэтому, если кто-то создает сокет TCP, он может выполнять манипуляции, такие как чтение данных в сокет и запись данных в него простыми методами, а также обработка протокола более низкого уровня, например, преобразования TCP и пересылка пакетов на сетевые протоколы более низкого уровня осуществляется конкретной реализацией сокета в ядре. Преимущество состоит в том, что пользователю не нужно беспокоиться об обработке специфичных для протокола нитриций, а следует просто читать и записывать данные в сокет, как обычный буфер. То же самое верно в случае IPC, пользователь просто читает и записывает данные в сокет, а ядро обрабатывает все детали более низкого уровня в зависимости от типа созданного сокета.
Порт вместе с IP подобен предоставлению адреса сокету, хотя это и не обязательно, но помогает в сетевых коммуникациях.
Один порт может иметь одно или несколько разъемов, соединенных с разными внешними IP-адресами, например, с несколькими электрическими розетками.
TCP 192.168.100.2:9001 155.94.246.179:39255 ESTABLISHED 1312
TCP 192.168.100.2:9001 171.25.193.9:61832 ESTABLISHED 1312
TCP 192.168.100.2:9001 178.62.199.226:37912 ESTABLISHED 1312
TCP 192.168.100.2:9001 188.193.64.150:40900 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.23.194.149:43970 ESTABLISHED 1312
TCP 192.168.100.2:9001 198.49.73.11:38842 ESTABLISHED 1312
Сокет - это программная абстракция конечной точки сети, используемая в качестве интерфейса для приложения. В Java, C # он представлен объектом, в Linux, Unix это файл.
Порт - это просто свойство сокета, который вы указываете, если хотите установить связь. Чтобы получить пакет из сокета, вы должны привязать его к определенному локальному порту и NIC (с локальным IP-адресом) или ко всем NIC (INADDR_ANY указано в вызове bind). Чтобы отправить пакет, вы должны указать порт и IP удаленного сокета.
Сокет - это, по сути, конечная точка для сетевого взаимодействия, состоящая как минимум из IP-адреса и порта. В Java / C # сокет является реализацией более высокого уровня одной стороны двустороннего соединения.
Кроме того, определение в документации Java .
Порт:
Порт может относиться к физической точке подключения для периферийных устройств, таких как последовательные, параллельные и USB-порты. Термин порт также относится к определенным точкам подключения Ethernet, таким как точки на концентраторе, коммутаторе или маршрутизаторе.
Разъем:
Сокет представляет собой одно соединение между двумя сетевыми приложениями. Эти два приложения обычно работают на разных компьютерах, но сокеты также могут использоваться для межпроцессного взаимодействия на одном компьютере. Приложения могут создавать несколько сокетов для общения друг с другом. Сокеты являются двунаправленными, это означает, что любая сторона соединения способна отправлять и получать данные.
Порт обозначает конечную точку связи в транспорте TCP и UDP для сетевого протокола IP. Сокет - это программная абстракция для конечной точки связи, обычно используемая в реализациях этих протоколов (API сокетов). Альтернативной реализацией является API XTI / TLI.
Смотрите также:
Стивенс, WR 1998, Сетевое программирование UNIX: Сетевые API: Сокеты и XTI; Том 1, Прентис Холл.
Стивенс, WR, 1994, TCP / IP Illustrated, том 1: Протоколы, Эддисон-Уэсли.