networking применение - В чем разница между портом и сокетом?




сокетов работа (25)

Во-первых, я думаю, мы должны начать с небольшого понимания того, что составляет получение пакета от А до Б.

Общим определением для сети является использование модели OSI, которая разделяет сеть на несколько слоев в соответствии с назначением. Есть несколько важных, которые мы рассмотрим здесь:

  • Уровень канала передачи данных . Этот уровень отвечает за получение пакетов данных от одного сетевого устройства к другому и находится чуть выше уровня, фактически передающего. Он говорит о MAC-адресах и знает, как найти хосты на основе их MAC (аппаратного) адреса, но не более того.
  • Сетевой уровень - это уровень, который позволяет переносить данные по машинам и по физическим границам, таким как физические устройства. Сетевой уровень должен по существу поддерживать дополнительный механизм, основанный на адресе, который как-то связан с физическим адресом; введите IP-протокол (IPv4). IP-адрес может получить ваш пакет от A до B через Интернет, но ничего не знает о том, как проходить индивидуальные перелеты. Это обрабатывается слоем выше в соответствии с информацией маршрутизации.
  • Транспортный слой . Этот уровень отвечает за определение способа получения информации от A до B и любых ограничений, проверок или ошибок в этом поведении. Например, TCP добавляет дополнительную информацию в пакет, так что можно вывести, если пакеты были потеряны.

TCP содержит, среди прочего, концепцию ports . Это фактически разные конечные точки данных на том же IP-адресе, к которому может привязываться Internet Socket ( AF_INET ).

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

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

Таким образом, порты - это, по сути, мандат, позволяющий нескольким параллельным соединениям использовать один и тот же адрес.

Теперь нам нужно взглянуть на то, как вы общаетесь с точки зрения приложения с внешним миром. Для этого вам нужно просить свою операционную систему, и поскольку большинство ОС поддерживают способ Berkeley Sockets, мы видим, что мы можем создавать сокеты, включающие порты из приложения следующим образом:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Большой! Поэтому в структурах sockaddr мы укажем наш порт и bam! Работа выполнена! Ну, почти, кроме:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

также возможно. Ург, это забросило гаечный ключ в работах!

Хорошо, на самом деле это не так. Все, что нам нужно сделать, это найти некоторые подходящие определения:

  • Интернет-сокет - это комбинация IP-адреса, протокола и связанного с ним номера порта, по которому служба может предоставлять данные. Таким образом, порт tcp 80, stackoverflow.com - это интернет-сокет.
  • Unix-сокет - конечная точка IPC, представленная в файловой системе, например /var/run/database.sock .
  • API сокетов - это метод запроса приложения на чтение и запись данных в сокет.

Вуаля! Это подбирает вещи. Итак, в нашей схеме,

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

Так что действительно порт является подмножеством требований для формирования интернет-сокета. К сожалению, так получилось, что значение слова socket было применено к нескольким различным идеям. Поэтому я сердечно советую вам назвать свой следующий сокет проекта, просто чтобы добавить к путанице;)

Это был вопрос, поднятый одним из инженеров-программистов в моей организации. Меня интересует самое широкое определение.


Сокет - конечная точка связи. Сокет не имеет прямого отношения к семейству протоколов TCP / IP, его можно использовать с любым протоколом, поддерживаемым вашей системой. API сокета C ожидает, что вы сначала получите пустой объект сокета из системы, который затем можно привязать к локальному адресу сокета (напрямую получать входящий трафик для протоколов без подключения или принимать входящие запросы на соединение для протоколов, ориентированных на соединение) или что вы можете подключиться к удаленному адресу сокета (для любого вида протокола). Вы даже можете сделать это, если хотите управлять обоими, локальным адресом сокета, к которому привязан сокет, и к нему подключен адрес удаленного сокета. Для протоколов подключения без подключения к сокет даже необязательно, но если вы этого не сделаете, вам также нужно будет передать адрес назначения каждому пакету, который вы хотите отправить через сокет, как иначе, если бы сокет знал, куда отправлять эти данные? Преимущество состоит в том, что вы можете использовать один сокет для отправки пакетов на разные адреса сокетов. Если у вас настроен ваш сокет и, возможно, даже подключен, считайте его двунаправленным каналом связи. Вы можете использовать его для передачи данных в какой-либо пункт назначения, и какой-то пункт назначения может использовать его для передачи данных обратно вам. То, что вы пишете в сокет, отправляется, и полученные данные доступны для чтения.

