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





15 Answers

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

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

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

Например:

  • 1030 - это порт.
  • (10.1.1.2, TCP, порт 1030) является сокетом.
что это программный

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




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

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

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




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




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

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

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




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




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

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

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




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

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



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

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




Относительная терминология 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.




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



Сокет в основном является конечной точкой для сетевой связи, состоящей как минимум из IP-адреса и порта. В Java / C # сокет представляет собой реализацию на более высоком уровне с одной стороны двустороннего соединения.

Кроме того, определение в документации Java .




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




Socket - это аббревиатура SW конечной точки сети, используемая в качестве интерфейса для приложения. В Java, C # он представлен объектом, в Linux, Unix - это файл.

Порт - это просто свойство сокета, который вы указали, если хотите установить связь. Чтобы получить пакет из сокета, вы должны привязать его к конкретному локальному порту и NIC (с локальным IP-адресом) или ко всем сетевым картам (INADDR_ANY указан в вызове bind). Чтобы отправить пакет, вы должны указать порт и IP удаленного сокета.






Related