В чем разница между портом и сокетом? - PullRequest
823 голосов
/ 30 сентября 2008

Этот вопрос был задан одним из разработчиков программного обеспечения в моей организации. Я заинтересован в самом широком определении.

Ответы [ 35 ]

12 голосов
/ 24 января 2017

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

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

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

12 голосов
/ 14 марта 2013

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

Соединения 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
...
10 голосов
/ 09 июня 2014

Сокет - это особый тип файлового дескриптора, который используется процессом для запроса сетевых служб из операционной системы. Адрес сокета является тройным: {протокол, локальный адрес, локальный процесс}, где локальный процесс идентифицируется номером порта.

В наборе 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. Хотя он не был стандартизирован, он фактически стал отраслевым стандартом.

6 голосов
/ 12 октября 2015

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

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

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

5 голосов
/ 30 сентября 2008

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

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

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

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

5 голосов
/ 12 апреля 2014

из Oracle Java Tutorial :

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

4 голосов
/ 19 февраля 2019

Это базовые сетевые концепции, поэтому я объясню их в простом, но понятном для всех виде.

  • Розетка похожа на телефон (то есть сквозное устройство для связи)
  • IP аналогично вашему номеру телефона (то есть адресу вашей розетки)
  • Порт подобен человеку, с которым вы хотите поговорить (т.е. услуга, которую вы хотите заказать по этому адресу)
  • Сокет может быть клиентским или серверным сокетом (т. Е. В компании телефон службы поддержки клиентов является сервером, но телефон в вашем доме в основном является клиентом)

Таким образом, сокет в сети - это виртуальное коммуникационное устройство, привязанное к паре (ip, порт) = (адрес, услуга).

Примечание:

  • Машина, компьютер, хост, мобильный телефон или ПК могут иметь несколько адресов, несколько открытых портов и, следовательно, несколько сокетов. Как и в офисе, у вас может быть несколько телефонов с несколькими телефонными номерами и несколькими людьми для общения.
  • Наличие открытого / активного порта требует, чтобы к нему был привязан сокет, поскольку именно порт делает порт доступным. Однако у вас могут быть неиспользуемые порты.
  • Также обратите внимание, что в сокете сервера вы можете привязать его (порт, определенный адрес машины) или (порт, все адреса машины), так как в телефоне вы можете подключить множество телефонных линий (телефон номера) на телефон или одну конкретную телефонную линию на телефон, и все же вы можете связаться с человеком через все эти телефонные линии или через определенную телефонную линию.
  • Вы не можете связать (связать) сокет с двумя портами, так как в телефоне обычно не всегда может быть два человека, использующих один и тот же телефон одновременно.
  • Дополнительно: на одной машине не может быть двух сокетов с одинаковым типом (клиент или сервер) и одинаковыми портом и ip. Однако, если вы являетесь клиентом, вы можете открыть два соединения с двумя сокетами к серверу, поскольку локальный порт в каждом из этих сокетов клиента отличается)

Надеюсь, это очистит вас от сомнений

4 голосов
/ 11 апреля 2017

Порт и сокет можно сравнить с отделением банка.

Номер здания «Банка» аналогичен IP-адресу. Банк имеет различные разделы, такие как:

  1. Отдел сберегательного счета
  2. Отдел персональных кредитов
  3. Отдел ипотечного кредитования
  4. Отдел рассмотрения жалоб

Таким образом, 1 (отдел сберегательного счета), 2 (отдел персональных кредитов), 3 (отдел внутренних кредитов) и 4 (отдел рассмотрения жалоб) являются портами.

Теперь позвольте нам сказать, что вы идете, чтобы открыть сберегательный счет, вы идете в банк (IP-адрес), затем вы идете в "отдел сберегательного счета" (порт № 1), а затем вы встречаете одного из сотрудников, работающих в " Отдел сберегательных счетов ". Давайте позвоним ему SAVINGACCOUNT_EMPLOYEE1 для открытия счета.

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

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

3 голосов
/ 30 сентября 2008

Относительная терминология TCP / IP, которая, как я полагаю, подразумевается под вопросом. С точки зрения непрофессионала:

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

РОЗЕТКА, с другой стороны, больше похожа на обычный телефонный звонок между телефонами пары домов, разговаривающими друг с другом. Эти звонки могут быть установлены между домами в одном городе или двумя домами в разных городах. Это тот временный путь между парой телефонов, разговаривающих друг с другом, это РОЗЕТКА.

...