Порты с другой стороны - это то, что имеет только определенные протоколы стека протокола TCP / IP. Пакеты TCP и UDP имеют порты. Порт - простое число. Комбинация порта источника и порта назначения определяет канал связи между двумя хостами. Например, у вас может быть сервер, который должен быть как простым HTTP-сервером, так и простым FTP-сервером. Если теперь пакет отправляется на адрес этого сервера, как он узнает, является ли это пакетом для HTTP или FTP-сервера? Ну, он будет знать, так как HTTP-сервер будет работать на порту 80 и FTP-сервере на порту 21, поэтому, если пакет поступит с портом назначения 80, он будет использоваться для HTTP-сервера, а не для FTP-сервера. Также пакет имеет порт источника, поскольку без такого исходного порта сервер может иметь только одно соединение с одним IP-адресом за раз. Порт источника позволяет серверу различать идентичные соединения: все они имеют один и тот же порт назначения, например порт 80, тот же IP-адрес назначения, всегда один и тот же адрес сервера и тот же IP-адрес источника, поскольку все они происходят из одного и того же клиент, но поскольку у них есть разные исходные порты, сервер может различать их друг от друга. И когда сервер отправляет ответные ответы, он будет делать это с портом, откуда пришел запрос, таким образом клиент может также различать различные ответы, которые он получает.


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

Порт используется для определения того сокета, которому приемник должен маршрутизировать пакет, со многими протоколами, но он не всегда требуется, а выбор приемного сокета может выполняться другими способами - порт является полностью инструментом, используемым обработчиком протокола в сетевая подсистема. например, если протокол не использует порт, пакеты могут обращаться ко всем прослушивающим сокетам или любому сокету.


Как правило, вы получите много теоретических, но один из самых простых способов разграничения этих двух понятий заключается в следующем:

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

Например, HTTP-служба работает на порту 80.

Теперь многие могут запросить услугу и установить соединение с клиент-сервером. Там будет много соединений. Каждое соединение представляет собой клиент. Чтобы поддерживать каждое соединение, сервер создает сокет на одно соединение для поддержки своего клиента.

Надеюсь, эта помощь. Спасибо.


С некоторой аналогией

Хотя для сокетов уже дано много технических данных ... Я хотел бы добавить свой ответ на всякий случай, если кто-то еще не почувствовал разницу между 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

Надеюсь, это поможет кому-то еще запутанному :)


Сокет состоит из трех вещей:

  1. IP-адрес
  2. Транспортный протокол
  3. Номер порта

Порт представляет собой число от 1 до 65535 включительно, что означает логические ворота в устройстве. Для каждого соединения между клиентом и сервером требуется уникальный сокет.

Например:

  • 1030 - это порт.
  • (10.1.1.2, TCP, порт 1030) является сокетом.

Относительная терминология TCP / IP, которую я предполагаю, подразумевает этот вопрос. В условиях неспециалиста:

PORT похож на номер телефона определенного дома в определенном почтовом индексе. Почтовый код города можно было бы назвать IP-адресом города и всех домов в этом городе.

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


На этот вопрос были даны теоретические ответы. Я хотел бы привести практический пример этого вопроса, который позволит вам разобраться в Socket и Port.

Я нашел его here

