Вопрос

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

Нет правильного решения

Другие советы

Краткое содержание

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

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

TCP-сокет — это нет связь, это конечная точка определенного соединения.

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

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

Экспозиция

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

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

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

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

TCP связь определяется двумя конечными точками, т.е. Розетки.

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

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

Это пара сокетов (4-закуска, состоящая из IP-адреса клиента, номера порта клиента, IP-адреса сервера и номера порта сервера), которые указывают две конечные точки, которые однозначно идентифицируют каждое соединение TCP в Интернете.(TCP-IP, иллюстрированный том 1, В.Ричард Стивенс)

В большинстве языков, производных от C, TCP-соединения устанавливаются и управляются с помощью методов экземпляра класса Socket.Хотя обычно работают на более высоком уровне абстракции, обычно это экземпляр класса NetworkStream, при этом обычно предоставляется ссылка на объект сокета.Программисту кажется, что этот объект сокета представляет соединение, поскольку соединение создается и управляется с помощью методов объекта сокета.

В C#, чтобы установить TCP-соединение (с существующим прослушивателем), сначала вы создаете TCPClient.Если вы не укажете конечную точку для TCPClient конструктор использует значения по умолчанию — так или иначе определяется локальная конечная точка.Затем вы вызываете Соединять метод в созданном вами экземпляре.Для этого метода требуется параметр, описывающий другую конечную точку.

Все это немного сбивает с толку и заставляет поверить, что сокет — это соединение, а это чушь.Я боролся с этим заблуждением, пока Ричард Дорман не задал вопрос.

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

Ясность будет повышена и в других отношениях.Розетка нет идентифицируется комбинацией IP-адреса и порта:

[...] TCP демультиплексирует входящие сегменты, используя все четыре значения, которые включают локальный и внешний адреса:IP-адрес назначения, номер порта назначения, IP-адрес источника и номер порта источника.TCP не может определить, какой процесс получит входящий сегмент, просматривая только порт назначения.Кроме того, единственная из [различных] конечных точек на [данном номере порта], которая будет получать входящие запросы на соединение, находится в состоянии прослушивания.(стр.255, TCP-IP, иллюстрированный том 1, В.Ричард Стивенс)

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

Хагравал мне не верит (см. комментарии), так что вот реальный образец.Я подключил веб-браузер к 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. TCP-IP, иллюстрированный том 1. Протоколы, В.Ричард Стивенс, 1994 г., Эддисон Уэсли

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

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

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

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

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

Например:

  • 1030 - это порт.
  • (10.1.1.2, TCP, порт 1030) — это сокет.

розетка представляет собой одно соединение между двумя сетевыми приложениями.Эти два приложения номинально работают на разных компьютерах, но сокеты также можно использовать для межпроцессного взаимодействия на одном компьютере.Приложения могут создавать несколько сокетов для связи друг с другом.Сокеты являются двунаправленными, что означает, что любая сторона соединения способна как отправлять, так и получать данные.Поэтому сокет теоретически можно создать на любом уровне модели 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 нужна услуга (скажем, чат) от этого сервер С

затем

IP-адрес говорит --> ВОЗ? это тот чат-сервер «S», с которым X, Y, Z хотят связаться

окей, у тебя есть вопрос "кто сервер"

но предположим, что сервер «S» также предоставляет некоторые другие услуги другим людям, скажем «S» предоставляет услуги хранения лицам A, B, C.

затем

порт сообщает ---> который? обслуживать вас (X,Y,Z) нужно, т.е.служба чата, а не служба хранения

окей... вы заставляете сервер знать, что вам нужен «сервис чата», а не хранилище

но

вам три и сервер может захотеть идентифицировать все три по-разному

наступает разъем

сейчас сокет сообщает--> который из? особая связь

то есть, скажем,

розетка 1 для человека X

розетка 2 для человека Y

и розетка 3 для человека Z

Я надеюсь, что это поможет кому -то, кто все еще смутился :)

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

Распространенным определением сети является использование Модель OSI который разделяет сеть на несколько уровней в зависимости от цели.Есть несколько важных, о которых мы расскажем здесь:

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