В этом примере вы пройдете через процесс подключения к веб-сайту, например, Wiley. Вы откроете свой веб-браузер (например, Mozilla Firefox) и напечатаете www.wiley.com в адресной строке. Ваш веб-браузер использует сервер доменных имен (DNS) для поиска имени www.wiley.com для определения его IP-адреса. В этом примере адрес 192.0.2.100.

Firefox устанавливает соединение с адресом 192.0.2.100 и портом, на котором работает веб-сервер прикладного уровня. Firefox знает, какой порт ожидать, потому что это хорошо известный порт. Известным портом для веб-сервера является порт TCP 80.

Сокет назначения, который пытается подключить Firefox, записывается в виде сокета: порт или в этом примере 192.0.2.100:80. Это серверная сторона подключения, но серверу необходимо знать, куда отправить веб-страницу, которую вы хотите просмотреть, в Mozilla Firefox, так что у вас есть сокет для клиентской стороны соединения.

Соединение на стороне клиента составлено из вашего IP-адреса, такого как 192.168.1.25, и случайно выбранного номера динамического порта. Сокет, связанный с Firefox, выглядит как 192.168.1.25:49175. Поскольку веб-серверы работают на TCP-порту 80, оба эти сокета являются сокетами TCP, тогда как если вы подключались к серверу, работающему на порте UDP, как серверные, так и клиентские сокеты были бы сокетами UDP.


из учебника Oracle Java :

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


Socket - это абстракция, предоставляемая ядром для пользовательских приложений для ввода / вывода данных. Тип сокета определяется протоколом его обработки, IPC-связью и т. Д. Поэтому, если кто-то создает сокет TCP, он может делать манипуляции, такие как чтение данных в сокет и запись данных на него с помощью простых методов и обработки протокола нижнего уровня, таких как преобразования TCP и пересылка пакетов на более низкие сетевые протоколы выполняется конкретной реализацией сокета в ядре. Преимущество заключается в том, что пользователю не нужно беспокоиться о том, как обращаться с конкретными конкретными протоколами, а также просто читать и записывать данные в сокет, как обычный буфер. То же самое верно в случае IPC, пользователь просто считывает и записывает данные в сокет, а ядро ​​обрабатывает все детали нижнего уровня в зависимости от типа созданного сокета.

Порт вместе с IP-адресом похож на предоставление адреса в сокете, хотя он и не нужен, но помогает в сетевых связях.


Порт и розетка можно сравнить с филиалом Банка.

Номер здания «Банка» аналогичен IP-адресу. Банк имеет разные разделы, такие как: 1) ОТДЕЛ СЧЕТОВ СЧЕТОВ 2) ОТДЕЛ ПЕРСОНАЛЬНОГО КРЕДИТА 3) ОТДЕЛ ДОМАШНЕГО КРЕДИТА 4) ОТДЕЛЕНИЕ ОТДЕЛЕНИЯ.

поэтому 1 (ОТДЕЛ СООБЩЕНИЯ СБЕРЕГАТЕЛЬСТВА), 2 (ОТДЕЛ ПЕРСОНАЛЬНОГО КРЕДИТА), 3 (ОТДЕЛ ДОМАШНЕГО КРЕДИТА) и 4 (ОТДЕЛЕНИЕ ОТДЕЛЕНИЯ) - Порты.

Теперь позвольте нам сказать, что вы открываете сберегательный счет, вы переходите в Bank (IP-адрес), затем переходите в «SAVINGS ACCOUNT DEPARTMENT» (порт № 1), после чего вы встречаетесь с одним из сотрудников, работающих в разделе «СБЕРЕГАТЕЛЬНЫЙ СЧЕТ ДЕЯТЕЛЬНОСТИ» назовите его SAVINGACCOUNT_EMPLOYEE1 для открытия учетной записи.

SAVINGACCOUNT_EMPLOYEE1 - ваш дескриптор сокета, поэтому SAVINGACCOUNT_EMPLOYEE1 может быть SAVINGACCOUNT_EMPLOYEEN, это все дескрипторы сокетов.

Аналогичным образом, другие отделы будут работать с ними, и они аналогичны гнезду.

Надеюсь это поможет !!


Сокет = IP-адрес + порт (числовой адрес)
Вместе они идентифицируют конечную точку для сетевого соединения на машине. (Я просто запустил сеть 101?)


Порт был самой легкой частью, это просто уникальный идентификатор сокета. Сокет - это то, что процессы могут использовать для установления соединений и общения друг с другом. У Tall Jeff была отличная телефонная аналогия, которая не была идеальной, поэтому я решил ее исправить:

  • ip и порт ~ номер телефона
  • гнездо ~ телефонное устройство
  • соединение ~ телефонный звонок
  • установление соединения ~ вызов номера
  • процессы, удаленные приложения ~ люди
  • сообщения ~ речь

Резюме

Сокет TCP - это экземпляр конечной точки, определенный IP-адресом и портом в контексте конкретного TCP-соединения или состояния прослушивания.

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

Сокет TCP не является соединением , это конечная точка определенного соединения.

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

Для данной комбинации адресов и портов может быть только один разъем-слушатель .

экспозиция

Это был интересный вопрос, который заставил меня пересмотреть некоторые вещи, которые, как я думал, я знал наизнанку. Вы бы подумали, что такое имя, как «сокет», было бы само собой разумеющимся: очевидно, было выбрано, чтобы вызвать образы конечной точки, в которую вы подключаете сетевой кабель, там есть сильные функциональные параллели. Тем не менее, на сетевом языке слово «сокет» несет столько багажа, что необходимо тщательное повторное рассмотрение.

В самом широком смысле, порт является точкой входа или выхода. Французское слово porte, хотя и не используется в сетевом контексте, буквально означает дверь или шлюз , что еще раз подчеркивает тот факт, что порты являются транспортными конечными точками, отправляете ли вы данные или крупные стальные контейнеры.

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

Комбинация IP-адреса и порта строго известна как конечная точка и иногда называется сокетом. Это использование связано с RFC793, оригинальной спецификацией TCP.

TCP- соединение определяется двумя конечными точками aka сокетами .

Конечная точка (сокет) определяется комбинацией сетевого адреса и идентификатора порта . Обратите внимание, что адрес / порт не полностью идентифицирует сокет (подробнее об этом позже).

Назначение портов - это разграничение нескольких конечных точек на заданном сетевом адресе. Можно сказать, что порт является виртуализированной конечной точкой. Эта виртуализация делает возможным несколько параллельных подключений на одном сетевом интерфейсе.

Это пара сокетов (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, иллюстрированный том 1 , W. Richard Stevens)

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

Хаграваль не верит мне (см. Комментарии), поэтому вот пример. Я подключил веб-браузер к http://dilbert.com, а затем netstat -an -p tcp . Последние шесть строк вывода содержат два примера того, что адреса и порта недостаточно, чтобы однозначно идентифицировать сокет. Между 192.168.1.3 (моя рабочая станция) есть два разных соединения и 54.252.92.236:80

  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. TCP-IP Иллюстрированный том 1 Протоколы , W. Richard Stevens, 1994 Addison Wesley

  2. RFC793 , Институт Информационных Наук, Университет Южной Калифорнии для DARPA

  3. RFC147 , Определение RFC147 , Джоэл М. Винетт, Линкольнская лаборатория


Сокет - это структура вашего программного обеспечения. Это более-менее файл; он имеет операции, такие как чтение и запись. Это не физическая вещь; это способ для вашего программного обеспечения ссылаться на физические вещи.

Порт - вещь, подобная устройству. Каждый хост имеет одну или несколько сетей (физически); хост имеет адрес в каждой сети. Каждый адрес может иметь тысячи портов.

Один сокет может использовать порт только по адресу. Розетка распределяет порт примерно так же, как выделение устройства для ввода / вывода файловой системы. Как только порт будет выделен, никакой другой сокет не сможет подключиться к этому порту. Порт будет освобожден, когда розетка будет закрыта.