TCP содержит, среди прочего, концепцию порты.По сути, это разные конечные точки данных на одном IP-адресе, к которому подключен Интернет-сокет (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 структуры, укажем наш порт и бац!Дело сделано!Ну почти, кроме:

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

тоже возможно.Ух, это настоящий провал!

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

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

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

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

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

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

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

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

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

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

Кажется, есть много ответов, приравнивающих сокет к соединению между двумя компьютерами... что я считаю абсолютно неверным.Розетка всегда была конечная точка на 1 ПК, который может быть подключен, а может и не быть - наверняка мы все когда-нибудь использовали прослушиватель или сокеты UDP *.Важная часть заключается в том, что он адресный и активный.Отправка сообщения на адрес 1.1.1.1:1234 вряд ли сработает, поскольку для этой конечной точки не определен сокет.

Сокеты зависят от протокола, поэтому реализация уникальности, которая TCP/ИП и UDP/ИП использует* (ipaddress:port), отличается от, например, 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 (программирование).«Сокет» создается (в коде) путем объединения порта и имени хоста или сетевого адаптера в структуру данных, которую вы можете использовать для отправки или получения данных.

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

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

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

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}

Разговор — это канал связи между двумя процессами, отражающий связь между ними.Ассоциация — это кортеж из пяти элементов, который полностью определяет два процесса, составляющих соединение:{протокол, локальный адрес, локальный процесс, внешний адрес, внешний процесс}

Например, в пакете TCP/IP:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

может быть действительной ассоциацией.

Полуассоциация – это либо:{протокол, локальный адрес, локальный процесс}

или

{протокол, внешний адрес, внешний процесс}

которые определяют каждую половину соединения.

Полуассоциация также называется сокетом или транспортным адресом.То есть сокет — это конечная точка связи, которой можно присвоить имя и адресовать ее в сети.Интерфейс сокета — это один из нескольких интерфейсов прикладного программирования (API) для протоколов связи.Разработанный как универсальный интерфейс коммуникационного программирования, он был впервые представлен в системе UNIX 4.2BSD.Хотя он не был стандартизирован, он стал де-факто отраслевым стандартом.

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

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

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

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

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

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

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

от Учебное пособие по Oracle Java:

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

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

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

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

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

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

SAVINGACCOUNT_EMPLOYEE1 - ваш дескриптор сокета, поэтому может быть SAVINGACCOUNT_EMPLOYE1 для SAVINGACCOUNT_EMOLYEEN.Это все дескрипторы сокетов.

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

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

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

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

Примечание:

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

Надеюсь, это развеет ваши сомнения

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

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

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

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

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

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

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

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

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

На этот вопрос уже были даны теоретические ответы.Я хотел бы дать практический пример на этот вопрос, который прояснит ваше понимание о сокете и порте.

я нашел это здесь

Этот пример проведет вас через процесс подключения к веб-сайту, например 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.Это сторона сервера Connect, но сервер должен знать, куда отправить веб -страницу, которую вы хотите просмотреть в Mozilla Firefox, поэтому у вас также есть розетка для клиентской стороны соединения.

Соединение на стороне клиента состоит из вашего IP -адреса, такого как 192.168.1.25, и случайно выбранного номера динамического порта.Сокет, связанный с Firefox, выглядит как 192.168.1.25:49175.Поскольку веб -серверы работают на порту 80 TCP, оба этих розеток являются гнездами 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

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

Также определение в Java-документация.

Порт:

Порт может ссылаться на точку физического соединения для периферийных устройств, таких как серийные, параллельные и USB -порты.Термин «порт» также относится к определенным точкам подключения Ethernet, как точки на концентраторе, коммутаторе или маршрутизаторе.

Разъем:

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

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

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

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

Стивенс, В.Р.1998, Сетевое программирование UNIX:Сетевые API:Розетки и XTI;Том 1, Прентис Холл.
Стивенс, В.Р., 1994, Иллюстрированный TCP/IP, Том 1:Протоколы, Аддисон-Уэсли.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top