Взгляните на терминологию TCP / IP .


Это термины из двух разных доменов: «порт» - это концепция из сетей TCP / IP, «сокет» - это API (программирование). «Сокет» создается (в коде), беря порт, имя хоста или сетевой адаптер и объединяя их в структуру данных, которую вы можете использовать для отправки или получения данных.


Короткий короткий ответ.

Порт можно охарактеризовать как внутренний адрес внутри хоста, который идентифицирует программу или процесс.

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


Порт обозначает конечную точку связи в протоколах TCP и UDP для протокола IP-сети. Сокет - это абстракция программного обеспечения для конечной точки связи, обычно используемой при реализации этих протоколов (сокет API). Альтернативной версией является API XTI / TLI.

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

Stevens, WR 1998, UNIX Network Programming: Сетевые интерфейсы: Sockets и XTI; Том 1, Prentice Hall.
Стивенс, WR, 1994, Иллюстрированный TCP / IP, Том 1: Протоколы, Эддисон-Уэсли.


В широком смысле Socket - это именно тот, сокет, как и ваш электрический кабель или телефон. Точка, в которой «необходимый материал» (мощность, сигнал, информация) может выйти и войти. Он скрывает множество подробных материалов, которые не требуются для использования «необходимого материала». В языке программного обеспечения он предоставляет общий способ определения механизма связи между двумя объектами (эти объекты могут быть любыми - двумя приложениями, двумя физически раздельными устройствами, пространством User & Kernel в ОС и т. Д.),

Порт - это дискриминатор конечной точки. Он отличает одну конечную точку от другой. На уровне сети он отличает одно приложение от другого, так что сетевой стек может передавать информацию в соответствующее приложение.


Один порт может иметь один или несколько разъемов, соединенных с различными внешними 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

Я знаю, что есть много объяснений. Но, с практическим примером, есть еще один простой способ понять. Мы все можем подключиться к HTTP-порту 80, но означает ли это, что только один пользователь может подключиться к этому порту за раз ?. Ответ, очевидно, «нет». Несколько пользователей для нескольких целей могут обращаться к HTTP-порту 80, но они все еще получают правильный ответ, который они ждут, с сервера, не так ли ?. Теперь подумайте об этом на минуту, как ?. Да, вы правы, его IP-адресчто однозначно идентифицирует разных пользователей, которые контактируют в разных целях. Если бы вы прочитали предыдущие ответы, прежде чем дойти до них, вы бы знали, что IP-адрес является частью информации, которая состоит из сокета. Подумайте об этом, возможно ли иметь связь без сокетов ?. Ответ «Да», но вы не можете запускать более одного приложения в порту, но мы знаем, что мы не являемся переключателем «Дамп», который работает только на оборудовании.


Адрес сокета - это IP-адрес и номер порта

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

Соединение происходит, когда 2 сокета связаны друг с другом.


Прочитав превосходные голосовые ответы, я обнаружил, что следующий момент должен был подчеркнуть для меня, новичок в сетевом программировании:

Соединения 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
...

Приложение состоит из пары процессов, которые обмениваются данными по сети (пара клиент-сервер). Эти процессы отправляют и получают сообщения в сеть и из нее через программный интерфейс, называемый сокетом . Учитывая аналогию, представленную в книге «Компьютерная сеть: подход сверху вниз». Существует дом, который хочет общаться с другим домом. Здесь дом аналогичен процессу и двери к розетке. Процесс отправки предполагает, что на другой стороне двери есть инфраструктура, которая будет передавать данные в пункт назначения. Как только сообщение поступит с другой стороны, оно проходит через дверь приемника (гнездо) в дом (процесс). Эта иллюстрация из той же книги может помочь вам:

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


Используйте это, если вы хотите видеть все используемые и прослушивающие порты на сервере Windows:

netstat -an |find /i "listening"

Смотрите все открытые, прослушивающие, установленные порты:

netstat -a




networking sockets port